<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sky's blog

    我和我追逐的夢

    常用鏈接

    統計

    其他鏈接

    友情鏈接

    最新評論

    誰在創建session(2)-悄悄干活的jsp

    jsp文件是session創建的一個源頭,這里指的不是在jsp文件中用代碼或者標簽來操作session,這些都是在控制中的。容易忽視或者說根本就不會意識到的(比如我,就是寫jsp三年后才發現的)是,jsp有自動創建session的機制,在jsp頁面中,如果沒有明確的給出 <%  @page session="false"%>,jsp頁面會非常乖巧(如果剛好需要)或者說是偷偷摸摸(如果不需要)的自動在生成的java文件中增加一句: javax.servlet.http.HttpSession session = request.getSession(true)。

    為了驗證這個說法,我們做以下測試,先來一個最簡單的jsp文件,名字也簡單a.jsp,放到resin下。a.jsp的內容如下,注意里面有一個<%=1%>,后面會詳細解釋為什么需要這句話:

    <%@ page session="true"%>
    <html>
    <head>
    <title>test</title>
    </head>
    <body>
    <%=1%>
    </body>
    </html>

    用頁面訪問一下,然后到resin下webapp目錄的WEB-INF/work/_jsp目錄下找到_a__jsp.java,打開可以看到
    public class _a__jsp extends com.caucho.jsp.JavaPage
    有關jsp頁面是如何轉換為java文件再被編譯成class的介紹,請google。看我們關心的public void  _jspService()方法:

    public void  _jspService(javax.servlet.http.HttpServletRequest request,
                  javax.servlet.http.HttpServletResponse response)
        throws java.io.IOException, javax.servlet.ServletException
      {
        javax.servlet.http.HttpSession session = request.getSession(true);
        com.caucho.server.webapp.Application _jsp_application = _caucho_getApplication();

    可以看到第一行,明確的調用了request.getSession(true),session就是再這里被自動創建的,這里也就是JSP中隱含的session對象的來歷。
    使用抓包軟件,可以看到請求這個jsp頁面的http response里面有以下內容:
    Set-Cookie: JSESSIONID=abc0zn72YuHtacvaaORBr; path=/
    這個是剛才創建的session的jsessionid,被保存到cookie中。

    然后繼續測試,設置為
    <%@ page session="false"%>

    打開java文件:
    public void _jspService(javax.servlet.http.HttpServletRequest request,
                  javax.servlet.http.HttpServletResponse response)
        throws java.io.IOException, javax.servlet.ServletException
      {
        com.caucho.server.webapp.Application _jsp_application = _caucho_getApplication();

    沒有javax.servlet.http.HttpSession session = request.getSession(true);
    這行代碼了,同時http response 中沒有Set-Cookie: JSESSIONID=***的語句了。
    ok,這下清晰了。

    再來解釋一下為什么要在剛才的jsp文件里面增加<%=1%>這行,我們先做測試,將<%=1%>刪除,同樣測試<%@ page session="true/false"%>兩種情況。可以看到
    public void _jspService(javax.servlet.http.HttpServletRequest request,
                  javax.servlet.http.HttpServletResponse response)
        throws java.io.IOException, javax.servlet.ServletException
      {
        javax.servlet.http.HttpSession session = request.getSession(true);


    則不管是否有<%@ page session="true"%>都不自動創建session。考慮刪除<%=1%>后的jsp文件內容

    <%@ page session="true"%>
    <html>
    <head>
    <title>test</title>
    </head>
    <body>
    </body>
    </html>
    這個是最簡單的純html頁面,估計是resin的實現考慮優化了這點。(resin: 都純html了,還要session干嘛?)

    最后再澄清一點,發現網絡上很多人持有一個觀點: session在第一次訪問時創建。這個明顯的是被jsp文件自動創建(默認是true哦)session給誤導了,其實只有明確的調用request.getSession()/request.getSession(true)才會生成session。只是大多數人的jsp頁面不會明確加入<%@ page session="false"%>,也不了解這個機制,造成了錯誤的理解。

    posted on 2007-12-19 12:26 sky ao 閱讀(3804) 評論(3)  編輯  收藏 所屬分類: web

    評論

    # re: 誰在創建session(2)-悄悄干活的jsp[未登錄] 2007-12-19 18:24 GoKu

    看看COOKIE里面的JSESSIONID就知道了  回復  更多評論   

    # re: 誰在創建session(2)-悄悄干活的jsp 2007-12-24 11:00 yoseasoft

    精辟的解釋  回復  更多評論   

    # re: 誰在創建session(2)-悄悄干活的jsp[未登錄] 2008-01-19 04:12 Eric

    我覺得你被Resin搞混了,Resin對於<%@ page session="true|false"%>所產生的java code不符合JSP的Spec
    請參考一下官方文件對此參數的說明
    http://java.sun.com/products/jsp/syntax/1.1/syntaxref118.html#15653

    實際上那段code 應該是
    1. <%@ page session="true"%>
    javax.servlet.http.HttpSession session = pageContext.getSession();
    2. <%@ page session="false"%>
    不會產生上面那段Code, 也就是說你無法在該JSP的程式碼中直接取用implicit object- session
      回復  更多評論   

    主站蜘蛛池模板: 亚洲国产中文v高清在线观看| 久久久精品免费国产四虎| 免费观看黄网站在线播放| 亚洲神级电影国语版| 五月亭亭免费高清在线| 亚洲无圣光一区二区| 2019中文字幕在线电影免费 | 激情内射亚洲一区二区三区爱妻| 久久免费福利视频| 亚洲精品熟女国产| 亚洲一级毛片免费在线观看| 亚洲国产精品线在线观看| 57pao一国产成永久免费| 亚洲午夜电影一区二区三区| 成人免费无遮挡无码黄漫视频| 亚洲乱理伦片在线观看中字| 国产精品免费电影| 日韩大片在线永久免费观看网站 | 亚洲AV一宅男色影视| 国产精品免费AV片在线观看| 亚洲欧洲国产日韩精品| 黄瓜视频影院在线观看免费| 亚洲精品国产suv一区88| 国产大片91精品免费观看男同 | 最近2019中文字幕免费看最新 | 亚洲成a人片在线观看天堂无码| 国产精品麻豆免费版| 国产精品永久免费视频| 亚洲av激情无码专区在线播放| 日本免费一区二区三区四区五六区 | 免费无码又黄又爽又刺激| 无套内谢孕妇毛片免费看看| 亚洲精品无码久久久影院相关影片| 最近中文字幕无免费| 亚洲永久网址在线观看| 亚洲色婷婷综合开心网| 久久久精品2019免费观看| 亚洲av无码成人精品国产| 国产精品亚洲A∨天堂不卡| 成人午夜大片免费7777| eeuss影院免费直达入口|