【java】listener 矫情吗;* 2024-02-19 16:37 43阅读 0赞 #### 文章目录 #### * 一、监听器Listener * * 1.什么是监听器? * 2.监听器有哪些? * 3.监听三大域对象的创建与销毁的监听器 * * (1)监听ServletContext域的创建与销毁的监听器ServletContextListener * * 1)Servlet域的生命周期 * 2)监听器的编写步骤(重点): * 3)监听的方法: * 补充: * 4)ServletContextListener监听器的主要作用 * * a、初始化的工作:初始化对象 初始化数据 ---- 加载数据库驱动 连接池的初始 化 * b、加载一些初始化的配置文件 --- spring的配置文件 * c、任务调度----定时器----Timer/TimerTask * (2)监听Httpsession域的创建与销毁的监听器HttpSessionListener * * 1)HttpSession的生命周期 * 2)HttpSessionListener的方法 * (3)监听ServletRequest域创建与销毁的监听器ServletRequestListener * * 1)ServletRequest的生命周期 * 2)ServletRequestListener的方法 * 4.监听三大域对象的属性变化的 * 5.与session中的绑定的对象相关的监听器(对象感知监听器) * * (1)即将要被绑定到session中的对象有几种状态 * (2)绑定与解绑的监听器HttpSessionBindingListener * (3)钝化与活化的监听器HttpSessionActivationListener ## 一、监听器Listener ## javaEE包括13门规范 ,其中一个就是 servlet技术 ,同时 servlet规范包括三个技术点:servlet listener filter ### 1.什么是监听器? ### 监听器就是监听某个对象的的状态变化的组件 > **监听器的相关概念:** > 事件源: > 被监听的对象 ----- 三个域对象 request session servletContext > 监听器: > 监听事件源对象 事件源对象的状态的变化都会触发监听器 > 注册监听器: > 将监听器与事件源进行绑定 > 响应行为: > 监听器监听到事件源的状态变化时 所涉及的功能代码 ---- 程序员编写代 码 ### 2.监听器有哪些? ### 监听器一共有6+2个,我们先了解前六个简单的。 第一维度:按照被监听的对象划分:ServletRequest域 HttpSession域 ServletContext域。 第二维度:监听的内容分:监听域对象的创建与销毁的 监听域对象的属性变 化的。 <table> <thead> <tr> <th>、</th> <th>ServletContext域</th> <th>HttpSession域</th> <th>ServletReqest域</th> </tr> </thead> <tbody> <tr> <td>域对象的创建与销毁</td> <td>ServletContextListener</td> <td>HttpSessionListener</td> <td>ServletReqestListener</td> </tr> <tr> <td>域对象内的属性的变化</td> <td>ServletContextAttributeListener</td> <td>HttpSessionAttributeListener</td> <td>ServletReqestAttributeListener</td> </tr> </tbody> </table> ### 3.监听三大域对象的创建与销毁的监听器 ### #### (1)监听ServletContext域的创建与销毁的监听器ServletContextListener #### ##### 1)Servlet域的生命周期 ##### 何时创建:服务器启动创建 何时销毁:服务器关闭销毁 ##### 2)监听器的编写步骤(重点): ##### a、编写一个监听器类去实现监听器接口 b、覆盖监听器的方法 c、需要在web.xml中进行配置—注册 ##### 3)监听的方法: ##### 使用eclipse创建一个dynamic web project项目。 创建一个类:myServletcontextListener package test; public class myServletcontextListener { } a、编写一个监听器类去实现监听器接口 package test; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class myServletcontextListener implements ServletContextListener{ @Override public void contextDestroyed(ServletContextEvent sce) { // TODO Auto-generated method stub } @Override public void contextInitialized(ServletContextEvent sce) { // TODO Auto-generated method stub } } b、覆盖监听器的方法 package test; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class myServletcontextListener implements ServletContextListener{ @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("监听到正在创建"); } @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("监听到正在销毁"); } } c.配置文件: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>Listener</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- 注册监听器 --> <listener> <listener-class>test.myServletcontextListener</listener-class> </listener> </web-app> 运行结果: 此时,启动服务器,那么在console窗口就可以看到创建监听器的打印字符串。 ##### 补充: ##### package test; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class myServletcontextListener implements ServletContextListener{ @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("监听到正在创建"); //获取被监听的对象_servletcontext ServletContext servletcontext= sce.getServletContext(); //或者: Object source=sce.getSource();//这个获取的也是被监听的对象,但是是object类型,,是通用的方法。 } @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("监听到正在销毁"); } } ##### 4)ServletContextListener监听器的主要作用 ##### ###### a、初始化的工作:初始化对象 初始化数据 ---- 加载数据库驱动 连接池的初始 化 ###### ###### b、加载一些初始化的配置文件 — spring的配置文件 ###### ###### c、任务调度----定时器----Timer/TimerTask ###### #### (2)监听Httpsession域的创建与销毁的监听器HttpSessionListener #### ##### 1)HttpSession的生命周期 ##### 何时创建:第一次调用request.getSession时创建 何时销毁:服务器关闭销毁 session过期 手动销毁 ##### 2)HttpSessionListener的方法 ##### > 与监听ServletContext域的创建与销毁的监听器ServletContextListener相同。 #### (3)监听ServletRequest域创建与销毁的监听器ServletRequestListener #### ##### 1)ServletRequest的生命周期 ##### 创建:每一次请求都会创建request 销毁:请求结束 ##### 2)ServletRequestListener的方法 ##### > 与监听ServletContext域的创建与销毁的监听器ServletContextListener相同。 ### 4.监听三大域对象的属性变化的 ### (1)域对象的通用的方法: setAttribute(name,value) — 触发添加属性的监听器的方法 — 触发修改属性的监听器的方法 getAttribute(name) removeAttribute(name) — 触发删除属性的监听器的方法 > 具体使用方法同监听ServletContext域的创建与销毁的监听器ServletContextListener相同。 ### 5.与session中的绑定的对象相关的监听器(对象感知监听器) ### 上文中我们了解到,监听器一共有6+2个,接下来我们讲讲剩下的两个。 #### (1)即将要被绑定到session中的对象有几种状态 #### 绑定状态:就一个对象被放到session域中 解绑状态:就是这个对象从session域中移除了 钝化状态:是将session内存中的对象持久化(序列化)到磁盘 活化状态:就是将磁盘上的对象再次恢复到session内存中 #### (2)绑定与解绑的监听器HttpSessionBindingListener #### > 具体使用方法同监听ServletContext域的创建与销毁的监听器ServletContextListener相同。 #### (3)钝化与活化的监听器HttpSessionActivationListener #### > 具体使用方法同监听ServletContext域的创建与销毁的监听器ServletContextListener相同。
还没有评论,来说两句吧...