- 在JavaWeb中,监视servlet的三个作用域的程序,就是Javaweb中的监听器.在Javaweb中的servlet作用域对象:ServletContext/HttpSession/HttpServletRequest(应用监听器/会话监听器/请求监听器)三个对象.而这三个对象的监视:三个对象的生命周期和属性的变化.
-
- 在应用(Tomcat)/会话/请求创建/销毁时被触发,
- 分类
-
- 按生命周期
-
-
- ServletContextLinstener
-
-
-
-
- 监听ServletContext生命周期
-
-
-
-
- HttpSessionLinstener
-
-
-
-
- 监听HttpSession生命周期
-
-
-
-
- ServletRequstLinstener
-
-
-
-
- 监听每个HttpServletRequest对象的生命周期
-
-
-
- 按属性变化
-
-
- ServletContextAttributeLinstener
-
-
-
-
- 监听ServletContext属性变化
-
-
-
-
- HttpSessionAttributeLinstener
-
-
-
-
- 监听HttpSession属性变化
-
-
-
-
- ServletRequestAttributeLinstener
-
-
-
-
- 监听HeepServletRequest属性变化
-
-
-
- 按职能
-
-
- 生命周期监听
- 属性监听
-
- 使用
-
- 实现接口,将类注册到服务器(注解/配置文件),服务器会自动调用相关方法
- 实现接口
-
- 注册到服务器
-
-
- 注解
-
-
-
-
- @WebListener
-
-
@WebListener
public class MyRequestLinstener implements ServletRequestListener, ServletRequestAttributeListener {
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("请求被创建");
}
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("请求被销毁");
}
@Override
public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("添加属性");
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent srae) {
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("移除属性");
}
}
-
-
- XML配置
-
<web-app><listener>
<listener-class>com.wry.javaweb.linstener.MyRequestLinstener</listener-class>
</listener>
</web-app>
Request域监听器
- ServletRequestLinstrener接口 请求生命周期监听器
-
- requestInitialized()
-
-
- 请求被创建时调用
-
-
- requestDestroyed()
-
-
- 请求被销毁时调用
-
- ServletRequestAttributeLinstener接口 请求属性(数据)监听器
-
- attributeAdded()
-
-
- setAttribute()添加属性
- 添加属性且属性不存在时调用
-
-
- attributeReplaced()
-
-
- setAttribute()添加属性
- 属性被覆盖时调用
-
-
-
-
- 添加属性时属性已存在
-
-
-
- attributeRemoveed()
-
-
- 属性被移除时调用
-
-
-
-
- removeAttribute()被调用时调用
-
-
Session监听器
- HttpSessionLinstener接口 会话生命周期监听器
-
- sessionCreated()
-
-
- 会话创建时
-
-
-
-
- 在用户请求进入Tomcat后,访问JSP/调用request.getSession方法时,如果没有会话对象则创建会话对象,同时触发这个方法
-
-
-
-
-
-
- JSP页面编译后的Java类会自动调用request.getSession方法
-
-
-
-
- sessionDestroyed()
-
-
- 会话销毁时触发
-
-
-
-
- 会话的3个销毁时机
-
-
-
-
-
-
- 关闭Tomcat时
- 会话超时时
-
-
-
-
-
-
-
-
- 默认保存时间为30分钟,如果30分钟内没有访问过JSP或没有调用过request.getSession方法,会话就会自动销毁,否则会重新计时
-
-
-
-
-
-
-
-
- 手动调用销毁方法
-
-
-
-
-
-
-
-
- Session实例对象.invalidate()
-
-
-
-
-
-
-
-
-
-
- 销毁Session对象
-
-
-
-
-
- HttpSessionAttributeListener接口 会话属性(数据)监听器
-
- attributeListenerAdded()
-
-
- 向会话中添加数据
-
-
- attributeReplaced()
-
-
- 覆盖会话中数据
-
-
- attributeRemoved()
-
-
- 移出会话中数据
-
- HttpSessionBindingListener接口
- HttpSessionActivationListener接口
ServletContext监听器
- ServletContextLinstener接口 应用生命周期监听器
-
- contextInitialized()
-
-
- 服务器启动时触发,通常用于初始化一些数据
-
-
- contextDestroyed()
-
-
- 服务器关闭时触发,通常用于销毁一些资源
-
- ServletContextAttributeLinstener接口 应用属性(数据)监听器
-
- attributeListenerAdded()
-
-
- 向应用对象中添加数据
-
-
- attributeReplaced()
-
-
- 覆盖应用对象中数据
-
-
- attributeRemoved()
-
-
- 移出应用对象中数据
-
-
- 注意
-
-
- 可以通过request.getContext()方法获取应用对象
-