Servlet_Listener监听器
监听器在监听时涉及到的几个部分:事件,事件源,监听器,处理器。
将监听器绑定到事件源上,当事件发生时触发监听器中的成员方法(即处理器),处理器根据获取到的事件对象对事件进行处理。
Servlet中共有8种监听器(可分为3类):
- 用于监听域对象创建和销毁的事件监听器(ServletContextListener接口,HttpSessionListener接口,ServletRequestListener接口)
- 用于监听域对象属性增加和删除的事件监听器(ServletContextAttributeListener接口,HttpSessionAttributeListener接口,ServletRequestAttributeListener接口)(Attribute:属性)
- 用于监听绑定到HttpSession域中某个对象状态的事件监听器
a)HttpSessionBindingListener接口:用于监听JavaBean对象绑定到HttpSession对象和从HttpSession对象解绑的事件。
b)HttpSessionActivationListener接口:用于监听HttpSession中对象活化和钝化的过程。
监听域对象的生命周期
- 编写一个实现了ServletContextListener接口,HttpSessionListener接口,ServletRequestListener接口的监听器实例。
public class TestListener implements ServletContextListener, ServletRequestListener,HttpSessionListener { public void contextInitialized(ServletContextEvent servletContextEvent) { System.out.println("ServletContext 对象创建"); } public void contextDestroyed(ServletContextEvent servletContextEvent) { System.out.println("ServletContext 对象销毁"); } public void requestDestroyed(ServletRequestEvent servletRequestEvent) { System.out.println("ServletRequest 对象销毁"); } public void requestInitialized(ServletRequestEvent servletRequestEvent) { System.out.println("ServletRequest 对象创建"); } public void sessionCreated(HttpSessionEvent httpSessionEvent) { System.out.println("HttpSession 对象创建"); } public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { System.out.println("HttpSession 对象销毁"); } }
- 在web.xml中配置监听器类信息
<listener> <listener-class>Listener.TestListener</listener-class> </listener>
注意:在Servlet2.4之前,<listener>
元素必须放在所有<servlet>
元素之前,且在所有<filter-mapping>
元素之后。
- 开启web服务器,并打开一个页面文件(.html不行,不支持session)
在开启/关闭web服务器的时候,能看到ServletContext对象创建/销毁的提示
浏览器发出请求后,web容器会创建ServletRequest对象和HttpSession对象,请求完成后ServletRequest对象随之销毁,HttpSession对象会在关闭浏览器或Session过期后销毁。
本文来自博客园,作者:独游空想家,转载请注明原文链接:https://www.cnblogs.com/linzhikai/p/16555468.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理