之前在實現uploadify文件上傳時,遇到火狐瀏覽器不兼容的問題,在網上找了些資料,自己動手把他解決了,其中有一個就是session的重新發起。特此記錄。
因為Servlet2.1之后不支持SessionContext里面getSession(String id)方法。
所以我們可以通過HttpSessionListener監聽器和全局靜態map自己實現一個SessionContext。
1 public class MySessionContext { 2 private static HashMap mymap = new HashMap(); 3 public static synchronized void AddSession(HttpSession session) { 4 if (session != null) { 5 mymap.put(session.getId(), session); 6 } 7 } 8 public static synchronized void DelSession(HttpSession session) { 9 if (session != null) { 10 mymap.remove(session.getId()); 11 } 12 } 13 public static synchronized HttpSession getSession(String session_id) { 14 if (session_id == null) 15 return null; 16 return (HttpSession) mymap.get(session_id); 17 } 18 }
監聽器:MySessionListener.java
public class MySessionListener implements HttpSessionListener { public void sessionCreated(HttpSessionEvent httpSessionEvent) { MySessionContext.AddSession(httpSessionEvent.getSession()); } public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { HttpSession session = httpSessionEvent.getSession(); MySessionContext.DelSession(session); } }
最后在web.xml文件里面添加我們創建的監聽器:
<listener> <listener-class>listener.MySessionListener</listener-class> </listener>
接下來你就可以在Action中根據sessionId獲取Session對象了:
String sessionId = request.getParameter("sessionId");傳遞的sessionid
HttpSession session = MySessionContext.getSession(sessionId);
在火狐瀏覽器uploadify文件上傳就會用到這個東西,當然這是我個人的處理方式,可能還有更牛逼的方法;