Servlet监听器及在线用户
2014-05-16 19:14
169 查看
Servlet中的监听器分为三种类型
Ⅰ 监听ServletContext、Request、Session作用域的创建和销毁
(1)ServletContextListener
(2)HttpSessionListener
(3)ServletRequestListener
Ⅱ 监听ServletContext、Request、Session作用域中属性变化(增加、修改、删除)
(1)ServletContextAttributeListener
(2)HttpSessionAttributeListener
(3)ServletRequestAttributeListener
上面两种监听器需要在web.xml中注册
<listener>
<listener-class>com.hitech.listener._ServletContextListener</listener-class>
</listener>
Ⅲ 监听HttpSession中对象状态的改变(被绑定、解除绑定、钝化、活化)
(1)HttpSessionBindingListener 感知到绑定以及解除绑定
(2)HttpSessionActivationListener 感知钝化和活化 状态改变
对象的钝化和活化还需要实现Serializable标记接口,在可以被序列化到文件
该类型监听器不需要在web.xml中进行配置,通常是JavaBean实现接口。
显示在线用户功能的实现:
封装用户信息的JavaBean -- UserBean implements HttpSessionListener
1、用户登录功能:
根据用户输入的用户名密码查找数据库中匹配的用户信息,封装为UserBean对象返回并存入Session作用域中,就 可以保存用户的登录的状态
2、存储用户登录状态的数据结构
在Web应用加载时就创建出可以存储用户信息和对应Session的Map,使用ServletContextListener监听器
覆盖public void contextInitialized(ServletContextEvent sce)方法,可以通过sce对象获取ServletContext对象
Map<UserBean,HttpSession> userMap = new HashMap<UserBean,HttpSession>();
sce.getServletContext.setAttribute("userMap",userMap);
3、UserBean实现HttpSessionListener接口
UserBean实现HttpSessionListener接口后覆盖
public void valueBound(HttpSessionBindingEvent event) -- UserBean对象存入Session域时触发
用户登录后时自动触发该方法,可以在这里实现向在线用户列表中添加用户
通过event.getSession.getServletContext.getAttribute("userMap")获取到存入ServletContext域中的userMap
userMap.put(this, event.getSession())把当前登录的用户及其Session存入Map中
public void valueUnbound(HttpSessionBindingEvent event) -- UserBean对象移出Session域触发
当用户注销或Session超时都会自动触发,可以自动移除用户Session
4、可能会出现的问题:
(1)用户会登录两次的情况
在用户登录时,在Map中检查用户是否已经登录过,如果登录过,先移除之前的Session再登录
if(userMap.containsKey(bean)){
userMap.get(bean).invalidate();//销毁之前的Session
}
(2)但是HaspMap比较两个bean对象是否相同,依赖hashCode()和equals()方法,所以UserBean还需重写这两个方法才能保证
Ⅰ 监听ServletContext、Request、Session作用域的创建和销毁
(1)ServletContextListener
(2)HttpSessionListener
(3)ServletRequestListener
Ⅱ 监听ServletContext、Request、Session作用域中属性变化(增加、修改、删除)
(1)ServletContextAttributeListener
(2)HttpSessionAttributeListener
(3)ServletRequestAttributeListener
上面两种监听器需要在web.xml中注册
<listener>
<listener-class>com.hitech.listener._ServletContextListener</listener-class>
</listener>
Ⅲ 监听HttpSession中对象状态的改变(被绑定、解除绑定、钝化、活化)
(1)HttpSessionBindingListener 感知到绑定以及解除绑定
(2)HttpSessionActivationListener 感知钝化和活化 状态改变
对象的钝化和活化还需要实现Serializable标记接口,在可以被序列化到文件
该类型监听器不需要在web.xml中进行配置,通常是JavaBean实现接口。
显示在线用户功能的实现:
封装用户信息的JavaBean -- UserBean implements HttpSessionListener
1、用户登录功能:
根据用户输入的用户名密码查找数据库中匹配的用户信息,封装为UserBean对象返回并存入Session作用域中,就 可以保存用户的登录的状态
2、存储用户登录状态的数据结构
在Web应用加载时就创建出可以存储用户信息和对应Session的Map,使用ServletContextListener监听器
覆盖public void contextInitialized(ServletContextEvent sce)方法,可以通过sce对象获取ServletContext对象
Map<UserBean,HttpSession> userMap = new HashMap<UserBean,HttpSession>();
sce.getServletContext.setAttribute("userMap",userMap);
3、UserBean实现HttpSessionListener接口
UserBean实现HttpSessionListener接口后覆盖
public void valueBound(HttpSessionBindingEvent event) -- UserBean对象存入Session域时触发
用户登录后时自动触发该方法,可以在这里实现向在线用户列表中添加用户
通过event.getSession.getServletContext.getAttribute("userMap")获取到存入ServletContext域中的userMap
userMap.put(this, event.getSession())把当前登录的用户及其Session存入Map中
public void valueUnbound(HttpSessionBindingEvent event) -- UserBean对象移出Session域触发
当用户注销或Session超时都会自动触发,可以自动移除用户Session
4、可能会出现的问题:
(1)用户会登录两次的情况
在用户登录时,在Map中检查用户是否已经登录过,如果登录过,先移除之前的Session再登录
if(userMap.containsKey(bean)){
userMap.get(bean).invalidate();//销毁之前的Session
}
(2)但是HaspMap比较两个bean对象是否相同,依赖hashCode()和equals()方法,所以UserBean还需重写这两个方法才能保证
相关文章推荐
- Servlet监听器定时监听在线用户生成列表
- 对jsp的一个小结(8)使用servlet控制新闻管理、使用过滤器(解决乱码)和监听器(统计在线用户人数)
- JavaWeb-Servlet技术的监听器-解析与实例-网站在线用户信息与网页点击量
- java 监听器(监听用户监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可 以自动激发一些操作,比如监听在线的用户的数量。当增加一在线人数)
- 【Listener】利用监听器Listener以MVC的思想通过JSP+Servlet+JDBC完成在线用户列表的输出
- 基于Servlet监听器的在线用户计数器
- (转)Servlet监听器统计在线人数
- J2EE用监听器实现同一用户只能有一个在线
- 第七章 监听器listener显示在线用户案例学习心得
- J2EE用监听器实现同一用户只能有一个在线
- 监听器配置,java监听器,登陆监听,Listener,struts监听器配置,用户在线统计
- 监听器配置,java监听器,登陆监听,Listener,struts监听器配置,用户在线统计
- servlet过滤器2 解决用户非法在线 filter
- Strtus2 session 监听器 监听用户在线状态
- java web监听器统计在线用户及人数
- 如何用servlet/jsp实现在线用户统计
- 使用监听器统计当前的在线用户数
- J2EE用监听器实现同一用户只能有一个在线
- Servlet监听器,统计网站在线人数实例
- Servlet监听器——实现在线登录人数统计小例子