首页
登录 | 注册

JSP监听器专题

JSP监听器专题

[整理人:hkebao@126.com 整理时间:2010-1-21]

一、监听器概述

监听你的web应用,监听许多信息的初始化,销毁,增加,修改,删除值等

Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理。

  1.ListenerServlet的监听器 
  2.
可以监听客户端的请求、服务端的操作等。
  3.
通过监听器,可以自动激发一些操作,如监听在线用户数量,当增加一个HttpSession时,给在线人数加1
  4.
编写监听器需要实现相应的接口
  5.
编写完成后在web.xml文件中配置一下,就可以起作用了
  6.
可以在不修改现有系统基础上,增加web应用程序生命周期事件的跟踪

 

servlet 规范中为每种事件监听器都定义了相应的接口,在编写事件监听器程序时只需实现这些接口就可以了。一些Servlet事件监听器需要在web应用程序的部署 文件描述符文件(web.xml)中进行注册(注册之后才能发布),一个web.xml可以注册多个servlet事件监听器。web服务器按照它们在web.xml中注册顺 序来加载和注册这些servlet事件监听器。servlet事件监听器的注册和调用过程都是由web容器自动完成的,当发生被监听对象被创建,修改,销 毁等事件时,web容器将调用与之相关的servlet事件监听器对象的相应方法(所监听到的对象如果在创建、修改、销毁事件触发的时候就会调用这些监听器这就相当于面向事件编程的概念),用户在这些方法中编写的事件处理代码(相当于JS中的事件响应)即被执行。由于在一个web应用程 序中只会为每个事件监听器类创建一个实例对象,有可能出现多个线程同时调用一个事件监听对象的情况,所以要注意多线程安全问题。

 

二、监听器类型

按监听的对象划分:servlet2.4规范定义的事件有三种:
1.
用于监听应用程序环境对象(ServletContext)的事件监听器
2.
用于监听用户会话对象(HttpSession)的事件监听器
3.
用于监听请求消息对象(ServletRequest)的事件监听器

按监听的事件类项划分
1.
用于监听域对象自身的创建和销毁的事件监听器
2.
用于监听域对象中的属性的增加和删除的事件监听器
3.
用于监听绑定到HttpSession域中的某个对象的状态的事件监听器

在一个web应用程序的整个运行周期内,web容器会创建和销毁三个重要的对象,ServletContextHttpSession,ServletRequest

PS其中Context JSP页面包装页面的上下文.由容器创建和初始化,管理对属于JSP中特殊可见部分中已命名对象的访问. 该接口用来定义了一个Servlet的环境对象。也可认为这是多个客户端共享的信息,它与session的区别在于应用范围的不同,session只对应于一个用户。

PS:感觉好像这个对象与ASP中的Application对象是一样的概念。

 

servlet2.4中定义了三个接口:

ServletContextListener,HttpSessionListener,ServletRequestListener

分别实现对应的接口就可以实现对应的监听处理

1.    ServletContextListener接口中定义了两个事件处理方法,分别是

contextInitialized()和contextDestroyed()
public void contextInitialized(ServletcontextEvent sce)
这个方法接受一个ServletContextEvent类型参数,在contextInitialized可以通过这个参数获得当前被创建的ServletContext对象。
public void contextDestroyed(ServletContextEvent sce)

 

2.HttpSessionListneter接口中共定义了两个事件处理方法,分别是sessionCreated()和sessionDestroyed()
public void sessionCreated(HttpSessionEvent se)
这个方法接受一个(HttpSessionEvent 类型参数,在sessionCreated可以通过这个参数获得当前被创建的HttpSession对象。
public void sessionDestroyed(HttpSessionEvent se)

 

3.ServletRequestListener接口中定义了两个事件处理方法,分别是requestInitialized()和requestDestroyed()
public void requestInitialized(ServletRequestEvent sre)
这个方法接受一个(ServletRequestEvent 类型参数,在requestInitialized可以通过这个参数获得当前被创建的ServletRequest对象。
public void requestDestroyed(ServletRequestEvent sre)

 

以看出三个监听器接口中定义的方法非常相似,执行原理与应用方式也相似,在web应用程序中可以注册一个或者多个实现了某一接口的事件监听器,web容器 在创建或销毁某一对象(如ServletContextHttpSession)时就会产生相应的事件对象

(如ServletcontextEvent ,或者HttpSessionEvent),接着依次调用每个事件监听器中的相应处理方法,并将产生的事件对象传递给这些方法。

 

三、分类及介绍

1 ServletContextListener:用于监听WEB 应用启动和销毁的事件,监听器类需要实现javax.servlet.ServletContextListener 接口。

2 ServletContextAttributeListener:用于监听WEB应用属性改变的事件,包括:增加属性、删除属性、修改属性,监听器类需要实现javax.servlet.ServletContextAttributeListener接口。

3 HttpSessionListener:用于监听Session对象的创建和销毁,监听器类需要实现javax.servlet.http.HttpSessionListener接口或者javax.servlet.http.HttpSessionActivationListener接口,或者两个都实现。

4 HttpSessionActivationListener:用于监听Session对象的钝化/活化事件,监听器类需要实现javax.servlet.http.HttpSessionListener接口或者javax.servlet.http.HttpSessionActivationListener接口,或者两个都实现。

5 HttpSessionAttributeListener:用于监听Session对象属性的改变事件,监听器类需要实现javax.servlet.http.HttpSessionAttributeListener接口。

四、部署

监听器的部署在web.xml文件中配置,在配置文件中,它的位置应该在过滤器的后面Servle的前面

 

五、示例

5.1 创建一个监听器示例

第一步:编写监听器类

package cn.listen;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

public class MyListener implements ServletContextListener {

    public void contextDestroyed(ServletContextEvent sce) {

           System.out.println("die");

    }

    public void contextInitialized(ServletContextEvent sce) {

           System.out.println("init");

    }

}

第二步:布置安装

<listener>

  <listener-class>cn.listen.MyListenerlistener-class>

listener>

运行Resin服务器会出现

[20:42:38.406] {main} WebApp[http://default] active

init

[20:42:38.437] {main} WebApp[http://default/MyProj] active

监听到了应用启动。

PS:不清楚什么时候触发contextInitialized事件?

 


相关文章

  • 使用JavaScript给对象修改注册监听器
    一行行地调试肯定太费时间了.如果window这个变量的_name字段被程序赋值时,能执行我们自己实现的一个监听器,这样不就方便多了么? "use strict"; function test(){ Object.defi ...
  • JSP 简介 什么是Java Server Pages(Java服务器页面)? JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以结束. JSP是一种Javas ...
  • .NET连接SAP系统专题:C#调用BAPI赋予权限(八)
     接上篇博文.    上篇博文讲到C#调用BAPI BAPI_USER_CREATE 来生成SAP账户,但是新建的账户一点权限也没有,现在我们就再次利用BAPI给账户授予权限.    首先,我们在BAPI画面里查找出相关的BAPI出来,利用 ...
  • 技术为创建显示动态生成内容的Web页面提供了一个简捷而快速的方法.JSP技术的设计目的是使得构造基于Web的应用程序更加容易和快捷,而这些应用程序能够与各种Web服务器,应用服务器,浏览器和开发工具共同工作. 使用JSP技术,Web页面开发 ...
  • http://blog.csdn.net/jia20003/article/details/7765210 自从JamesGosling开发Java语言,SUN大力推行基于Java的从前端到后端的完整的企业级 解决方法(J2EE),发展至今 ...
  • JSP,JAVA查看数据库表结构
    网站中经常用到的是数据库中的记录,然而有的时候我们需要对数据库的表机构也要了解 怎么样用jsp来获取数据库表的结构呢.在java中提供了DatabaseMetaData和ResultSetMetaData两种类他可以帮助我们解决这个问题.示 ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.012 s.
京ICP备10005923号