- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在 Google App Engine 上开发一个简单的 servlet/JSP、数据驱动的网站。我已经开始在我的一些数据输入表单上使用 JSTL fmt 库,并且在使用标签时出现以下与 session 相关的错误 <fmt:dateFormat> and <fmt:numberFormat>:
[java] java.lang.RuntimeException:appengine-web.xml 中未启用 session 支持。要启用 session ,请将 true 放入该文件。没有它,允许 getSession(),但不允许操作 sessionattributes。
例如,我的 JSP 中的代码是:
<c:forEach var="item" items="${dayList}" >
<option><fmt:formatNumber value="${item}" pattern="00"/></option>
</c:forEach>
或
<jsp:useBean id="now" scope="page" class="java.util.Date" />
Now: ${now}<br/>
Year: <fmt:formatDate value="${now}" pattern="yyyy" />
当我注释掉这些行时,页面呈现,当重新打开时,错误结果。
我没有启用 session ,因为我不需要为这个 Web 应用程序启用它们,并且读到如果不需要的话最好不要启用。我已经确认没有属性是 session 范围的,我的 NetBeans 项目中唯一出现的“ session ”是在 web.xml 中:
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
在 appengine-web.xml 上启用 session 后,一切正常。
我的研究指出了一些您可以在 web.xml 中设置的与语言环境相关的上下文参数,即:
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.fallbackLocale</param-name>
<param-value>en-US</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
<param-value>en-US</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.timeZone</param-name>
<param-value>EDT</param-value>
</context-param>
我重新部署了这些参数集(并关闭了 session )并得到了同样的错误。
JSTL fmt 库似乎在 Web 表单上用于日期和数字等会非常方便,尽管在一天结束时我可能只需要启用 session 并继续 - 但我关于导致默认引用 session 的区域设置,我在这里遗漏了什么?这可能是 App Engine 特有的东西吗?
谢谢
附言这是禁用 session 时我得到的堆栈跟踪:
[java] Aug 17, 2010 2:41:26 AM com.google.apphosting.utils.jetty.JettyLogger warn
[java] WARNING: /manage/events/new
[java] java.lang.RuntimeException: Session support is not enabled in appengine-web.xml. To enable sessions, put <sessions-enabled>true</sessions-enabled> in that file. Without it, getSession() is allowed, but manipulation of sessionattributes is not.
[java] at com.google.apphosting.utils.jetty.StubSessionManager$StubSession.throwException(StubSessionManager.java:67)
[java] at com.google.apphosting.utils.jetty.StubSessionManager$StubSession.setAttribute(StubSessionManager.java:63)
[java] at org.apache.jasper.runtime.PageContextImpl.doSetAttribute(PageContextImpl.java:340)
[java] at org.apache.jasper.runtime.PageContextImpl.access$300(PageContextImpl.java:64)
[java] at org.apache.jasper.runtime.PageContextImpl$4.run(PageContextImpl.java:314)
[java] at java.security.AccessController.doPrivileged(Native Method)
[java] at org.apache.jasper.runtime.PageContextImpl.setAttribute(PageContextImpl.java:312)
[java] at org.apache.taglibs.standard.tag.common.fmt.SetLocaleSupport.setResponseLocale(SetLocaleSupport.java:209)
[java] at org.apache.taglibs.standard.tag.common.fmt.SetLocaleSupport.doEndTag(SetLocaleSupport.java:108)
[java] at org.apache.jsp.WEB_002dINF.update_005fevent_jsp._jspx_meth_fmt_setLocale_0(update_005fevent_jsp.java:362)
[java] at org.apache.jsp.WEB_002dINF.update_005fevent_jsp._jspService(update_005fevent_jsp.java:117)
[java] at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
[java] at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
[java] at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
[java] at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
[java] at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
[java] at com.google.appengine.tools.development.PrivilegedJspServlet.access$101(PrivilegedJspServlet.java:23)
[java] at com.google.appengine.tools.development.PrivilegedJspServlet$2.run(PrivilegedJspServlet.java:59)
[java] at java.security.AccessController.doPrivileged(Native Method)
[java] at com.google.appengine.tools.development.PrivilegedJspServlet.service(PrivilegedJspServlet.java:57)
[java] at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
[java] at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
[java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
[java] at com.cj.trim.trimFilter.doFilter(Unknown Source)
[java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[java] at com.queerartfilm.web.JSTLConfigFilter.doFilter(JSTLConfigFilter.java:114)
[java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[java] at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:51)
[java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[java] at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
[java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[java] at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
[java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[java] at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
[java] at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
[java] at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
[java] at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
[java] at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
[java] at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
[java] at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
[java] at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:349)
[java] at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
[java] at org.mortbay.jetty.Server.handle(Server.java:326)
[java] at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
[java] at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
[java] at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
[java] at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
[java] at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
[java] at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
[java] at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
最佳答案
那真是太不幸了。看起来你不能绕过这个。最好的办法是创建具有相同功能的自定义 EL 函数。下面是一个如何替换 fmt:formatDate
的示例。
首先创建一个 EL 函数类(只是一个简单的静态类):
package com.example;
import java.text.SimpleDateFormat;
import java.util.Date;
public final class Functions {
private Functions() {
//
}
public static String formatDate(Date date, String pattern) {
return new SimpleDateFormat(pattern).format(date);
}
}
然后创建一个/WEB-INF/functions.tld
(注意:针对JSP 2.1,不确定你的GAE支持什么,它可能是Servlet 2.4,如果是这样那么你需要重新声明它为JSP 2.0 标签库):
<?xml version="1.0" encoding="UTF-8" ?>
<taglib
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<display-name>Custom Functions</display-name>
<tlib-version>1.0</tlib-version>
<uri>http://example.com/functions</uri>
<function>
<name>formatDate</name>
<function-class>com.example.Functions</function-class>
<function-signature>java.lang.String formatDate(java.util.Date, java.lang.String)</function-signature>
</function>
</taglib>
然后您可以在您的 JSP 中按如下方式使用它:
<%@taglib uri="http://example.com/functions" prefix="f" %>
<jsp:useBean id="date" class="java.util.Date" />
...
<p>Current year: ${f:formatDate(date, 'yyyy')}</p>
关于java - JSTL fmt 库抛出 500 错误,需要启用 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3472699/
来自 java docs 公共(public) FileWriter(String fileName) 抛出 IOException 抛出: IOException - 如果指定的文件存在但它是目录而
我使用以下代码将我的 .net 客户端(基于 CQL)连接到 3 节点 Cassandra 集群。我以 30 条记录/秒的速度(从 RabbitMQ)获取数据,并且它们顺利地存储在 cassandra
如果在读取文件时缺少字段,我应该捕获 NoSuchElementException。如果缺少一个字段,我只需要跳到文件的下一行。我的问题是,我在哪里实现我的 try/catch 代码来做到这一点?这是
我正在尝试使用 ASP.NET MVC 实现 OpeinID 登录。我正在尝试按照 http://blog.nerdbank.net/2008/04/add-openid-login-support-
学习使用 Java 进行 xml 解析,并且正在编写一个测试程序来尝试各种东西。所有测试 System.out.println() 都是我在控制台中所期望的,除了 childElement 返回 [n
我正在尝试使用 SwingUtilities 创建 JFrame Thread tt = new Thread(new Runnable() { public void run
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我写了这段代码: MethodInfo method2 = typeof(IntPtr).GetMethod( "op_Explicit", Bind
我开始学习 Java,并且正在根据书本做一些练习。在执行此操作时,我遇到了以下错误:线程“main”java.util.InputMismatchException 中出现异常。我正在编写一个简单的程
我有一个文本文件,其中前两行是整数 m 和 n,然后有 m 行,每行都有 n 管道分隔值。我编写了一个程序,读取文件并使用文件中的值创建 m*n 数组,它工作了无数次,然后突然,使用相同的代码,使用相
所以我尝试使用在另一个类中生成的 bean 以在主应用程序中使用 package com.simon.spring.basics.properties; import org.spri
我还没有完成这个应用程序,但我希望在我的手机上看到它的样子。但是,它会强制关闭并引发 InstantiationException。 logcat 异常: 09-19 20:13:47.987: D/
我想从 UIViewController 加载一个基于 SwiftUI 的 View ,该 View 读取包本地的 json。仅 swiftUI 项目中的代码和绑定(bind)工作正常,当我利用 UI
'java.net.SocketTimeoutException:连接超时' 循环一段时间后我收到此错误。为什么我会收到 SocketTimeoutException?我该如何修复这个错误? @Ove
当有 null 值时抛出 ArgumentNullException() 是个好主意吗? This thread 没有提到在 null 上抛出的最明显的异常。 谢谢 最佳答案 ArgumentNull
我得到这个异常: NullReferenceException Object reference not set to an instance of an object at Namespace
所以其中一个方法的描述如下: public BasicLinkedList addToFront(T data) This operation is invalid for a sorted list
我正在使用 Intellij Idea,当我去生成 JavaDocs(通过工具 -> 生成 JavaDoc)时,我抛出了一个 IllegealArgumentException,没有关于发生了什么问题
我正在学习 C++ 中的互斥锁,但以下代码(摘自 N. Josuttis 的“C++ 标准库”)有问题。 我不明白为什么它会阻塞/抛出除非我在主线程中添加this_thread::sleep_for(
我正在试验 JavaFX 标签和组,通过鼠标拖动将它们移动到屏幕上。新节点从一些线程添加到动画组。但是,有时我会突然看到以下异常 - 我假设,当某些节点重叠时。但是不知道是什么问题……因为不涉及我的代
我是一名优秀的程序员,十分优秀!