Servlet中除了过滤器组件之外,还供应了一个监听器组件,监听器组件的浸染是:可以监听某些事宜或者动作,当触发对应的操作或者事宜的时候,就会实行监听器中相应的方法。
Servlet中有下面这几个常见的监听器,分别是:
HttpSessionListener监听器:用于监听HttpSession工具的创建和销毁。HttpSessionAttributeListener监听器:用于监听HttpSession工具中属性的新增、删除、覆盖三个操作。ServletRequestListener监听器:用于监听HttpServletRequest要求工具的创建和销毁。ServletRequestAttributeListener监听器:用于监听HttpServletRequest要求工具中属性的新增、删除、覆盖三个操作(把稳:必须是同一个Request要求工具,才会触发相应的监听方法)。ServletContextListener监听器:用于监听ServletContext高下文工具的创建和销毁,也便是指运用程序的启动和停滞。ServletContextAttributeListener监听器:用于监听ServletContext高下文工具中属性的新增、删除、覆盖三个操作。这一小节内容,我们先来先容ServletContextAttributeListener监听器的利用。
1.1、ServletContextAttributeListener先容
ServletContextAttributeListener是一个监听ServletContext高下文工具中属性的新增、删除、覆盖三个操作的接口,接口中供应了3个方法,分别是:attributeAdded()、attributeRemoved()、attributeReplaced(),如下图所示:
3个方法的参数都是ServletContextAttributeEvent类型,ServletContextAttributeEvent表示高下文工具的属性事宜,该工具中记录了触发这个事宜的事宜来源source,本次发生变更的属性名称name和属性值value,并且还可以通过getServletContext()方法,获取到对应的ServletContext高下文工具。
Servlet中要创建一个监听器,非常大略,只须要3个步骤,如下所示:
第一步:编写一个类,实现对应的监听器接口,重写对应的方法。第二步:在对应方法中,编写自己的业务逻辑代码。第三步:在web.xml配置文件中,添加监听器的配置信息。1.2、创建监听器创建一个ContextAttributeDemoListener类,实现ServletContextAttributeListener监听器接口,重写接口中的3个方法,案例代码如下:
package com.gitcode.listener;import javax.servlet.;/ @version 1.0.0 @Date: 2024/2/21 14:15 @Author ZhuYouBin @Description: /public class ContextAttributeDemoListener implements ServletContextAttributeListener { / ServletContext中新增属性的时候,会实行这个方法 / @Override public void attributeAdded(ServletContextAttributeEvent event) { System.out.println("新增了ServletContext数据,name=" + event.getName() + ",value=" + event.getValue()); } / ServletContext中删除属性的时候,会实行这个方法 / @Override public void attributeRemoved(ServletContextAttributeEvent event) { System.out.println("删除了ServletContext数据,name=" + event.getName() + ",value=" + event.getValue()); } / ServletContext中覆盖属性的时候,会实行这个方法 / @Override public void attributeReplaced(ServletContextAttributeEvent event) { System.out.println("覆盖之前的数据,name=" + event.getName() + ",value=" + event.getValue()); ServletContext servletContext = event.getServletContext(); System.out.println("覆盖之后的数据,name=" + event.getName() + ",value=" + servletContext.getAttribute(event.getName())); }}
1.3、配置监听器
在web.xml配置文件中,利用<listener>标签配置我们刚刚创建的监听器类,如下所示:
<!-- 配置监听器,listener标签可以配置多个 --><listener> <listener-class>com.gitcode.listener.ContextAttributeDemoListener</listener-class></listener>
1.4、创建测试Servlet
创建ContextAttributeServlet程序,用于测试ServletContext高下文工具中属性的变更,案例代码:
package com.gitcode.servlet;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/ @version 1.0.0 @Date: 2024/2/21 22:11 @Author ZhuYouBin @Description: /public class ContextAttributeServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取高下文工具 ServletContext context = request.getServletContext(); // 新增属性 context.setAttribute("username", "Tom-2024"); // 覆盖属性 context.setAttribute("username", "Tom-2024-new"); // 删除属性 context.removeAttribute("username"); }}
启动Tomcat容器,浏览器访问http://localhost:8080/servlet/attribute,查看IDEA掌握台输出日志:
以上,便是ServletContextAttributeListener监听器的利用,到此,Servlet常用的知识点就差不多先容完啦。后续将连续更新JSP干系的知识点。
本日就到这里,未完待续~~