监听HTTP会话
2011年09月01日
监听HTTp会话是利用Servlet监听程序。结合监听技术,来讨论获得当前平台中用户总数的方法。
在Web应用中,可以监听HTTP会话活动情况、HTTP会话中属性的设置情况,也可以监听HTTP会话的active、passivate情况等
可以通过HttpSessionListener接口监听HTTP会话创建、销毁的信息;通过HttpSessionActivationListener监听HTTP会话的active、passivate情况;通过HttpSessionBindingListener监听HTTP会话中对象的绑定信息;通过HttpSessionAttributeListener监听HTTP会话中属性的设置请求。
下面看个实例
package com.test.ch9; import java.util.Hashtable; import java.util.Iterator; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class SessionListener implements HttpSessionListener{ //集合对象,保存session对象的引用 static Hashtable ht=new Hashtable(); //实现HttpSessionListener接口,完成session创建事件控制 public void sessionCreated(HttpSessionEvent arg0){ HttpSession session=arg0.getSession(); ht.put(session.getId(),session); System.out.println("create session:"+session.getId()); } //实现HttpSessionListener接口,完成session销毁事件控制 public void sessionDestroyed(HttpSessionEvent arg0){ HttpSession session=arg0.getSession(); System.out.println("destory session:"+session.getId()); ht.remove(session.getId()); } // 返回全部session对象集合 static public Iterator getSet(){ return ht.values().iterator(); } //依据session id返回指定的session对象 static public HttpSession getSession(String sessionId){ return (HttpSession)ht.get(sessionId); } }
该实例中,SessionListener实现了HttpSessionListener接口。SessionListener类还有一个属性,就是Hashtable用来保存所有的登录信息。当创建一个Session时,就调用sessionCreate()方法将登陆会话信息保存到Hashtable中;当销毁有关Session时,就调用sessionDestroyed()方法将登陆会话信息从Hashtable中移除,这样就实现了管理在线用户登录会话信息的目的。
我们还需要几个页面程序来测试这个监听器的工作并且深入体会下Session的会话管理机制。
测试程序如下:
会话管理 会话管理实例 名称: 事件: 提交 重置
当访问index.jsp时会出现一个类似登录框的会话描述页面,输入会话描述后进入display.jsp显示刚才输入的会话信息。
例如
会话控制显示 "); out.println("thing:"+session.getAttribute("thing") +"
"); out.println("session id:"+session.getId()+"
"); out.println("create time:"+session.getCreateTime()); %> 管理 注销
单击管理会进入会话关联页面(session.jsp)单击“注销”会进入会话注销页面(logout.jsp)是HTTP会话无效,
例如:会话关联的程序
Manager session JSP 会话管理
会话Id 用户名 事件 创建时间 操作 "); out.println(""+session1.getId()+"") out.println(""+session1.getAttribute("name")+""); out.println(""+session1.getAttribute("thing")+"") out.println(""+session1.getCreationTime()+"") ; %> '>销毁 "); System.out.println("sessionId"+session1.getId()); } catch(Exception ex){ ex.printStackTrace(); return; } } %>
注销会话的程序(logout.jsp)
会话控制
如果单击“销毁”,则可以强制将会话信息移除如下
LL JSP
最后将监听器部署到web.xml中去。如下
com.test.ch9.SessionListener
2011年09月01日
监听HTTp会话是利用Servlet监听程序。结合监听技术,来讨论获得当前平台中用户总数的方法。
在Web应用中,可以监听HTTP会话活动情况、HTTP会话中属性的设置情况,也可以监听HTTP会话的active、passivate情况等
可以通过HttpSessionListener接口监听HTTP会话创建、销毁的信息;通过HttpSessionActivationListener监听HTTP会话的active、passivate情况;通过HttpSessionBindingListener监听HTTP会话中对象的绑定信息;通过HttpSessionAttributeListener监听HTTP会话中属性的设置请求。
下面看个实例
package com.test.ch9; import java.util.Hashtable; import java.util.Iterator; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class SessionListener implements HttpSessionListener{ //集合对象,保存session对象的引用 static Hashtable ht=new Hashtable(); //实现HttpSessionListener接口,完成session创建事件控制 public void sessionCreated(HttpSessionEvent arg0){ HttpSession session=arg0.getSession(); ht.put(session.getId(),session); System.out.println("create session:"+session.getId()); } //实现HttpSessionListener接口,完成session销毁事件控制 public void sessionDestroyed(HttpSessionEvent arg0){ HttpSession session=arg0.getSession(); System.out.println("destory session:"+session.getId()); ht.remove(session.getId()); } // 返回全部session对象集合 static public Iterator getSet(){ return ht.values().iterator(); } //依据session id返回指定的session对象 static public HttpSession getSession(String sessionId){ return (HttpSession)ht.get(sessionId); } }
该实例中,SessionListener实现了HttpSessionListener接口。SessionListener类还有一个属性,就是Hashtable用来保存所有的登录信息。当创建一个Session时,就调用sessionCreate()方法将登陆会话信息保存到Hashtable中;当销毁有关Session时,就调用sessionDestroyed()方法将登陆会话信息从Hashtable中移除,这样就实现了管理在线用户登录会话信息的目的。
我们还需要几个页面程序来测试这个监听器的工作并且深入体会下Session的会话管理机制。
测试程序如下:
会话管理 会话管理实例 名称: 事件: 提交 重置
当访问index.jsp时会出现一个类似登录框的会话描述页面,输入会话描述后进入display.jsp显示刚才输入的会话信息。
例如
会话控制显示 "); out.println("thing:"+session.getAttribute("thing") +"
"); out.println("session id:"+session.getId()+"
"); out.println("create time:"+session.getCreateTime()); %> 管理 注销
单击管理会进入会话关联页面(session.jsp)单击“注销”会进入会话注销页面(logout.jsp)是HTTP会话无效,
例如:会话关联的程序
Manager session JSP 会话管理
会话Id 用户名 事件 创建时间 操作 "); out.println(""+session1.getId()+"") out.println(""+session1.getAttribute("name")+""); out.println(""+session1.getAttribute("thing")+"") out.println(""+session1.getCreationTime()+"") ; %> '>销毁 "); System.out.println("sessionId"+session1.getId()); } catch(Exception ex){ ex.printStackTrace(); return; } } %>
注销会话的程序(logout.jsp)
会话控制
如果单击“销毁”,则可以强制将会话信息移除如下
LL JSP
最后将监听器部署到web.xml中去。如下
com.test.ch9.SessionListener