JavaWeb 三大组件之监听器 Listener
Listener 监听器介绍
1. Listener 监听器它是 JavaWeb 的三大组件之一。JavaWeb 的三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器
2. Listener 是 JavaEE 的标准,便是接口
3. 监听器的效果是,监听某种改变(一般便是目标创立/毁掉, 特点改变), 触发对应办法完成相应的使命
JavaWeb 的监听器
ServletContextListener 监听器
1. 效果:监听 ServletContext 创立或毁掉(当咱们 Web 使用启动时,就会创立 ServletContext),
即生命周期监听,使用场景
(1)加载初始化的装备文件;比方 spring 的装备文件
(2)使命调度(合作定时器 Timer/TimerTask)
相关办法
void contextInitialized(ServletContextEvent sce) 创立 Servletcontext 时触发
voidcontextDestroyed(ServletContextEvent sce) 毁掉 Servletcontext
代码演示
wyxServletContextListener
/**
* 1. 当一个类完成了 ServletContextListener
* 2. 该类便是一个监听器
* 3. 该类能够监听的事情 由该类完成的监听接口决定 ,比方 完成ServletContextListener
* , 则该类就能够监听 ServletContext目标的创立和毁掉, 以此类推
* 4. wyxServletContextListener 便是一个监听者
* 5. 当web使用启动时,就会发生 ServletContextEvent 事情, 会调用监听器的对应事情处理办法
* contextInitialized, 同时会传递 事情目标
* 6. 程序员能够通过 ServletContextEvent 事情目标,来获取需求的信息, 然后再进行业务处理
* 7. tomcat怎么知道这个监听器存在 ? 由于咱们需求在web.xml中装备
*/
public class wyxServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
ServletContext servletContext = servletContextEvent.getServletContext();
System.out.println("WyxServletContextListener 监听到 " +
servletContext + " 被创立..");
//假如咱们获取到ServletContext 目标..进行业务处理
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
ServletContext servletContext = servletContextEvent.getServletContext();
System.out.println("WyxServletContextListener 监听到 " +
servletContext + " 被毁掉..");
//比方能够对servletContext 数据进行处理, 或者日志的办理...
System.out.println("进行处理工作.....");
}
}
xml装备
<listener>
<listener-class>com.wyx.listener.WyxServletContextListener</listener-class>
</listener>
ServletContextAttributeListener 监听器
1. 效果:监听 ServletContext 特点改变
相关办法
void attributeAdded(ServletContextAttributeEvent event) 增加特点时调用
void attributeReplaced(ServletContextAttributeEvent event) 替换特点时调用
void attributeRemoved(ServletContextAttributeEvent event) 移除特点时调用
代码示例
WyxServletContextAttributeListener.java
public class WyxServletContextAttributeListener implements ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
System.out.println("WyxServletContextAttributeListener 监听到增加特点.."
+ servletContextAttributeEvent.getName() + "=" + servletContextAttributeEvent.getValue() );
}
@Override
public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
System.out.println("WyxServletContextAttributeListener 监听到删去特点.."
+ servletContextAttributeEvent.getName() + "=" + servletContextAttributeEvent.getValue() );
}
@Override
public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
System.out.println("WyxServletContextAttributeListener 监听到修正特点.."
+ servletContextAttributeEvent.getName() + "=" + servletContextAttributeEvent.getValue() );
}
}
TestServlet.java
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class TestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
getServletContext().setAttribute("k1","k1_value");
}
}
xml装备
<listener>
<listener-class>com.wyx.listener.WyxHttpSessionAttributeListener</listener-class>
</listener>
HttpSessionListener 监听器
效果:监听 Session 创立或毁掉,即生命周期监听
2. 相关办法
void sessionCreated(HttpSessionEvent se)创立 session 时调用
void sessionDestroyed(HttpSessionEvent se)毁掉 session 时调用
使用办法和前面一样, 能够用于监控用户上线,离线
代码示例
public class WyxHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
HttpSession session = httpSessionEvent.getSession();
//当session创立时,咱们给它设置一个生命周期 30s
session.setMaxInactiveInterval(30);
System.out.println("WyxHttpSessionListener 监听到 session创立= " +
session.getId());
System.out.println("用户id=" + session.getId() + " 上线");
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
HttpSession session = httpSessionEvent.getSession();
System.out.println("WyxHttpSessionListener 监听到 session毁掉= " +
session.getId());
System.out.println("用户id=" + session.getId() + " 离线");
}
}
xml装备与前面一样
HttpSessionAttributeListener 监听器
效果:监听 Session 特点的改变
2. 相关办法
void attributeAdded(ServletRequestAttributeEvent srae) 增加特点时
void attributeReplaced(ServletRequestAttributeEvent srae) 替换特点时
void attributeRemoved(ServletRequestAttributeEvent srae) 移除特点
代码示例
public class WyxHttpSessionAttributeListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
//HttpSession session = httpSessionBindingEvent.getSession();
System.out.println("WyxHttpSessionAttributeListener 监听到session增加特点" +
httpSessionBindingEvent.getName() + "=" + httpSessionBindingEvent.getValue());
}
@Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
HttpSession session = httpSessionBindingEvent.getSession();
System.out.println("WyxHttpSessionAttributeListener 监听到session删去特点" +
httpSessionBindingEvent.getName());
}
@Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("WyxHttpSessionAttributeListener 监听到session修正特点" +
httpSessionBindingEvent.getName() + "=" + httpSessionBindingEvent.getValue());
}
}
xml装备与前面一样
ServletRequestListener 监听器
1. ServletRequestListener 监听器
2. 效果:监听 Request 创立或毁掉,即 Request 生命周期监听
相关办法
void requestInitialized(ServletRequestEvent sre) 创立 request 时
void requestDestroyed(ServletRequestEvent sre) 毁掉 request 时
3. 能够用来监控, 某个 IP 拜访咱们网站的频率, 日志记载 ,拜访资源的情况
代码示例
public class WyxRequestListener implements ServletRequestListener {
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
System.out.println("WyxRequestListener 监听到 request目标创立");
ServletRequest servletRequest = servletRequestEvent.getServletRequest();
System.out.println("记载拜访日志....");
System.out.println("拜访IP= " + servletRequest.getRemoteAddr());
System.out.println("拜访的资源= " + ((HttpServletRequest)servletRequest).getRequestURL());
}
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
System.out.println(" WyxRequestListener 监听到 request目标被毁掉");
}
}
ServletRequestAttributeListener 监听器
效果:监听 Request 特点改变
2. 相关办法
void attributeAdded(ServletRequestAttributeEvent srae) 增加特点时
void attributeReplaced(ServletRequestAttributeEvent srae) 替换特点时
void attributeRemoved(ServletRequestAttributeEvent srae)移除特点时
代码示例
public class WyxServletContextAttributeListener implements ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
System.out.println("WyxServletContextAttributeL istener 监听到增加特点.."
+ servletContextAttributeEvent.getName() + "=" + servletContextAttributeEvent.getValue() );
}
@Override
public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
System.out.println("WyxServletContextAttributeListener 监听到删去特点.."
+ servletContextAttributeEvent.getName() + "=" + servletContextAttributeEvent.getValue() );
}
@Override
public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
System.out.println("WyxServletContextAttributeListener 监听到修正特点.."
+ servletContextAttributeEvent.getName() + "=" + servletContextAttributeEvent.getValue() );
}
}
HttpSessionBindingListener 感知监听器
HttpSessionActivationListener 感知监听器
不常用 了解即可