标签:监听器
创建监听器的监听器接口属于javax.servlet和javax.servlet.http包的一部分,详情如下:
javax.servlet.ServletContextListener。这是对Servlet Context生命周期事件做出响应的监听器。创建好Servlet Context时会马上调用它的一个方法,并在关闭Servlet Context之前调用它的另一个方法。
javax.servlet.ServletContextAttributeListener。这是在添加、删除或替换某个Servlet Context属性时采取相应动作的监听器。
javax.servlet.http.HttpSessionAttributeListener。这是在创建、移除或替换Servlet上下文属性时响应的监听器。
javax.servlet.http.HttpSessionAttributeListener。这是在添加、删除或替换某个session属性时被调用的监听器。
javax.servlet.httpSessionActivationListener。这是在打开和关闭某个HttpSession时被调用的监听器。
javax.servlet.http.HttpSessionBindingListener。这是一个类,其实例将被保存为可以实现这个接口的HttpSession属性。当它在HttpSession中被添加或者删除时,实现HttpSessionBindingListener的类实例会收到通知。
javax.servlet.ServletRequestListener。这是对ServletRequest的创建和删除做出响应的监听器。
javax.servlet.ServletRequestAttributeListener。当ServletRequest中添加、删除或替换掉某个属性时,会调用该监听器的方法。
javax.servlet.AsyncListener。用于异步操作的监听器。
创建监听器时,只要创建一个实现相关接口的java类即可。在Servlet 3.0中。注册监听器有两种方法。
1、注解
@WebListener
public class ListenerClass implements ListenerInterface{
}
2、配置文件
<listener>
<listener-class>fully-qualified listener class</listener-class>
</listener>
在应用程序中可以想要多少个监听器就可以有多少个监听器。注意,对监听器方法的调用是同步进行的。
在ServletContext级别上有两个监听器接口:ServletContextListener和ServletContextAttributeListener。
ServletContextListener会对ServletContext的初始化和解构做出响应。ServletContext被初始化时,Servlet容器会在所有已注册的ServletContextListener中调用contextInitialized方法,其方法签名如下:
void contextInitialized(ServletContextEvent event)
当ServletContext要被解构和销毁时,Servlet容器会在所有已注册的ServletContextListener中调用contextDestroyed方法,以下是contextDestroyed的方法签名:
void contextDestroyed(ServletContextEvent event)
contentInitialized和contextDestroyed都会收到一个来自Servlet容器的ServletContextEvent。java.util.EventObject类的一个派生类:javax.servlet.ServletContextEvent。定义了一个返回ServletContext的getServletContext方法:
ServletContext getServletContext()
这个方法很重要,因为这是方位ServletContext的唯一简便方法。它有许多ServletContextListener,可以将属性保存在ServletContext中。
下面是个例子:
countries.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>My JSP 'countries.jsp' starting page</title>
</head>
<body>
We operate in these countries:
<ul>
<c:forEach items="${countries}" var="country">
<li>${country.value}</li>
</c:forEach>
</ul>
</body>
</html>
package app08a.listener;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class AppListener implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContextListener started");
ServletContext servletContext = sce.getServletContext() ;
Map<String,String> countries = new HashMap<String,String>() ;
countries.put("ca", "Canada") ;
countries.put("us", "United States") ;
servletContext.setAttribute("countries", countries) ;
}
}
标签:监听器
原文地址:http://blog.csdn.net/benjamin_whx/article/details/38732133