`
zjm16
  • 浏览: 71036 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
文章分类
社区版块
存档分类
最新评论

HttpSessionListener和HttpSessionAttributeListener

阅读更多
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  
          
    }  
      
 
分享到:
评论

相关推荐

    21天搞定JAVA.docx

    ServletContextListener、ServletContextAttributeListener、HttpSessionListener和HttpSessionAttributeListener则帮助监控和响应Web应用程序的特定事件。 【DAO与MVC框架】 第三周,你将学习Data Access Object ...

    JSP监听器用法分析

    例如,一个在线统计的例子中,我们定义了一个类ONline,这个类实现了ServletContextListener、HttpSessionListener和HttpSessionAttributeListener接口。在contextInitialized方法中初始化用户列表,在...

    java监听器实现在线人数统计

    比如,本文中的CountListen类实现了ServletContextListener接口,而SessionListen类则同时实现了HttpSessionListener和HttpSessionAttributeListener接口。 6. 在线人数统计的具体实现:通过监听器实现在线人数统计...

    企业drp系统经典源码

    企业drp系统经典实现。 包括: v1.0 ... * HttpSessionAttributeListener * ServletContextListener v3.1 * JfreeChart的应用 v3.2 * 采用Ajax实现下拉列表的联动 v3.3 * 验证码的使用

    java监听器学习 统计在线人数

    总结起来,Java Web的监听器机制是增强应用程序功能的强大工具,通过`ServletContextListener`、`HttpSessionListener`和`HttpSessionAttributeListener`,我们可以实现对Web应用程序上下文、HttpSession以及session...

    JAVA SESSION监听器

    HttpSessionListener提供了对Session创建、销毁事件的监听,而HttpSessionAttributeListener则可以监听Session属性的变化,比如添加、移除和替换事件。 以下是创建一个简单的HttpSessionListener的例子: ```java ...

    Servlet监听器例子

    在这个“Servlet监听器例子”中,我们将深入探讨如何使用`ServletContextListener`, `HttpSessionListener`, 和 `HttpSessionAttributeListener`来实现不同的功能。 首先,`ServletContextListener`接口用于监听...

    Servlet技术(事件监听器-在线踢人).zip

    在Java Servlet API中,提供了多种监听器接口,例如HttpSessionListener、HttpSessionAttributeListener和HttpSessionBindingListener,用于监听会话的创建、销毁、属性添加、修改和移除等事件。 在这个特定的例子...

    用户重复登录问题

    ### 用户重复登录问题详解与解决方案 #### 一、问题背景及需求分析 在现代网络应用中,用户登录安全性和用户...同时,利用`HttpSessionListener`和`HttpSessionAttributeListener`能够方便地实现会话管理和状态跟踪。

    监听器访问计数过滤非法字符

    在"监听器访问计数"的场景下,我们通常会使用HttpSessionListener或者HttpSessionAttributeListener来实现在线人数的统计。例如,当一个用户打开一个Web页面时,创建一个新的会话,监听器会接收到这个事件并增加在线...

    监听session的创建到销毁

    `HttpSessionListener`可以监听Session的创建和销毁,而`HttpSessionAttributeListener`则可以监听Session属性的添加、移除和替换。 1. **创建Session监听器** 创建一个实现了`HttpSessionListener`接口的类,例如...

    java session出现的错误

    public class AmpList implements ServletContextListener,HttpSessionListener,HttpSessionAttributeListener { private ServletContext application=null; public void contextInitialized(ServletContext

    Servlet对Cookie和Session的管理源码实例

    Servlet容器支持监听器(Listener),如`HttpSessionListener`和`HttpSessionAttributeListener`,它们可以监听Session的创建、销毁和属性变化。监听器可用来统计在线用户、清理过期Session等。 ```java @Web...

    day18 监听器 统计在线人数,定时销毁超时session,钝化活化session,在线列表显示和踢人功能防止用户自动登录,在线支付

    监听器是实现了特定接口的Java类,这些接口如HttpSessionListener、HttpSessionAttributeListener等,它们是Servlet API的一部分。通过注册监听器,我们可以在session创建、销毁、属性添加、修改或移除等事件发生时...

    JSP监听器用法分析.docx

    4. **HttpSessionAttributeListener**:此接口允许开发者监听HttpSession中的属性变化,包括添加`attributeAdded(HttpSessionBindingEvent se)`、移除`attributeRemoved(HttpSessionBindingEvent se)`和更新`...

    HttpSession的使用

    为了监听`HttpSession`的创建、销毁以及属性变化,可以使用`HttpSessionListener`和`HttpSessionAttributeListener`。注册这些监听器可以让我们在特定事件发生时执行相应的操作,如记录日志、清理资源等。 ```java ...

    session生命周期的设置

    3. **Session监听器**:通过实现HttpSessionListener或HttpSessionAttributeListener接口,可以在Session创建、销毁或属性变化时执行特定操作。 4. **及时清理Session**:为了避免内存泄漏,开发者应合理设计...

    JSP中的在线人数统计

    为了实现在线人数统计,我们首先需要创建一个监听器类`OnLineDemo.java`,该类实现了`ServletContextListener`、`HttpSessionListener`和`HttpSessionAttributeListener`接口。 1. **监听器类`OnLineDemo.java`**:...

    利用session监听器实现一个客户不能再两个客户端登录。

    在Java Web中,我们可以使用HttpSessionListener或者HttpSessionAttributeListener接口来实现这一目标。这里我们将主要关注HttpSessionBindingListener,因为它可以监听到Session中的属性变化。 1. 创建一个实现了...

Global site tag (gtag.js) - Google Analytics