Session

1、通過Session來讓同一個會話域(Session scope)的應用來持有一個對象。
  例如我們創建了一個類Status,用來保存一些信息。怎麼讓JSP頁面,handler(一個類文件)持有同一個Status實例呢?
  在JSP中,可以通過以下方法來持有:
 ① Status status = (Status)request.getSession(false).getValue(WebKey.STATUS);
  這裏先用request.getSession(false),來得到與這個應用相同的Session,然後通過Session類的getValue(String name),來得到name指向的對象實例。

  在handler中,可以通過以下方法來持有Status的類實例:
 ② Status status = getStatus(request);

  這裏主要的就是getStatus方法了,這個方法是handler裏面的方法。是用來讓JSP和handler持有同一個Status實例的。看如下的實現:
 ③  protected Status getStatus(HttpServletRequest request)
         throws SessionExpiredException
         {
         HttpSession session = request.getSession(false);
         if(session == null)
                  throw new SessionExpiredException();
         Status status = (Status)session.getValue("status");
         if(status == null)
                  throw new SessionExpiredException();
         else
             return status;
         }
  通過上面的三項,可以看到,持有同一個應用的Session,實際上,都是通過request.getSession( true | false );這個方法,這是因爲request對象表示的就是HTTP的請求,而Session也是請求內容的一部分。
  Status status = (Status)session.getValue("status");(getValue在2.2以後,已經被getAttribute方法替代)中的"status",又是何時通過setAttribute方法設置的呢?這個就是我們打開的第一JSP頁面創建的(顯式創建),例如,我們在第一個頁面中有如下代碼:
     Status status = new Status();
         status.setUser(user);
         status.setStyle("shrj");
         session.putValue(WebKey.STATUS, status);
         session.putValue("style","shrj");
   那麼,我們就可以在getStatus方法中通過Status status = (Status)session.getValue("status");方法,讓JSP頁面和Handler處理類持有同一個Status實例。
  是不是所有的類,只要包含有HttpServletRequest參數,都可以通過session來讓這個類與JSP頁面持有同一個Status實例呢?
  從上面的描述中,抽出持有同一個Session的方法:
 ① JSP要向我們的Handler發送一個HttpServletRequest請求(這個要看我們的配置文件或from中的method值)
 ② 我們寫的方法(getStatus(HttpServletRequest request))要持有這個JSP頁面發送的HttpServletRequest請求。
 ③ 通過HttpServletRequest實例得到Session。
  持有同一個對象實例:
 這個就要通過Session實例的setAttribute(java.lang.String name, java.lang.Object value)這個方法,來通過一個name值爲Session來綁定這個對象。然後通過這同一個Session實例,利用getAttribute(java.lang.String name)方法來得到這個name指定的對象。
 
 ① Status status = new Status();
     session.setAttribute("status", status);
 ② HttpSession session = request.getSession(false); 
 ③ Status status = (Status)session.getAttribute("status");
 

發佈了28 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章