Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TokenHelper中setSessionToken时引发java.lang.IllegalStateException_Java_Jsp_Struts2_Interceptor_Httpsession - Fatal编程技术网

TokenHelper中setSessionToken时引发java.lang.IllegalStateException

TokenHelper中setSessionToken时引发java.lang.IllegalStateException,java,jsp,struts2,interceptor,httpsession,Java,Jsp,Struts2,Interceptor,Httpsession,我有一个Java应用程序运行在Linux操作系统和Jetty服务器上 Struts操作,它更改Linux系统的日期和时间,并在呈现另一个页面后更改。 操作已成功执行,但在呈现页面时将抛出java.lang.IllegalStateException 我在JSP页面中使用了s:token标记来防止表单的重复提交 错误跟踪如下: ERROR TokenHelper Error creating HttpSession due response is committed to client. You

我有一个Java应用程序运行在Linux操作系统和Jetty服务器上

Struts操作,它更改Linux系统的日期和时间,并在呈现另一个页面后更改。 操作已成功执行,但在呈现页面时将抛出
java.lang.IllegalStateException

我在JSP页面中使用了
s:token
标记来防止表单的重复提交

错误跟踪如下:

ERROR TokenHelper Error creating HttpSession due response is committed to client. You can use the CreateSessionInterceptor or create the HttpSession from your action before the result is rendered to the client: null
 java.lang.IllegalStateException
    at org.eclipse.jetty.server.session.AbstractSession.checkValid(AbstractSession.java:109)
    at org.eclipse.jetty.server.session.HashedSession.checkValid(HashedSession.java:73)
    at org.eclipse.jetty.server.session.AbstractSession.getAttribute(AbstractSession.java:132)
    at org.apache.struts2.dispatcher.SessionMap.get(SessionMap.java:161)
    at org.apache.struts2.dispatcher.SessionMap.put(SessionMap.java:179)
    at org.apache.struts2.util.TokenHelper.setSessionToken(TokenHelper.java:93)
    at org.apache.struts2.util.TokenHelper.setToken(TokenHelper.java:79)
    at org.apache.struts2.components.Token.buildToken(Token.java:107)
    at org.apache.struts2.components.Token.evaluateExtraParams(Token.java:97)
    at org.apache.struts2.components.UIBean.evaluateParams(UIBean.java:886)
    at org.apache.struts2.components.UIBean.end(UIBean.java:535)
    at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
    at org.apache.jsp.pages.Continue_jsp._jspx_meth_s_token_0(org.apache.jsp.pages.Continue_jsp:495)
    at org.apache.jsp.pages.Continue_jsp._jspx_meth_s_form_0(org.apache.jsp.pages.Continue_jsp:429)
    at org.apache.jsp.pages.Continue_jsp.access$6(org.apache.jsp.pages.Continue_jsp:407)
    at org.apache.jsp.pages.Continue_jsp$Continue_jspHelper.invoke2(org.apache.jsp.pages.Continue_jsp:1197)
    at org.apache.jsp.pages.Continue_jsp$Continue_jspHelper.invoke(org.apache.jsp.pages.Continue_jsp:1221)
请让我们知道处理错误的可能解决方案或建议

错误
TokenHelper
错误创建
HttpSession
将响应提交给客户端。在将结果呈现给客户端之前,可以使用或通过操作创建
HttpSession

您可以使用类似以下代码创建
HttpSession

ActionContext context = ActionContext.getContext();
SessionMap<String, T> sessionMap = (SessionMap<String, T>) context.getSession();

if (sessionMap == null) {
    sessionMap = new SessionMap<String, T>(ServletActionContext.getRequest());
    context.setSession((Map<String, Object>) sessionMap);
}
ActionContext=ActionContext.getContext();
SessionMap SessionMap=(SessionMap)context.getSession();
if(sessionMap==null){
sessionMap=newsessionmap(ServletActionContext.getRequest());
setSession((Map)sessionMap);
}

有一个

此拦截器创建
HttpSession
,如果它不存在,也会重新创建
SessionMap
,并将其放入
ServletActionContext

在freemarker中使用
标记时,这尤其有用 模板。标记确实要求已创建
HttpSession
因为freemarker会立即将响应提交给客户端


发布一些代码。