急~Struts2 Spring和Hibernate整合时 有关文本输出的Action抛异常
只是做了一个返回文本的Action
<action name="user" class="userAction" > <result name="success" type="plainText"></result> </action>
@SuppressWarnings("serial")public class UserAction extends ActionSupport{ public String doLogout(){ try { HttpServletResponse response = ServletActionContext.getResponse(); ActionContext.getContext().getSession().clear(); PrintWriter out = response.getWriter(); response.setContentType("text/plain;charset=utf-8"); response.setHeader("Cache-Control", "no-cache"); out.write("{'msg':'"+StringUtil.chinaToUnicode("你安全退出了!")+"'}"); } catch (Exception e) { // TODO: handle exception } finally{ return SUCCESS; } } }
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
[解决办法]
既然out.write("{'msg':'"+StringUtil.chinaToUnicode("你安全退出了!")+"'}");
就不需要 return SUCCESS;
直接return null就行了
[解决办法]
ActionContext.getContext().getSession().clear();
楼主为什么写这句呢?
[解决办法]
response已经将数据发送到客户端了,同时必须发送一个sessionid给客户端,但sesson已经被清空了,所以就无法发送Sessionid 了。你把“ActionContext.getContext().getSession().clear();”这句去掉看看
[解决办法]
觉得6楼分析的有道理