1.1 Listener 基本信息
概念:监听器就是一个实现了特定接口的Java类。
分类:
- 一类监听器:监听域对象的创建、销毁
- 二类监听器:监听域对象中的属性变更(属性设置、属性替换、属性移除)
- 三类监听器:监听域对象中的java对象的绑定
Servlet监听器:
事件源
:request、session、servletContext三大域对象
监听器
:Servlet对象(三种监听器)
绑定
:web.xml配置 或 @WebListener注解
事件
:域对象发生改变
1.2 Listener 工作原理
- 实现了特定接口的类为监听器,用来监听另一个Java类的方法调用或者属性改变;
- 当被监听的对象发生了方法调用或者属性改变后,监听器的对应方法就会立即执行。
1.3 Listener 基本使用
一类接口:
ServletContextListener
监听ServletContext域对象的创建、销毁
1 2 3 4
| public void contextInitialized(ServletContextEvent servletContextEvent)
public void contextDestroyed(ServletContextEvent servletContextEvent)
|
HttpSessionListener
监听HttpSession域对象的创建、销毁
1 2 3 4
| public void sessionCreated(HttpSessionEvent httpSessionEvent)
public void sessionDestroyed(HttpSessionEvent httpSessionEvent)
|
ServletRequestListener
监听ServletRequest域对象的创建、销毁
1 2 3 4
| public void requestInitialized(ServletRequestEvent servletRequestEvent)
public void requestDestroyed(ServletRequestEvent servletRequestEvent)
|
二类接口:
ServletContextAttributeListener
HttpSessionAttributeListener
ServletRequestAttributeListener
1 2 3 4 5 6
| void attributeAdded(ServletContextAttributeEvent var1);
void attributeReplaced(ServletContextAttributeEvent var1);
void attributeRemoved(ServletContextAttributeEvent var1);
|
三类接口:
HttpSessionBindingListener
监听session域对象中的java对象的状态(绑定和解绑)
绑定:将java对象存储到session域对象
解绑:将java对象从session域对象移除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
public class User implements HttpSessionBindingListener { private int id; private String username; private String password;
@Override public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) { System.out.println("HttpSession 与 User 绑定"); }
@Override public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) { System.out.println("HttpSession 与 User 解绑"); } }
|
1.4 Listener 开发步骤
① 定义类实现监听器接口
② 重写方法
③ 配置 web.xml
1 2 3
| <listener> <listener-class>Listener的全限定名</listener-class> </listener>
|
1.5 Listener 使用示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
public class TestServletContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent servletContextEvent) { System.out.println("ServletContext 初始化"); }
@Override public void contextDestroyed(ServletContextEvent servletContextEvent) { System.out.println("ServletContext 销毁"); } }
|