`
zhy584520
  • 浏览: 183839 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

HttpSessionBindingListener,HttpSessionListener的用法

    博客分类:
  • j2ee
 
阅读更多

1、HttpSessionListener

添加类OnlineUserListener,继承HttpSessionListener,HttpSessionListener中有两个方法sessionCreated(HttpSessionEvent event)与sessionDestroyed(HttpSessionEvent event),前者是监听session的新建,后者是监听session的销毁。

一旦监听器发现调用了sessionDestoryed方法就会把其用户从在线人数中delete,在下面两种情况下会发生sessionDestoryed事件

a.执行session.invalidate()方法时

logout.jsp中调用了 session.invalidate()方法

b.session会话超时

session的默认超时事件是30分钟,30分钟后自动销毁session

2、HttpSessionBindingListener

HttpSessionBindingListener虽然叫做监听器,但使用方法与HttpSessionListener完全不同。我们实际看一下它是如何使用的。

新建类OnlineUserBindingListener,实现HttpSessionBindingListener接口,构造方法传入username参数,HttpSessionBindingListener内有两个方法valueBound(HttpSessionBindingEvent event)和valueUnbound(HttpSessionBindingEvent event),前者为数据绑定,后者为取消绑定

所谓对session进行数据绑定,就是调用session.setAttribute()把HttpSessionBindingListener保存进session中。

HttpSessionBindingListener和HttpSessionListener之间的最大区别:HttpSessionListener只需要设置到web.xml中就可以监听整个应用中的所有session。HttpSessionBindingListener必须实例化后放入某一个session中,才可以进行监听。

从监听范围上比较,HttpSessionListener设置一次就可以监听所有session,HttpSessionBindingListener通常都是一对一的。

正是这种区别成就了HttpSessionBindingListener的优势,我们可以让每个listener对应一个username,这样就不需要每次再去session中读取username,进一步可以将所有操作在线列表的代码都移入listener,更容易维护。

valueUnbound的触发条件是以下三种情况:

a.执行session.invalidate()时。

b.session超时,自动销毁时。

c.执行session.setAttribute("onlineUserListener", "其他对象");或session.removeAttribute("onlineUserListener");将listener从session中删除时。

 

项目中使用hmailserver实现邮件的收发,处理邮件的附件上传到服务器临时目录需要在用户退出系统时把对应的邮件附件删除,这个HttpSessionBindingListener刚好可以实现这一功能,一对一的,当退出的时候把应对用户的附件删除,赶紧上代码:

	class CleanUp implements HttpSessionBindingListener {

		public void valueBound(HttpSessionBindingEvent httpsessionbindingevent) {
		}

		public void valueUnbound(HttpSessionBindingEvent httpsessionbindingevent) {
			File file = new File(m_filename);
			if (file != null)
				file.delete();
		}

		String m_filename;

		public CleanUp(String s) {
			m_filename = null;
			m_filename = s;
		}
	}

 设置session,以便退出系统的时候删除对应文件

	public void setAttachFiles(HttpServletRequest httpservletrequest,Map<String,String> fs) throws Exception {
		Iterator<?> iterator=fs.entrySet().iterator();
		HttpSession _session=httpservletrequest.getSession();
		while(iterator.hasNext())
		{
			Entry<?, ?> entry = (Entry<?, ?>) iterator.next();
			CleanUp clearUp=new CleanUp(entry.getKey().toString());
			_session.setAttribute(UUID.randomUUID().toString(), clearUp);
			setAttachFile(entry.getKey().toString(),entry.getValue().toString());
		}
	}

 

分享到:
评论

相关推荐

    HttpSessionListener 和HttpSessionBindingListener的区别 单点登录

    - 使用`HttpSessionListener`可以监控用户登录状态的变化,及时更新在线用户列表,从而确保各个子系统之间共享正确的用户状态信息。 - 通过`HttpSessionBindingListener`可以在用户登录时绑定必要的认证信息至会话中...

    jsp 统计在线人数利用HttpSessionListener、HttpSessionBindingListener

    jsp 统计在线人数实例,是个完整的项目实例,部署即可查看效果! 通过使用:HttpSessionListener、HttpSessionBindingListener来实现. valueBound 方法登录触发。 valueUnbound 方法退出触发。

    HttpSessionBindingListener获取在线用户数(转)

    `HttpSessionBindingListener`是`HttpSession`的一个监听器接口,它包含两个方法:`valueBound`和`valueUnbound`。当对象被绑定到`HttpSession`(例如,用`session.setAttribute()`添加对象)时,`valueBound`方法会...

    servlet 监听器范例

    要创建一个监听器,你需要实现`javax.servlet.HttpSessionListener`接口,并重写它的两个方法:`sessionCreated(HttpSessionEvent event)`和`sessionDestroyed(HttpSessionEvent event)`。前者在新的HTTP会话创建时...

    在线人数统计

    在这个小型案例中,我们使用了Java Servlet中的`HttpSessionListener`和`HttpSessionBindingListener`接口来实现这一功能。以下是对这两个接口以及整个案例的详细解释: 1. **`HttpSessionListener`接口**: `...

    监听器.pdf

    监听器.pdf 监听器是Java Web开发中的一种重要机制,用于监听和响应Web应用程序中的事件...在上面的例子中,我们实现了HttpSessionBindingListener接口,并在valueBound方法中监听java对象在Session中的状态发生改变。

    jsp手把手图解入门教程pdf

    - **用TagLib实现循环**:介绍了自定义标签库的使用方法,特别是如何创建循环标签。 - **关于JSTL**:概述了JSTL(JavaServer Pages Standard Tag Library)的标准标签库,包括其组成部分和常见用途。 ##### 10. ...

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

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

    Web监听器

    3. **使用示例**:例如,HttpSessionListener可以用于统计当前在线用户数量,每当一个新的会话创建或结束,监听器的sessionCreated和sessionDestroyed方法会被调用。 4. **编程实践**:实现监听器接口需要覆盖指定...

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

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

    java监听器和过滤器详解

    4. **编写监听器**:实现`HttpSessionListener`接口,重写`sessionCreated()`与`sessionDestroyed()`方法,以便在用户登录和注销时更新在线用户列表。 5. **配置监听器**:在`web.xml`中注册监听器。 6. **页面展示*...

    servlet监听器

    - HttpSessionListener:包含sessionCreated和sessionDestroyed方法,对应HttpSession的创建和销毁。 - ServletRequestListener:提供requestInitialized和requestDestroyed方法,用于跟踪ServletRequest的生命周期...

    listener和filter 监听器和过滤器的介绍以及简单使用(csdn)————程序.pdf

    1. **监听器定义**:监听器是实现了特定接口的Java类,用于监听另一个Java类的方法或属性变化,并在事件发生时执行相应的回调方法。在Java Web中,主要关注的是Servlet API中的监听器,它们可以监控ServletContext、...

    Java实训教程 Java软件开发实战 web开发技术 第6章 listener 共21页.pptx

    - **掌握监听器的使用方法**:学会如何在项目中实现和部署监听器,以便监控和响应特定事件。 #### 二、监听器技术基础 ##### 1. 监听器简介 监听器是一种特殊的技术,用于监测服务器端对象(如`ServletContext`、...

    Servlet中监听器介绍.doc

    - `HttpSessionBindingListener`接口:这个接口不是直接的监听器,而是由HttpSession中的对象实现,当这个对象被绑定或解绑到HttpSession时,监听器方法会被调用。`valueBound`和`valueUnbound`方法分别在对象绑定...

    清华ITjsp课件8

    `HttpSessionListener`接口用于监听会话的创建和销毁,这有助于了解系统中活动用户的数量。`sessionCreated`在新会话创建时触发,`sessionDestroyed`在会话过期或显式销毁时触发。此外,`...

    javaee-Session持久化小结

    例如,可以使用Servlet容器(如Tomcat)的内置Session持久化配置,或者自定义实现`HttpSessionListener`和`HttpSessionBindingListener`来监听Session的创建和销毁事件,进行手动持久化操作。 标签中的"源码"可能...

    JavaWeb开发技术-Listener监听器.pptx

    - **HttpSessionBindingListener** 和 **HttpSessionActivationListener**:这两个接口关注HttpSession中对象的绑定和激活事件,常用于会话持久化和集群环境下的会话管理。 4. **使用监听器的好处** - **解耦合**...

    分布式会话demo.zip

    例如,使用`HttpSessionListener`监听会话创建和销毁事件,或者自定义`HttpSessionBindingListener`跟踪会话属性的变化。 4. **分布式缓存**:分布式缓存如Redis、Memcached常被用于存储和同步会话数据。它们提供高...

    ServletListener大全

    HttpSessionListener - **方法**: - `sessionCreated(HttpSessionEvent hse)`:当一个新的HttpSession被创建时调用。 - `sessionDestroyed(HttpSessionEvent hse)`:当一个HttpSession被销毁时调用。 - **事件**...

Global site tag (gtag.js) - Google Analytics