public interface HttpSessionListener
extends java.util.EventListener
Implementations of this interface are notified of changes to the list of active sessions in a web application. To receive notification events, the implementation class must be configured in the deployment descriptor for the web application
void sessionCreated(HttpSessionEvent se)
Notification that a session was created.
void sessionDestroyed(HttpSessionEvent se)
Notification that a session is about to be invalidated.
HttpSessionAttributeListener监听
HttpSession中的属性的操作。当在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法。
实际例子:
用户提出要求,需要知道哪些用户已经登录,但是在实际环境中,程序被部署到3台web上,前端用f5的负载均衡,那玩意没有玩过,幸好数据库是单一的,所以就简单建立了一个MySQL的内存表(Heap Table),来已经登录的用户信息。
Java代码
package com.nbrc.lddw.util;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.nbrc.lddw.interceptor.AuthorizeInterceptor;
import com.nbrc.lddw.model.OnlineInfo;
import com.nbrc.lddw.model.User;
import com.nbrc.lddw.service.OnlineUserService;
/**
*
* @author fox
* @date 2009-02-09
* @description 已登录用户的监听
*/
public class OnlineUserListener implements HttpSessionAttributeListener {
private static Log log = LogFactory.getLog(OnlineUserListener.class);
public void attributeAdded(HttpSessionBindingEvent hse) {
log.info("value bound! make session info ...");
HttpSession session = hse.getSession();
ApplicationContext context =
WebApplicationContextUtils.getRequiredWebApplicationContext(session.getServletContext());
OnlineUserService svr = (OnlineUserService)context.getBean("onlineService");
User u = null;
if(session.getAttribute(AuthorizeInterceptor.USR_KEY)!=null)
u = (User) session.getAttribute(AuthorizeInterceptor.USR_KEY);
if(u!=null && svr.findByUserId(u.getId())==null){
OnlineInfo info = new OnlineInfo();
info.setSessionId(session.getId());
info.setUserId(u.getId());
svr.save(info);
}else{
log.error("can't get user in session");
}
}
public void attributeRemoved(HttpSessionBindingEvent hse) {
HttpSession session = hse.getSession();
ApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(session.getServletContext());
OnlineUserService svr = (OnlineUserService)context.getBean("onlineService");
if(svr.findById(session.getId())!=null){
svr.removeById(session.getId());
}
}
public void attributeReplaced(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
}
}
分享到:
相关推荐
ServletContextListener、ServletContextAttributeListener、HttpSessionListener和HttpSessionAttributeListener则帮助监控和响应Web应用程序的特定事件。 【DAO与MVC框架】 第三周,你将学习Data Access Object ...
例如,一个在线统计的例子中,我们定义了一个类ONline,这个类实现了ServletContextListener、HttpSessionListener和HttpSessionAttributeListener接口。在contextInitialized方法中初始化用户列表,在...
比如,本文中的CountListen类实现了ServletContextListener接口,而SessionListen类则同时实现了HttpSessionListener和HttpSessionAttributeListener接口。 6. 在线人数统计的具体实现:通过监听器实现在线人数统计...
企业drp系统经典实现。 包括: v1.0 ... * HttpSessionAttributeListener * ServletContextListener v3.1 * JfreeChart的应用 v3.2 * 采用Ajax实现下拉列表的联动 v3.3 * 验证码的使用
总结起来,Java Web的监听器机制是增强应用程序功能的强大工具,通过`ServletContextListener`、`HttpSessionListener`和`HttpSessionAttributeListener`,我们可以实现对Web应用程序上下文、HttpSession以及session...
HttpSessionListener提供了对Session创建、销毁事件的监听,而HttpSessionAttributeListener则可以监听Session属性的变化,比如添加、移除和替换事件。 以下是创建一个简单的HttpSessionListener的例子: ```java ...
在这个“Servlet监听器例子”中,我们将深入探讨如何使用`ServletContextListener`, `HttpSessionListener`, 和 `HttpSessionAttributeListener`来实现不同的功能。 首先,`ServletContextListener`接口用于监听...
在Java Servlet API中,提供了多种监听器接口,例如HttpSessionListener、HttpSessionAttributeListener和HttpSessionBindingListener,用于监听会话的创建、销毁、属性添加、修改和移除等事件。 在这个特定的例子...
### 用户重复登录问题详解与解决方案 #### 一、问题背景及需求分析 在现代网络应用中,用户登录安全性和用户...同时,利用`HttpSessionListener`和`HttpSessionAttributeListener`能够方便地实现会话管理和状态跟踪。
在"监听器访问计数"的场景下,我们通常会使用HttpSessionListener或者HttpSessionAttributeListener来实现在线人数的统计。例如,当一个用户打开一个Web页面时,创建一个新的会话,监听器会接收到这个事件并增加在线...
`HttpSessionListener`可以监听Session的创建和销毁,而`HttpSessionAttributeListener`则可以监听Session属性的添加、移除和替换。 1. **创建Session监听器** 创建一个实现了`HttpSessionListener`接口的类,例如...
public class AmpList implements ServletContextListener,HttpSessionListener,HttpSessionAttributeListener { private ServletContext application=null; public void contextInitialized(ServletContext
Servlet容器支持监听器(Listener),如`HttpSessionListener`和`HttpSessionAttributeListener`,它们可以监听Session的创建、销毁和属性变化。监听器可用来统计在线用户、清理过期Session等。 ```java @Web...
监听器是实现了特定接口的Java类,这些接口如HttpSessionListener、HttpSessionAttributeListener等,它们是Servlet API的一部分。通过注册监听器,我们可以在session创建、销毁、属性添加、修改或移除等事件发生时...
4. **HttpSessionAttributeListener**:此接口允许开发者监听HttpSession中的属性变化,包括添加`attributeAdded(HttpSessionBindingEvent se)`、移除`attributeRemoved(HttpSessionBindingEvent se)`和更新`...
为了监听`HttpSession`的创建、销毁以及属性变化,可以使用`HttpSessionListener`和`HttpSessionAttributeListener`。注册这些监听器可以让我们在特定事件发生时执行相应的操作,如记录日志、清理资源等。 ```java ...
3. **Session监听器**:通过实现HttpSessionListener或HttpSessionAttributeListener接口,可以在Session创建、销毁或属性变化时执行特定操作。 4. **及时清理Session**:为了避免内存泄漏,开发者应合理设计...
为了实现在线人数统计,我们首先需要创建一个监听器类`OnLineDemo.java`,该类实现了`ServletContextListener`、`HttpSessionListener`和`HttpSessionAttributeListener`接口。 1. **监听器类`OnLineDemo.java`**:...
在Java Web中,我们可以使用HttpSessionListener或者HttpSessionAttributeListener接口来实现这一目标。这里我们将主要关注HttpSessionBindingListener,因为它可以监听到Session中的属性变化。 1. 创建一个实现了...