首页 > 代码库 > Servlet的Listener介绍

Servlet的Listener介绍

  当Web应用在Web容器中运行时,Web应用内部会不断地发生各种事件:如Web应用被启动、Web应用被停止、用户session开始、用户session结束等。通常这些Web操作对开发者是透明的。但Servlet API也提供了相应的接口提供调用。

  当我们要使用Listener时,只需要两个步骤:

  ① 定义Listener实现类(实现对应的接口)

  ② 通过Annotation或在web.xml文件中配置Listener

1、实现Listener类

不同的Web事件对应的监听器也不同,常用的Web事件监听器接口有如下几个:

->ServletContextListener:用于监听Web应用的启动和关闭

->ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变

->ServletRequestListener:用于监听用户请求

->ServletRequestAttributeListener:用于监听ServletRequest范围(request)内属性的改变

->HttpSessionListener:用于监听用户session的开始和结束

->HttpSessionAttributeListener:用于监听HttpSession范围(session)内属性的改变

一般来说,需要监听哪些Web时间就实现对应接口的方法即可。

2、配置Listener

实现了Listener类之后,还需要配置Listener。你可以选择Annotaion方式或web.xml方式。

Annotation方式:只需使用@WebListener修饰Listener实现类即可(要求Servlet3.0以上)

web.xml方式的配置:

<listener>     <!-- 指定Listener的实现类 -->     <listener-class>lee.GetConnListener</listener-class></listener>

下面举一个监听Web应用启动的例子:

首先,实现Listener类(实现ServletContextListener接口):

package com.chanshuyi.listener;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class StartUpListener implements ServletContextListener {	/**	 * 关闭操作	 */	public void contextDestroyed(ServletContextEvent sc) {		System.out.println("------------------ Tomcat关闭! ------------------");	}	/**	 * 启动初始化	 */	public void contextInitialized(ServletContextEvent sc) {		//获取application。无法获取request/response/session		//ServletContext application = sc.getServletContext();		System.out.println("------------------ Tomcat启动! ------------------");	}}

接着,在web.xml中配置:

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" 	xmlns="http://java.sun.com/xml/ns/javaee" 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>  <listener>     <!-- 指定Listener的实现类 -->  	<listener-class>com.chanshuyi.listener.StartUpListener</listener-class>  </listener></web-app>

MARK:使用@WebListener注解的时候出错,不知道是什么原因。(MARK CHENYR)

如果要监听其他Web应用事件,那么只是实现的接口不同而已。其他都是一样的。

Servlet的Listener介绍