按照前面的方法,將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。搞定!