Listener的作用:

  1. Listener是Servlet规范的另一个高级特性,用于监听Java Web程序中的事件,例如创建、销毁session、request、context等,并触发相应的事件,事件发生的时候会自动触发该事件对应的Listener。
  2. Java Web程序也一样,使用Listener和Event完成相应事件的处理。

监听器Listener的配置:

//application监听器配置

<listener>
<listener-class>com.javaweb.listener.ApplicationListener</listener-class>
</listener>

//session监听器配置

<listener>
<listener-class>com.javaweb.listener.MySessionListener</listener-class>
</listener>

示例:

application监听器:

application监听器的作用 :

  1. 监听的Web应用的生命周期。
  2. 用于处理应用程序启动初始化和关闭释放资源的问题

实现

  1. 实现ServletContextListener接口
public class ApplicationListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent sct) {
System.out.println("应用关闭-->"+new Date().toLocaleString());
}

@Override
public void contextInitialized(ServletContextEvent sct) {
System.out.println("应用启动-->"+new Date().toLocaleString());
//得到应用路径
String path = sct.getServletContext().getContextPath();
System.out.println("应用是:"+path);
}
}

session监听器:

监听器Listener(application、session监听器的实现以及session属性的监听器)_监听器

实现:

  1. HttpSessionListener接口
public class MySessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent hse) {
String dateTime = new Date().toLocaleString();
HttpSession session = hse.getSession();
System.out.println(dateTime+" 创建 sessiom,ID:"+session.getId());
}

@Override
public void sessionDestroyed(HttpSessionEvent hse) {
String dateTime = new Date().toLocaleString();
HttpSession session = hse.getSession();
System.out.println(dateTime+" 销毁session,ID:"+session.getId());
}

session属性监听:HttpSessionAttributeListener接口

public class MySessionAttrListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent hsb) {
//得到当前session
System.out.print("session ID:"+hsb.getSession().getId());
//获取属性名和属性值
System.out.println(" 增加属性:"+hsb.getName()+",属性值是:"+hsb.getValue());
}
public void attributeRemoved(HttpSessionBindingEvent hsb) {
System.out.print("session ID:"+hsb.getSession().getId());
System.out.println(" 删除属性:"+hsb.getName()+",属性值是:"+hsb.getValue());
}
public void attributeReplaced(HttpSessionBindingEvent hsb) {
System.out.print("session ID:"+hsb.getSession().getId());
System.out.println(" 替换属性:"+hsb.getName()+",属性值是:"+hsb.getValue());
}
}