根據sessionid獲取session的被Servlet2.1拋棄getsession方法的解決方案

  最近一個項目中用到了getsession根據sessionid來獲取session,但是怎麼獲取都爲空,請教N多人,才發現在servlet的api中有如下:

        HttpSession HttpSessionContext.getSession (java.lang.String sessionId)
     
       不贊成的用法.   Java Servlet API的版本 2.1中,還沒有將之替換掉。該方法必須返回一個空值,且將會在未來的版本中被拋棄掉。

       最新的解決辦法是通過實現HttpSessionListener的sessionCreated和sessionDestroyed來實現

      解決步驟:
     
      1、在web.xml增加監聽:

     <listener>
           <listener-class>com.aceway.util.LoginSessionListener</listener-class>
     </listener>

      2、LoginSessionListener: 
           LoginSessionListener方法實現了HttpSessionListener,並且重寫sessionCreated和sessionDestroyed方法
        
          public static Map userMap = new HashMap();                                //創建了一個對象來保存session的
          private   MySessionContext myc=MySessionContext.getInstance();  //MySessionContext是實現session的讀取和刪除增加  單例模式

         public void sessionCreated(HttpSessionEvent event)
         {
             myc.AddSession(event.getSession());
         }
         public void sessionDestroyed(HttpSessionEvent event)
        {
        HttpSession session = event.getSession();
        myc.DelSession(session);
        }

     3、session的單例管理

Java代碼
  1. package  com.aceway.flex;  
  2. import  java.util.*;  
  3. import  javax.servlet.http.HttpSession;  
  4. public   class  MySessionContext   
  5. {  
  6.     private   static  MySessionContext instance;  
  7.     private  HashMap mymap;  
  8.     private  MySessionContext()  
  9.     {  
  10.         mymap = new  HashMap();  
  11.     }  
  12.     public   static  MySessionContext getInstance()  
  13.     {  
  14.         if (instance== null )  
  15.         {  
  16.             instance = new  MySessionContext();  
  17.         }  
  18.         return  instance;  
  19.     }  
  20.     public   synchronized   void  AddSession(HttpSession session)  
  21.     {  
  22.         if (session!= null )  
  23.         {  
  24.             mymap.put(session.getId(), session);  
  25.         }  
  26.     }  
  27.     public   synchronized   void  DelSession(HttpSession session)  
  28.     {  
  29.         if (session!= null )  
  30.         {  
  31.             mymap.remove(session.getId());  
  32.         }  
  33.     }  
  34.     public   synchronized  HttpSession getSession(String session_id)  
  35.     {  
  36.         if (session_id== null ) return   null ;  
  37.         return  (HttpSession)mymap.get(session_id);  
  38.     }  
  39. }  

4、這樣我們就可以單例來獲取session
     private MySessionContext myc=MySessionContext.getInstance();
       HttpSession session = myc.getSession(SessionId);

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