首页 > 代码库 > 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介绍