目录
一.监听器
1.简介
Listener 的作用是用于监听 web应用的创建和销毁,以及在其上attribute发生的变化。
web应用即ServletContext对象(jsp的隐式对象application)
除了对web应用的监听外,还能监听session和request的生命周期,以及他们的attribute发生的变化。
Javaweb中的监听器是用于监听web常见对象HttpServletRequest,HttpSession,ServletContext。
2.监听器的作用
- 监听web对象创建与销毁.
- 监听web对象的属性变化
3.创建一个监听器的步骤
- 创建一个类,实现需要监听器的接口
- 重写接口中的方法
- 在web.xml中配置注册该监听器
二.Listender 监听 Context
1.监听 ServletContext的生命周期
//需要实现ServletContextListener
public class ContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("web应用初始化");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("web应用销毁");
}
}
<!--web.xml 配置-->
<listener>
<listener-class>com.joe.listener.ContextListener</listener-class>
</listener>
2.监听 ServletContext 上属性的变化
public class ContextAttributeListener implements ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent e) {
System.out.println("被添加的属性,名:"+e.getName()+" 值:"+e.getValue());
}
@Override
public void attributeRemoved(ServletContextAttributeEvent e) {
System.out.println("属性被移出,名:"+e.getName()+" 值:"+e.getValue());
}
@Override
public void attributeReplaced(ServletContextAttributeEvent e) {
//获取到的是修改前的值
System.out.println("属性被修改,名:"+e.getName()+" 值:"+e.getValue());
}
}javascript:void(0)
<listener>
<listener-class>com.joe.listener.ContextAttributeListener</listener-class>
</listener>
<%
application.setAttribute("name","joe");
application.setAttribute("name","joe1");
application.removeAttribute("name");
%>
三.Listener 监听 Session
1.监听 HttpSession的创建与销毁以及其上属性的变化
public class SessionListener implements HttpSessionListener, HttpSessionAttributeListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("session 被创建");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("session 被销毁");
}
@Override
public void attributeAdded(HttpSessionBindingEvent e) {
System.out.println("被添加的属性,名:"+e.getName()+" 值:"+e.getValue());
}
@Override
public void attributeRemoved(HttpSessionBindingEvent e) {
System.out.println("属性被移出,名:"+e.getName()+" 值:"+e.getValue());
}
@Override
public void attributeReplaced(HttpSessionBindingEvent e) {
//获取到的是修改前的值
System.out.println("属性被修改,名:"+e.getName()+" 值:"+e.getValue());
}
}
<listener>
<listener-class>com.joe.listener.SessionListener</listener-class>
</listener>
四.Listener 监听 Request
1.监听 HttpRequest的创建与销毁以及其上属性的变化
public class RequestListener implements ServletRequestListener, ServletRequestAttributeListener {
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("请求被销毁");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("请求被创建");
}
@Override
public void attributeAdded(ServletRequestAttributeEvent e) {
System.out.println("被添加的属性,名:"+e.getName()+" 值:"+e.getValue());
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent e) {
System.out.println("属性被移出,名:"+e.getName()+" 值:"+e.getValue());
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent e) {
//获取到的是修改前的值
System.out.println("属性被修改,名:"+e.getName()+" 值:"+e.getValue());
}
}
<listener>
<listener-class>com.joe.listener.RequestListener</listener-class>
</listener>