意义:一但发生什么(服务器或者客户端),服务器做出相应的动作。
内容:1.创建实现了具体接口的类表示监听器。2.使用xml部署描述符或者注解(推荐注解)让servlet容器找到监听器。
常用接口和实例:
一。ServletContext级别的监听器:
1)ServletContextListener对ServletContext的初始化和卸载做出响应(具体的响应可以自己写),其中初始化的时候调用ServletContextListener接口的contextInitialized方法。相应的卸载就调用contextDestroyed方法。两个方法的参数都是java.servlet.ServletContextEvent类,它实现了的java.util.EventObject接口。可以使用这个参数的方法getServletContext()获得servletContext实例。
具体事例:
监听器:
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{
public void contextDestroyed(ServletContextEvent event){
}
public void contextInitialized(ServletContextEvent event){
ServletContext sc = event.getServletContext();
Map<String,String> yuege = new HashMap<String, String>();
yuege.put("yuege1", "yuege1");
yuege.put("yuege2", "yuege2");
sc.setAttribute("yueges", yuege);
}
}
当tomcat启动后,servletContext得到初始化,接口做出相应的动作。
使用jsp访问属性:
<%@page import="java.util.Map"%>
<html>
<head>
<title>My JSP 'yueges.jsp' starting page</title>
</head>
<body>
<%
Map<String,String> yueges = (Map)application.getAttribute("yueges");
out.println(yueges);
%>
</body>
</html>
2)ServletContextAttributeListener对ServletContext的添加删除替换属性是做出相应的方法:attributeAdded(ServletConetxtAttributeEvent event),attributeRemoved(ServletConetxtAttributeEvent event),attributeReplaced(ServletConetxtAttributeEvent event),和1)ServletContextListener类似,ServletConetxtAttributeEvent继承了ServletConetxtAttribute,通过getName和getValue获得属性名称和值。
二。Session级别的监听器:
1)HttpSessionListener
类似于上面,有session创建和卸载相对应的方法:sessionCreated(HttpSessionEvent even),sessionDedtroyed(HttpSessionEvent even),以及HttpSessionEvent的get Session()。
2)HttpSessionAttributeListener
类似于ServletContextAttributeListener。方法:attributeAdded(HttpSessionBindingEvent event),attributeRemoved(HttpSessionBindingEvent event),attributeReplaced(HttpSessionBindingEvent event),相应的HttpSessionBindingEvent 的方法getName()和getValue获得session的名称和值。
3)HttpSessionActivationListener略,不常用。
4)HttpSessionBindingListener
作用于于类,我们知道session就是Map对象,当需要知道一个类放进或者移除session的时候需要得到通知,这个时候我们就需要使这个类实现这个借口,并且在这个类中事项两个放和除对应的方法:valueBound(HttpSessionBindingEvent enent)和valueUnBound(HttpSessionBindingEvent enent)。
三。ServletRequest监听器
1)ServletRequestListener
类似的借口,类似的方法:requestInitialized(ServletReuqestEvent event),requestDestroyed(ServletReuqestEvent event),类似的的时间放回request的方法:
getServletRequest()。这个时间还可以返回ServletContext的getServletContext()的方法。
2)ServletRequestListener
类似的attributeAdded(ServletRequestAttributeEvent event),attributeRemoved(ServletRequestAttributeEvent event),attributeReplaced(ServletRequestAttributeEvent event),相应的ServletRequestAttributeEvent 的方法getName()和getValue获得名称和值。