本文引自:http://chenkuning.iteye.com/blog/642106 仅作收藏,别无他意
某jsp include另一个jsp之后偶尔报错:Cannot create a session after the response has been committed
google之后发现可能是session的创建时机不对,不应该在include的jsp里面创建session(并没有显示调用request.getSession(),但jsp页面默认有pageContext.getSession()的),如是在当前页面中加入:request.getSession();既然时机不对,那么在加入到当前页面中时就创建session,被include的jsp中就不需要创建了。OK, 一切正常。
"Cannot create a session after the response has been committed的根本原因并不再request.getSession(),而是在jsp开头的<%@ page session="false" %>",boss发话了。boss今天咋这么闲,连jsp都不放过,之前只有在修改了framework才会有机会聆听教导的。行,那我改改。
于是去掉当前页面中的<%@ page session="false" %>,这样在访问当前页面时就创建session,include的jsp中再创建(实际上是获取)session就没有问题了。测试OK, 一切正常。
"除了去掉<%@ page session="false" %>还有其他的方案吗?",boss又发话了。"在当前页面和被include的页面中都加入<%@ page session="false" %>应该也可以解决问题。......","那你觉得为什么要禁用session呢?", "......", "
有session的页面有可能会影响到缓存,本来是一个可以缓存的页面,加上session就不能缓存了"。
session和缓存有什么关系?只得暂时将当前页面和include页面都加入<%@ page session="false" %>,以确保不出现不过&&可缓