按照前面的方法,将jsp页面加入<%@ page session="false"%>之后,发现还是有新的session会意外的蹦出来。仔细检查action没有操作session,那这次是谁干的呢?将目光转回jsp文件,首先来次狠的,将这个jsp文件的内容删空为只有纯html内容。重新运行后发现不会自动生成session,ok,问题在jsp文件里面了。将原来的内容一点点的加回去,反复测试直到session自动创建的问题再次出现, 哈,发现问题出现在webwork的标签上。
这次出问题的a.jsp代码内容为:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page session="false" %>
<%@taglib prefix="ww" uri="webwork" %>
<!DOCTYPE html PUBLIC "-//W3C/m/DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<ww:i18n name="'msg'">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<%=1%>
</body>
</html>
</ww:i18n>
部署到webapp的根目录,在浏览器中直接用http://****/a.jsp访问,通过抓包工具发现有
Set-Cookie: JSESSIONID=abclEpuvWZhHD_UWW7WBr; path=/
将上述文件复制为b.jsp,删除<ww:i18n>标签,代码修改为:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page session="false" %>
<%@taglib prefix="ww" uri="webwork" %>
<!DOCTYPE html PUBLIC "-//W3C/m/DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<%=1%>
</body>
</html>
再次测试,发现不再创建session,由此可以确认是webwork的标签所为。
继续追踪为什么webwork的标签会如此处理,还是google大法,很快在webwork的2.2文档中发现了这么一段:
http://wiki.javascud.org/display/ww2cndoc/WebWork+2.2+Migration+Notes
"session map wrapper (在ActionContext里建立的) 已经改变了不在为每个请求创建session. 如果你的应用程序依赖session会被自动创建,WebWork 2.2已经不在那样做了.作为替代,你必须自己创建session或者当把一个数据放到session Map里时session会被创建. "
对照了一下我当前测试的版本, webwork2.1.7,看来是这里了。马上上webwork的网站下了最新的2.2.6版本,最快速度搭建了一个测试环境。将刚才的a.jsp/b.jsp拉过去测试了以下,ok,果然新的2.2版本修改了原来的做法,不再创建session。搞定!