根据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);

你可能感兴趣的:(java,api,servlet,session,HashMap,null)