您的位置:首页 > 编程语言 > Java开发

java.lang.IllegalStateException: Cannot create a session after the response has been committed

2012-02-21 16:26 701 查看
2012-2-21 16:10:11 org.apache.catalina.core.StandardWrapperValve invoke

严重: Servlet.service() for servlet default threw exception

java.lang.IllegalStateException: Cannot create a session after the response has been committed

at org.apache.catalina.connector.Request.doGetSession(Request.java:2437)

at org.apache.catalina.connector.Request.getSession(Request.java:2157)

at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:833)

at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:844)

at com.avonaco.test.filter.WebResponseTime.doFilter(WebResponseTime.java:37)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at com.avonaco.test.filter.CharacterEncoding.doFilter(CharacterEncoding.java:24)

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:293)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

at java.lang.Thread.run(Unknown Source)

别人访问的时候报错 java.lang.IllegalStateException: Cannot create a session after the response has been committed

有时候在操作Session时,系统会抛出如下异常

java.lang.IllegalStateException: Cannot create a session after the response has been committed

之所以会出现此类问题是因为我们在Response输出响应后才创建Session的。

(因为那时候服务器已经将数据发送到客户端了,即:就无法发送Session ID 了)

解决办法:

你只需要在你的程序中将创建访问Session的语句【request.getSession()】提前至Response输出数据之前就好了。

例如改成下面的写法OK:

ServletOutputStream out = response.getOutputStream();

// 最好这样紧挨着 response.getOutputStream()

HttpSession seesion = request.getSession();

seesion.setAttribute("xxx", rand);

// 输出数据

out.print("<h1>hello</h1>");

out.close();

转自:http://apps.hi.baidu.com/share/detail/14557440

PS:

最后我这里是因为有一个页面在js中写了个让session失效 而卧却又杂filter过滤器中 去获取session 当页面被初始化的时候要经过过滤器...因前一页面在js中写的失效方法 故编译的时候被加载进去 导致在经过过滤器的时候报错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐