Servlet中除了过滤器组件之外,还供应了一个监听器组件,监听器组件的浸染是:可以监听某些事宜或者动作,当触发对应的操作或者事宜的时候,就会实行监听器中相应的方法。

Servlet中有下面这几个常见的监听器,分别是:

HttpSessionListener监听器:用于监听HttpSession工具的创建和销毁。
HttpSessionAttributeListener监听器:用于监听HttpSession工具中属性的新增、删除、覆盖三个操作。
ServletRequestListener监听器:用于监听HttpServletRequest要求工具的创建和销毁。
ServletRequestAttributeListener监听器:用于监听HttpServletRequest要求工具中属性的新增、删除、覆盖三个操作(把稳:必须是同一个Request要求工具,才会触发相应的监听方法)。
ServletContextListener监听器:用于监听ServletContext高下文工具的创建和销毁,也便是指运用程序的启动和停滞。
ServletContextAttributeListener监听器:用于监听ServletContext高下文工具中属性的新增、删除、覆盖三个操作。

这一小节内容,我们先来先容HttpSessionAttributeListener监听器的利用。

php监听器sessionServlet第32节Servlet监听器HttpSessionAttributeListener SQL

1.1、HttpSessionAttributeListener先容

HttpSessionAttributeListener是一个监听HttpSession工具中属性的新增、删除、覆盖的接口,接口中供应了3个方法,分别是:attributeAdded()、attributeRemoved()、attributeReplaced(),如下图所示:

3个方法的参数都是HttpSessionBindingEvent类型,HttpSessionBindingEvent表示Session绑定事宜,该工具中记录了触发这个事宜的事宜来源source,本次发生变更的属性名称name和属性值value,并且还可以通过getSession()方法,获取到对应的HttpSession工具。

Servlet中要创建一个监听器,非常大略,只须要3个步骤,如下所示:

第一步:编写一个类,实现对应的监听器接口,重写对应的方法。
第二步:在对应方法中,编写自己的业务逻辑代码
第三步:在web.xml配置文件中,添加监听器的配置信息。
1.2、创建监听器

创建一个SessionAttributeDemoListener类,实现HttpSessionAttributeListener监听器接口,重写接口中的3个方法,案例代码如下:

package com.gitcode.listener;import javax.servlet.http.;/ @version 1.0.0 @Date: 2024/2/21 14:15 @Author ZhuYouBin @Description: /public class SessionAttributeDemoListener implements HttpSessionAttributeListener { / 当往Session工具中,添加属性数据的时候,就会触发这个方法 / @Override public void attributeAdded(HttpSessionBindingEvent event) { System.out.println("新增了Session数据,name=" + event.getName() + ",value=" + event.getValue()); } / 当往Session工具中,删除属性数据的时候,就会触发这个方法 / @Override public void attributeRemoved(HttpSessionBindingEvent event) { System.out.println("删除了Session数据,name=" + event.getName() + ",value=" + event.getValue()); } / 当往Session工具中,覆盖属性数据的时候,就会触发这个方法 / @Override public void attributeReplaced(HttpSessionBindingEvent event) { System.out.println("覆盖之前的数据,name=" + event.getName() + ",value=" + event.getValue()); HttpSession session = event.getSession(); System.out.println("覆盖之后的数据,name=" + event.getName() + ",value=" + session.getAttribute(event.getName())); }}1.3、配置监听器

在web.xml配置文件中,利用<listener>标签配置我们刚刚创建的监听器类,如下所示:

<!-- 配置监听器,listener标签可以配置多个 --><listener> <listener-class>com.gitcode.listener.SessionAttributeDemoListener</listener-class></listener>1.4、创建测试Servlet

为了演示HttpSession工具中属性的新增、删除、覆盖等操作,我们这里新增三个Servlet程序,分别是用于新增、删除、覆盖HttpSession属性,给出个中部分案例代码(完全代码查看GitCode仓库):

package com.gitcode.servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;/ @version 1.0.0 @Date: 2024/2/19 20:34 @Author ZhuYouBin @Description: /public class AddAttributeServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取Session工具,没有会创建一个 HttpSession session = request.getSession(); session.setAttribute("username", "Tom-2024"); }}

启动Tomcat容器,浏览器依次访问下面三个地址:

http://localhost:8080/servlet/addhttp://localhost:8080/servlet/replacehttp://localhost:8080/servlet/remove

此时,查看IDEA掌握台输出日志,如下所示:

以上,便是Servlet监听器中的HttpSessionAttributeListener先容及其利用办法。

本日就到这里,未完待续~~