`
dreamoftch
  • 浏览: 484859 次
  • 性别: 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

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

分享到:
评论

相关推荐

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

    Listener监听器 JavaBean Servlet Jsp XML HTML JAVA WEB开发技术 Listener监听器 事件监听器用于对程序中发生的事件进行监听,在监听的过程中会涉及几个重要组成部分: 事件(Event) 事件源 事件处理器 事件监听器...

    java 监听器的解析

    监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时,就激发sessionCreated...

    JSP监听器用法分析

    监听器也叫Listener,是servlet服务的监听器。它可以监听客户端的请求,服务端的操作等。比如统计在线用户数量。每当增加一个HttpSession时,就会触发sessionCreate(HttpSessionEvent se)方法,这样就可以给在线人数...

    java-servlet-api.doc

    如果有助于你处理应用的数据需求,你也许需要绑定对象到Session中,你可以通过一个唯一的名字绑定任何的对象到Session中,这时,你需要使用HttpSession对象。任何绑定到Session上的对象都可以被处理同一会话的...

    Java™ Servlet 规范.

    1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 .............................................

    Servlet3.1规范(最终版) PDF

    1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 ...............................................

    新版全面系统完整的JavaWeb视频教程

    涵盖JavaWEB 企业级开发所用到的HTML、CSS、JavaScript、jQuery、Ajax、JSON、XML、XML 解析、Servlet、JSP、MVC 设计模式、EL 表达式 、Cookie、HttpSession、监听器、过滤器等大部分技术。采用案例驱动教学,通过...

    java web 视频、电子书、源码(李兴华老师出版)

    9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发实战讲解(基于Oracle数据库) 第10章 表达式语言 10.1、表达式语言简介 10.2、表达式语言的内置对象 10.2.1、访问四种属性范围的内容 ...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发实战讲解(基于Oracle数据库) 第10章 表达式语言 10.1、表达式语言简介 10.2、表达式语言的内置对象 10.2.1、访问四种属性范围的内容 ...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发实战讲解(基于Oracle数据库) 第10章 表达式语言 10.1、表达式语言简介 10.2、表达式语言的内置对象 10.2.1、访问四种属性范围的内容 ...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发实战讲解(基于Oracle数据库) 第10章 表达式语言 10.1、表达式语言简介 10.2、表达式语言的内置对象 10.2.1、访问四种属性范围的内容 ...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发实战讲解(基于Oracle数据库) 第10章 表达式语言 10.1、表达式语言简介 10.2、表达式语言的内置对象 10.2.1、访问四种属性范围的内容 ...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发实战讲解(基于Oracle数据库) 第10章 表达式语言 10.1、表达式语言简介 10.2、表达式语言的内置对象 10.2.1、访问四种属性范围的内容 ...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发实战讲解(基于Oracle数据库) 第10章 表达式语言 10.1、表达式语言简介 10.2、表达式语言的内置对象 10.2.1、访问四种属性范围的内容 ...

    李兴华Java Web开发实战经典(高清版) Part2

    9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发实战讲解(基于Oracle数据库) 第10章 表达式语言 10.1、表达式语言简介 10.2、表达式语言的内置对象 10.2.1、访问四种属性范围的内容 ...

Global site tag (gtag.js) - Google Analytics