TokenHelper中setSessionToken时引发java.lang.IllegalStateException
我有一个Java应用程序运行在Linux操作系统和Jetty服务器上 Struts操作,它更改Linux系统的日期和时间,并在呈现另一个页面后更改。 操作已成功执行,但在呈现页面时将抛出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.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会立即将响应提交给客户端
发布一些代码。