监听器

来源:互联网 发布:golang java 性能对比 编辑:程序博客网 时间:2024/06/05 10:31
一、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

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

0 0
原创粉丝点击