- 浏览: 193850 次
- 性别:
- 来自: QD
文章分类
- 全部博客 (127)
- Struts2 (8)
- Web (27)
- 计算机基础 (2)
- 面试 (2)
- JQuery (4)
- MySQL (1)
- SQL (1)
- AJAX (3)
- Java (17)
- Javascript (36)
- 情感 (0)
- Oracle (7)
- Spring (5)
- FreeMarker (2)
- JSON (1)
- 表达式 (1)
- 线程 (4)
- WebService (10)
- MyEclipse (2)
- LDAP (1)
- Tomcat (1)
- NIO (1)
- Linux (1)
- ExtJS (4)
- Android (1)
- Dojo (2)
- Maven (9)
- Ant (7)
- 分布式 (1)
- Intellij IDEA (1)
最新评论
-
northc:
米饭军 写道如果文件已存在怎样避免应该会覆盖的
用Ant scp往远程linux传文件 -
米饭军:
如果文件已存在怎样避免
用Ant scp往远程linux传文件 -
luis025:
不支持列隐藏 硬伤
ExtJS4.0 分享Grid导出Excel插件(3.28更新支持4.1) -
rgbhje:
楼主大神,我把你的代码简单改了一小下,在4.2可以跑了
ExtJS4.0 分享Grid导出Excel插件(3.28更新支持4.1) -
rgbhje:
楼主大神,我把你的代码简单改了一小下,在4.2可以跑了
ExtJS4.0 分享Grid导出Excel插件(3.28更新支持4.1)
1、了解如何使用HttpSessionListener监听session的销毁。
2、了解如何使用HttpSessionBindingListener监听session的销毁。
一、使用HttpSessionListener编写一个OnlineUserListener。
- package anni;
- import java.util.List;
- import javax.servlet.ServletContext;
- import javax.servlet.http.HttpSession;
- import javax.servlet.http.HttpSessionListener;
- import javax.servlet.http.HttpSessionEvent;
- public class OnlineUserListener implements HttpSessionListener {
- public void sessionCreated(HttpSessionEvent event) {
- }
- public void sessionDestroyed(HttpSessionEvent event) {
- HttpSession session = event.getSession();
- ServletContext application = session.getServletContext();
- // 取得登录的用户名
- String username = (String) session.getAttribute("username");
- // 从在线列表中删除用户名
- List onlineUserList = (List) application.getAttribute("onlineUserList");
- onlineUserList.remove(username);
- System.out.println(username + "超时退出。");
- }
- }
OnlineUserListener实现了HttpSessionListener定义的两个方法:sessionCreated()和sessionDestroyed()。这两个方法可以监听到当前应用中session的创建和销毁情况。我们这里只用到sessionDestroyed()在session销毁时进行操作就可以。
从HttpSessionEvent中获得即将销毁的session,得到session中的用户名,并从在线列表中删除。最后一句向console打印一条信息,提示操作成功,这只是为了调试用,正常运行时删除即可。
为了让监听器发挥作用,我们将它添加到web.xml中:
- <listener>
- <listener-class>anni.OnlineUserListener</listener-class>
- </listener>
以下两种情况下就会发生sessionDestoryed(会话销毁)事件:
1、执行session.invalidate()方法时。
既然LogoutServlet.java中执行session.invalidate()时,会触发sessionDestory()从在线用户列表中清除当前用户,我们就不必在LogoutServlet.java中对在线列表进行操作了,所以LogoutServlet.java的内容现在是这样。
- public void doGet(HttpServletRequest request,HttpServletResponse response)
- throws ServletException, IOException {
- // 销毁session
- request.getSession().invalidate();
- // 成功
- response.sendRedirect("index.jsp");
- }
2、如果用户长时间没有访问服务器,超过了会话最大超时时间,服务器就会自动销毁超时的session。
会话超时时间可以在web.xml中进行设置,为了容易看到超时效果,我们将超时时间设置为最小值。
- <session-config>
- <session-timeout>1</session-timeout>
- </session-config>
对应例子在08-01,为了验证OnlineUserListener是否能正常执行,我们可以登录两个用户,其中一个点击注销,另一个等待一分钟,然后可以在console中看到输出的信息。
下载 (13.11 KB)
2009-7-1 14:37
二、使用HttpSessionBindingListener
HttpSessionBindingListener虽然叫做监听器,但使用方法与HttpSessionListener完全不同。我们实际看一下它是如何使用的。
我们的OnlineUserBindingListener实现了HttpSessionBindingListener接口,接口中共定义了两个方法:valueBound()和valueUnbound(),分别对应数据绑定,和取消绑定两个事件。
所谓对session进行数据绑定,就是调用session.setAttribute()把HttpSessionBindingListener保存进session中。我们在LoginServlet.java中进行这一步。
- public void valueBound(HttpSessionBindingEvent event) {
- HttpSession session = event.getSession();
- ServletContext application = session.getServletContext();
- // 把用户名放入在线列表
- List onlineUserList = (List) application.getAttribute("onlineUserList");
- // 第一次使用前,需要初始化
- if (onlineUserList == null) {
- onlineUserList = new ArrayList();
- application.setAttribute("onlineUserList", onlineUserList);
- }
- onlineUserList.add(this.username);
- }
这就是HttpSessionBindingListener和HttpSessionListener之间的最大区别:HttpSessionListener只需要设置到web.xml中就可以监听整个应用中的所有session。HttpSessionBindingListener必须实例化后放入某一个session中,才可以进行监听。
从监听范围上比较,HttpSessionListener设置一次就可以监听所有session,HttpSessionBindingListener通常都是一对一的。
正是这种区别成就了HttpSessionBindingListener的优势,我们可以让每个listener对应一个username,这样就不需要每次再去session中读取username,进一步可以将所有操作在线列表的代码都移入listener,更容易维护。
valueBound()方法的代码如下:
- public void valueUnbound(HttpSessionBindingEvent event) {
- HttpSession session = event.getSession();
- ServletContext application = session.getServletContext();
- // 从在线列表中删除用户名
- List onlineUserList = (List) application.getAttribute("onlineUserList");
- onlineUserList.remove(this.username);
- System.out.println(this.username + "退出。");
- }
这里可以直接使用listener的username操作在线列表,不必再去担心session中是否存在username。
valueUnbound的触发条件是以下三种情况:
执行session.invalidate()时。
session超时,自动销毁时。
执行session.setAttribute("onlineUserListener", "其他对象");或session.removeAttribute("onlineUserListener");将listener从session中删除时。
因此,只要不将listener从session中删除,就可以监听到session的销毁。
发表评论
-
Java桌面程序打包成exe可执行文件(转)
2012-12-27 00:56 1214前言: 我们都知道Java可以将二进制程序打包成可执行 ... -
Java:应用Observer接口实践Observer模式(转)
2012-12-27 00:13 847转自:http://zhangjunhd.blog.51cto ... -
使用Java继承与泛型特性创建高效与安全的DAO对象
2012-06-27 17:15 0现在无论做什么应用,基本上都会有涉及对象持久化这方面的操 ... -
Ext Toolbar换行
2012-06-21 09:02 01.var oneTbar=new Ext.Toolba ... -
禁止select控件選擇
2012-06-20 20:06 0禁止select控件選擇 大家知道, 對於HTML控件 ... -
Java 批量插入数据(Oracle)
2012-03-28 16:21 2983//批量添加20000条数据用时8秒。 try { ... -
Javascript中的~和~~
2011-12-30 15:58 881<script type="text/j ... -
js中的onchange和onpropertychange
2011-12-28 11:26 1844当一个HTML元素的属 ... -
httpclient ,HtmlParser
2011-12-26 17:40 0有时间研究下吧... -
DOCTYPE! HTML PUBLIC 声明规范
2011-12-26 17:38 1282DOCTYPE的常用声明:按照 HTML 4.01 ... -
Java读取properties文件 【转】
2011-12-26 09:36 969不用可能会忘记.. 在这里转下别人的记录 方便以后 ... -
全世界最短的IE判定
2011-12-20 15:45 804var ie = !-[1,]; ... -
document.getElementsByClassName的理想实现
2011-12-20 14:41 1438来自: 司徒正美 blog http://www.cnblo ... -
浏览器支持的JS版本及JS对象图
2011-12-20 10:38 1081来自zh.wikipedia.org的JavaScript ... -
JS判断浏览器能力
2011-12-15 20:47 1053对象/特征检测法 该方法是一种判断浏览器能力(而非浏览器 ... -
onunload和onbeforeunload区别
2011-12-15 18:54 972Onunload,onbeforeunload都是在刷 ... -
收藏的两个多tab切换
2011-12-13 19:02 952留着可能以后有用 -
JavaScript中的arguments,callee,caller
2011-12-09 16:00 875在提到上述的概念之前,首先想说说javascript中 ... -
性能分析工具firebug.console.profile(title)
2011-12-08 15:53 907原文地址:http://www.cnblogs.com/z ... -
request 获取路径
2011-12-26 17:38 1128request.getRequestURI() /j ...
相关推荐
`HttpSessionListener`和`HttpSessionBindingListener`虽都属于会话监听器,但在功能和用途上有明显区别。`HttpSessionListener`适用于跟踪整个应用级别的会话生命周期,而`HttpSessionBindingListener`则更适合于...
Listener监听器是一种特殊的类,用于监听 web 应用程序中的 ServletContext、HttpSession、ServletRequest 等域对象的创建和销毁事件,以及监听这些域对象中的属性发生修改的事件。Listener监听器可以分为三类: 1....
JavaWeb开发技术中的Listener监听器是Java企业级应用开发中的重要组成部分,主要用于监听应用程序中发生的特定事件,并在事件发生时执行相应的处理逻辑。监听器在JavaWeb开发中扮演着关键角色,它们允许开发者对Web...
在Java Web开发中,监听器(Listener)和过滤器(Filter)是两种非常重要的组件,它们分别承担着不同的职责。监听器主要用于监听应用程序中的特定事件,而过滤器则用于在请求处理之前和之后对请求和响应进行拦截,...
以下将详细解析Listener监听器的生命周期,以及如何在实际项目中应用这些知识点。 ### 监听器的生命周期 监听器的生命周期指的是监听器被创建、执行以及销毁的整个过程。在Servlet规范中,监听器接口主要分为两大...
在Java Web开发中,Servlet监听器(Servlet Listener)扮演着重要的角色,它是Servlet规范的一部分,允许开发者对Web应用程序中的特定事件进行监听和响应。在这个范例中,我们将深入探讨如何利用监听器来统计在线...
监听器可以通过web.xml配置或@WebListener注解来绑定。 工作原理:实现了特定接口的类为监听器,用来监听另一个Java类的方法调用或者属性改变;当被监听的对象发生了方法调用或者属性改变后,监听器的对应方法就会...
### Java Web 开发技术:Listener 监听器技术详解 #### 一、课程目标与概述 本章将详细介绍Java Web开发中的监听器技术。通过学习本章内容,读者能够达到以下学习目标: - **理解监听器的概念**:了解监听器的...
Servlet中的八大Listener是Java Web开发中的重要组成部分,它们允许开发者监听和响应Web应用程序中的特定事件。这些Listener提供了在Servlet容器(如Tomcat)管理的生命周期事件上的扩展点,使得我们能够在恰当的...
#### 一、监听器(Listener) 监听器是Java Web应用程序中的一个重要组件,主要用于监听容器中特定事件的发生,并作出相应的反应。在Java Web开发中,监听器主要用来监控应用中某些特定作用域对象的创建、销毁以及...
这通常通过实现Session监听器来实现。本文将深入探讨如何利用Session监听器来防止同一用户在多个客户端同时登录。 首先,理解Session的基本概念至关重要。Session是服务器为每个用户创建的一种存储机制,用于保存...
通过这个实验,我们不仅了解了如何创建和配置监听器,还实际操作了监听器对HttpSession属性变更的响应。这样的实践有助于加深对Servlet监听器机制的理解,提高我们处理复杂网络应用问题的能力。
具体来说,监听器可以监控Web应用中的三个主要对象:ServletContext(代表整个Web应用)、HttpSession(代表一个用户会话)和HttpServletRequest(代表客户端的请求)。下面将详细介绍这些知识点。 1. Servlet监听...
为了注册这个监听器,需要在`web.xml`文件中添加以下配置: ```xml <listener> <listener-class>com.example.CustomServletContextListener</listener-class> </listener> ``` 通过这种方式,我们可以方便地在Java ...
当特定的事件(如Web应用启动、停止、会话创建、销毁等)发生时,Servlet容器会通过回调Listener中的方法来通知监听器。 **一、基本概念** 观察者模式的核心是订阅和通知。在JavaWeb中,Servlet规范定义了一系列...
8. 配置listener监听器 8.1. 使用HttpSessionListener 8.2. 使用HttpSessionBindingListener 9. 封装taglib组件 9.1. 用taglib实现循环 9.2. 关于jstl 10. 综合电子留言板 10.1. 电子留言板用户指南 10.2. ...
配置Listener监听器 - **使用HttpSessionListener**:展示了如何使用HttpSessionListener来监听用户的登录状态。 - **使用HttpSessionBindingListener**:进一步讨论了如何使用HttpSessionBindingListener监听...
#### 第8章 配置Listener监听器 - **使用HttpSessionListener**:监听用户会话的创建和销毁事件。 - **使用HttpSessionBindingListener**:监听对象在会话中的绑定和解除绑定事件。 #### 第9章 封装Taglib组件 - **...
监听器(Listener)是用来监听Web应用程序中某些事件的发生并作出响应的组件。Java Web提供了多种监听器,包括但不限于: - **ServletContextListener**:监听上下文的创建与销毁。 - **ServletRequestListener**:...