`
dreamoftch
  • 浏览: 498159 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

servlet HttpSession 监听器

阅读更多

http://blog.csdn.net/wyzsc/article/details/6258567

 

一、Servlet中对象作用域

1、  ServletContext 上下文

应用服务器一启动就产生该对象,服务器关闭即销毁

作用于全局,所有Servlet ,相当于静态变量

2、  HttpSession 会话

客户端第一次请求产生,session过期销毁

作用于同一个客户端,相当于成员变量

3、  ServletRequest请求

一次请求产生一个对象,请求结束即销毁

作用于同一次请求,相当于局部变量

二、Servlet监听器

                     工作流程:

                             (1)确定事件源

(2)写一个类,实现Servlet监听器接口,并从写接口里面的方法

(3)在web.xml里注册建立联系,

<listener>

       <listener-class>Servlet类事件源全路径</listener-class>

</listener>

(4)事件源触发事件,监听器调用相应方法

           1、ServletContext事件

               (1)ServletContextListener接口,用于监听ServletContext的创建与销毁

                     相应方法:

                     void contextInitialized(ServletContextEvent  e); ServletContext创建触发

                     void contextDestroyed(ServletContextEvent  e); ServletContext销毁触发

 

               (2)ServletContextAttribyteListener接口,用于监听ServletContext属性状态

                                  

                  相应方法:

                   void attributeAdded(ServletContextEvent  e); ServletContext属性加入触发

                            context.setAttribute(“a”,”b”);

                      void attributeRemovd(ServletContextEvent  e); ServletContext属性删除触发

                            context.removeAttribute(“a”,);

                      void attributeReplaced(ServletContextEvent  e); ServletContext属性修改触发

                            context.setAttribute(“a”,”c”);

               2、HttpSession事件

                     (1)HttpSessionListener接口,用于监听session的创建与销毁

                            相应方法:

                            void sessionCreated(HttpsessionEvent e)   session 创建触发

                            void sessionDestroyed (HttpsessionEvent e)   session 销毁触发

                     (2)HttpSession AttributeListener接口,用于监听session属性状态

                                   相应方法:同ServletContextAttribyteListener

 

 

                     (3)HttpSessionBindingListener接口,用于监听绑定对象到Session属性监听

                                   唯一一个不用在web.xml里注册的监听接口

                            绑定

                            Ression.setAttribute(“a”, 实现该接口的对象),

                                   触发void valueBound(HttpSessionBindingEvent  e);方法

                            移除:

                            Ression.removeAttribute(“a”),

                                   触发void valueUnbound(HttpSessionBindingEvent  e);方法

 

3、   SercletRequest事件

           (1)ServletRequestListener接口 用于监听request的销毁与创建

           (2)ServletRequesAttributetListener接口 用于监听request的属性状态


文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/java/javajs/20100719/456543.html

 

文章:配置监听器

21.3  Servlet监听器实例讲解-站点计数监听器

监听器也是Servlet 2.3新增的功能,在许多触发性的处理中需要。通常用做用户某一事件的触发监听,比如监听用户的来访和退出、监听某一数据事件的发生或者定义一个周期性的时钟定期执行。这一功能极大地增强了Java Web程序的事件处理能力。

为了演示监听器的使用,这里以在线用户计数器为例进行讲解。本节为了演示,我们使用Tomcat默认的ROOT项目代码进行测试。首先在D:/Tomcat 6.0/webapps下新建测试站点目录counter,并复制D:/Tomcat 6.0/webapps/ROOT下的所有文件和目录到D:/Tomcat 6.0/webapps/counter目录下。下面在该目录下进行调试。

21.3.1  配置监听器

首先在文件counter/WEB-INF/web.xml中添加如下的监听器器配置:

  1. <listener>  
  2.     <listener-class>com.utils.CounterListener</listener-class>  
  3. </listener> 

21.3.2  编写监听器类

在counter/WEB-INF/classes/com/utils下新建类CounterListener.java,代码如下:

  1. package com.utils;  
  2. import javax.servlet.http.*;  
  3.  
  4. public class CounterListener implements HttpSessionListener {  
  5.     public static int count;  
  6.     public CounterListener ()   {  
  7.         count = 0;  
  8.     }  
  9.       
  10.     //创建一个session时激发  
  11.     public void sessionCreated(HttpSessionEvent se) {  
  12.         count++;  
  13.     }  
  14.  
  15.     //一个session失效时激发  
  16.     public void sessionDestroyed(HttpSessionEvent se)   {  
  17.         if(count>0) count--;  
  18.     }  
  19. }; 

在该代码中,变量count为静态变量,在整个系统中唯一,记录整个系统中在线用户数。sessionCreated()在用户到访时自动调用,使用count++;sessionDestroyed()在用户会话过期或单击退出销毁session时调用,使用count--。

21.3.3  运行查看监听效果

统计的功能有了,现在在login.jsp中添加一句代码,用以显示用户计数:

当前在线用户:<%=com.utils.CounterListener.count%>

访问http://localhost:8081/counter/index.htm,单击登录.

 

文章:session监听器的使用

监听器概述

1.Listener是Servlet的监听器

2.可以监听客户端的请求、服务端的操作等。

3.通过监听器,可以自动激发一些操作,如监听在线用户数量,当增加一个HttpSession时,给在线人数加1。

4.编写监听器需要实现相应的接口

5.编写完成后在web.xml文件中配置一下,就可以起作用了

6.可以在不修改现有系统基础上,增加web应用程序生命周期事件的跟踪

常用的监听接口

1.ServletContextAttributeListener

监听对ServletContext属性的操作,比如增加/删除/修改

2.ServletContextListener

监听ServletContext,当创建ServletContext时,激发contextInitialized (ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed (ServletContextEvent sce)方法。

3.HttpSessionListener

监听HttpSession的操作。当创建一个Session时,激发session Created(SessionEvent se)方法;当销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se)方法。

4.HttpSessionAttributeListener

监听HttpSession中的属性的操作。当在Session增加一个属性时,激发attributeAdded (HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发attributeRemoved (HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced (HttpSessionBindingEvent se) 方法。

使用范例:

由监听器管理共享数据库连接

生命周期事件的一个实际应用由context监听器管理共享数据库连接。在web.xml中如下定义监听器:

listener

listener-classXXX.MyConnectionManager/listener-class

/listener Øserver创建监听器的实例,接受事件并自动判断实现监听器接口的类型。要记住的是由于监听器是配置在部署描述符web.xml中,所以不需要改变任何代码就可以添加新的监听器。

public class MyConnectionManager implements ServletContextListener{

public void contextInitialized(ServletContextEvent e) {

Connection con = // create connection

e.getServletContext().setAttribute(con, con);

}

public void contextDestroyed(ServletContextEvent e) {

Connection con = (Connection) e.getServletContext().getAttribute(con);

try {

con.close();

}

catch (SQLException ignored) { } // close connection

}

}

监听器保证每新生成一个servlet context都会有一个可用的数据库连接,并且所有的连接对会在context关闭的时候随之关闭。

计算在线用户数量的Linstener

(1)

Package xxx;

public class OnlineCounter {

private static long online = 0;

public static long getOnline(){

return online;

}

public static void raise(){

online++;

}

public static void reduce(){

online;

}

}

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

public class OnlineCounterListener implements HttpSessionListener{

public void sessionCreated(HttpSessionEvent hse) {

OnlineCounter.raise();

}

public void sessionDestroyed(HttpSessionEvent hse){

OnlineCounter.reduce();

}

}

在需要显示在线人数的JSP中可是使用

目前在线人数:

%@ page import=xxx.OnlineCounter %

%=OnlineCounter.getOnline()%

退出会话(可以给用户提供一个注销按钮):

form action=exit.jsp method=post

input type=submit value=exit

/form

exit.jsp: %session.invalidate() ;%

在web.xml中加入:

listener

listener-classservletlistener111111.SecondListener/listener-class /listener

怎么样,就是这么简单,不用对现有代码做任何的修改。

分享到:
评论

相关推荐

    servlet 监听器范例

    在Java Web开发中,Servlet监听器(Servlet Listener)扮演着重要的角色,它是Servlet规范的一部分,允许开发者对Web应用程序中的特定事件进行监听和响应。在这个范例中,我们将深入探讨如何利用监听器来统计在线...

    servlet监听器技术源码

    Servlet监听器技术是Java Servlet规范中的一项重要特性,它允许开发者在特定的Servlet容器事件发生时执行自定义的代码逻辑。这些事件可以包括Web应用程序的初始化、终止,或者是Servlet或Servlet上下文...

    j2ee20:servlet04监听器(监听四大web域)(用于访问人数的统计)、mvc模式的引入

    在本文中,我们将深入探讨Java EE(J2EE)中的Servlet监听器以及它们在Web应用程序中的作用,特别是在访问人数统计和引入MVC模式方面。首先,让我们了解什么是Servlet监听器。 Servlet监听器是Java Servlet规范的一...

    Servlet中监听器介绍.doc

    2. **HttpSession监听器**: - `HttpSessionListener`接口:用于监听HttpSession的创建和销毁事件。`sessionCreated`方法在新的HttpSession被创建时调用,`sessionDestroyed`方法在HttpSession失效或被显式地销毁时...

    将 JEE Servlet HttpSession 存储在 Redis 中.zip

    该项目旨在使会话管理对现有的 Web 应用程序透明(零代码更改)并尽可能与各种 JEE 容器兼容,同时提供对会话 API 的完全支持,包括不同的会话监听器。Redis 支持单实例、基于哨兵和集群模式。使用 Redis 时,有两种...

    Servlet监听器在基于移动Web在线考试系统中的应用.pdf

    Servlet监听器是Servlet规范中定义的一种特殊类,用于监听Web应用程序中的ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件,以及这些域对象的属性发生修改的事件。在基于移动Web在线考试系统...

    JAVA Servlet监听器listener学习资料

    - 监听器是Java Servlet API的一部分,它们是实现了特定监听接口的类,用于监听服务器、Servlet上下文(ServletContext)、HttpSession以及请求对象等发生的事件。 - 监听器可以自动触发某些操作,例如监控在线...

    servlet监听器总结

    ### Servlet监听器总结 #### 一、Listener概念与作用 - **定义**:在Java Web开发中,Listener(监听器)是一种特殊的组件,主要用于监听容器内的特定事件,并根据这些事件的发生执行相应的处理逻辑。 - **功能**...

    servlet监听器

    Servlet监听器是Java Web开发中的一种关键组件,主要用于监控和响应Web应用程序中的特定事件。它们是Servlet规范中定义的特殊类,能够监听ServletContext、HttpSession和ServletRequest等域对象的生命周期事件,以及...

    servlet监听器教程(含代码)

    Servlet监听器是Java Web开发中的一个重要概念,它允许开发者在特定事件发生时执行代码,比如在Web应用程序启动或停止时,或者在某个Servlet实例被创建或销毁时。本教程将深入探讨Servlet监听器的工作原理、类型以及...

    web监听器代码--监听servlet

    Web监听器是Java Web应用程序中的一个重要组件,它们允许开发者在特定事件发生时执行代码,比如在Servlet上下文初始化或销毁时、用户会话创建或结束时等。在Java Web开发中,监听器通过实现特定接口并配置在`web.xml...

    servlet事件监听

    在Servlet容器(如Tomcat)中,每当Servlet的生命周期事件发生时,如Servlet的加载、初始化、服务、销毁等,对应的监听器接口就会被调用,执行相应的回调方法。 1. **Servlet监听器接口**: - `javax.servlet....

    servlet过滤器与监听器.pdf

    Servlet 过滤器与监听器 概述: Servlet 过滤器(Filter)和监听器(Listener)是 Java Web 应用程序中常见的两种组件,它们提供了各种扩展 Web 应用程序功能的方式。过滤器和监听器都可以通过 Java Web 应用程序...

    SSH集成Servlet监听

    Servlet监听器是Java Web开发中的一个重要概念,它允许开发者对Web应用程序中特定事件的发生进行响应。监听器基于Java的事件驱动模型,通过实现特定的接口,可以在ServletContext、HttpSession和ServletRequest等...

    Servlet监听器

    Servlet监听器是Java Web开发中的一个重要概念,它属于Java Servlet规范的一部分,主要应用于JSP/Servlet环境。在Java Web应用程序中,监听器(Listeners)扮演着观察者(Observer)的角色,能够监听特定事件的发生...

    servlet过滤器1

    例如,当一个新的会话创建时,会触发HttpSession监听器的`sessionCreated()`方法。监听器分为三类: 1. **ServletRequest监听器**:监控HTTP请求,可以获取请求的详细信息。 2. **HttpSession监听器**:关注会话的...

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

    在这个名为“Servlet技术(事件监听器-在线踢人)”的压缩包中,我们可以看到一个关于如何使用Servlet实现在线用户管理,特别是“在线踢人”功能的示例。这里的“在线踢人”通常指的是在Web应用中强制下线特定用户。...

Global site tag (gtag.js) - Google Analytics