JavaWeb同步学习笔记之八十五、JavaWeb_其他的Servlet监听器
2019-03-20 19:17
459 查看
JavaWeb_其他的Servlet监听器
其他的Servlet监听器
- 1.XxxtAttributeListener
1)监听 ServletContext,HttpSession,ServletRequest 中添加属性。替换属性。移除属性的事件监听器。
2)以 ServletRequestAttributeListener 为例:
//添加属性时被调用 public void attributeAdded(ServletRequestAttributeEvent srae) { System.out.println("向 request 中添加了一个属性..."); } //移除属性时被调用 @Override public void attributeRemoved(ServletRequestAttributeEvent srae) { System.out.println("从 request 中移除了一个属性..."); } //替换属性时被调用. @Override public void attributeReplaced(ServletRequestAttributeEvent srae) { System.out.println("request 中属性替换了..."); }
.
3)这三个 ServletContextAttributeListener,ServletRequestAttributeListener,HttpSessionAttributeListener 监听器较少被使用。
4)API:ServletRequestAttributeEvent:
> getName():获取属性的名字。
> getValue():获取属性的值。
- 2.HttpSessionBindingListener
1)监听实现了该接口的 Java 类的对象被绑定到 session 或从 session 中解除绑定的事件。
//当前对象被绑定到 session 时调用该方法 public void valueBound(HttpSessionBindingEvent event) //当前对象从 session 中解除绑定调用该方法 public void valueUnbound(HttpSessionBindingEvent event)
.
2)注意:该监听器不需要在 web.xml 文件中进行配置。
3)HttpSessionBindingEvent:
> getName():获取属性的名字。
> getValue():获取属性的值。
> getSession():获取session对象。
4)该监听器较少被使用。
- 3.HttpSessionActivationListener
1)监听实现了该接口和 Serializable 接口的 Java 类的对象随 session 钝化和活化事件。
> 活化:从磁盘中读取 session 对象
> 钝化:向磁盘中写入 session 对象
> session 对象存储在tomcat 服务器的 work\Catalina\localhost\contextPath 目录下. SESSION.SER
2)该监听器不需要在 web.xml 文件中进行配置。
3)
//在活化之后被调用. public void sessionDidActivate(HttpSessionEvent se) //在钝化之前被调用 public void sessionWillPassivate(HttpSessionEvent se) HttpSessionEvent:getSession()
.
4)该监听器较少被使用。
- 4.代码实现:
test-attribute-listener.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% request.setAttribute("name", "ABCD"); System.out.println("-------------------------"); request.setAttribute("name", "DEFG"); System.out.println("-------------------------"); request.removeAttribute("name"); System.out.println("-------------------------"); %> </body> </html>
HttpSessionBindingListener.jsp
<%@page import="java.util.Date"%> <%@page import="com.xs.javaweb.test.Customer"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h4>HttpSessionBindingListener</h4> <%-- Customer customer = new Customer(); session.setAttribute("customer", customer); System.out.println("------------------------"); session.removeAttribute("customer"); --%> <% Customer customer = (Customer)session.getAttribute("customer"); if(customer == null){ customer = new Customer(); customer.setTime("" + new Date()); session.setAttribute("customer", customer); System.out.println("创建一个新的 Customer 对象" + customer + ",并放入到 session 中。"); } else { System.out.println("从 session 中读取到 Customer 对象:" + customer); } %> </body> </html>
Customer.java
/** * All rights Reserved,Designed By XS * @Title: Customer.java * @Package com.xs.javaweb.test * @Description: TODO * @author: XS * @date: 2019年3月20日 下午4:49:29 * @version V1.0 */ package com.xs.javaweb.test; import java.io.Serializable; import javax.servlet.http.HttpSessionActivationListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingListener; import javax.servlet.http.HttpSessionEvent; /** * @ClassName: Customer * @Description: TODO * @author: XS * @date: 2019年3月20日 下午4:49:29 * @version V1.0 */ public class Customer implements HttpSessionBindingListener, HttpSessionActivationListener, Serializable { private String time; /** * @param time: the time to set */ public void setTime(String time) { this.time = time; } /** * <p>Title: toString</p> * <p>Description: </p> * @see java.lang.Object#toString() * @return */ @Override public String toString() { return "Customer [time=" + time + "]"; } /** * @Fields serialVersionUID: TODO */ private static final long serialVersionUID = 1L; /** * <p>Title: valueBound</p> * <p>Description: </p> * @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent) * @param event */ @Override public void valueBound(HttpSessionBindingEvent event) { System.out.println("绑定到 session"); Object value = event.getValue(); System.out.println(value == this); System.out.println(event.getName()); } /** * <p>Title: valueUnbound</p> * <p>Description: </p> * @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent) * @param event */ @Override public void valueUnbound(HttpSessionBindingEvent event) { System.out.println("从 session 中解除绑定。"); } /** * <p>Title: sessionWillPassivate</p> * <p>Description: </p> * @see javax.servlet.http.HttpSessionActivationListener#sessionWillPassivate(javax.servlet.http.HttpSessionEvent) * @param se */ @Override public void sessionWillPassivate(HttpSessionEvent se) { System.out.println("从内存中写到磁盘上。"); } /** * <p>Title: sessionDidActivate</p> * <p>Description: </p> * @see javax.servlet.http.HttpSessionActivationListener#sessionDidActivate(javax.servlet.http.HttpSessionEvent) * @param se */ @Override public void sessionDidActivate(HttpSessionEvent se) { System.out.println("从磁盘中读取出来。"); } }
TestAttributeListener.java
/** * All rights Reserved,Designed By XS * @Title: HelloServletContextListener.java * @Package com.xs.javaweb.test * @Description: TODO * @author: XS * @date: 2019年3月20日 上午9:58:42 * @version V1.0 */ package com.xs.javaweb.test; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; /** * @ClassName: HelloServletContextListener * @Description: TODO * @author: XS * @date: 2019年3月20日 上午9:58:42 * @version V1.0 */ public class HelloServletContextListener implements ServletContextListener, ServletRequestListener, HttpSessionListener { /** * <p>Title: contextInitialized</p> * <p>Description: </p> * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent) * @param sce */ @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("ServletContext 对象被创建。" + sce.getServletContext()); } /** * <p>Title: contextDestroyed</p> * <p>Description: </p> * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent) * @param sce */ @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("ServletContext 对象被销毁。" + sce.getServletContext()); } /** * <p>Title: requestInitialized</p> * <p>Description: </p> * @see javax.servlet.ServletRequestListener#requestInitialized(javax.servlet.ServletRequestEvent) * @param sre */ @Override public void requestInitialized(ServletRequestEvent sre) { System.out.println("ServletRequest 对象被创建。" + sre.getServletRequest()); } /** * <p>Title: requestDestroyed</p> * <p>Description: </p> * @see javax.servlet.ServletRequestListener#requestDestroyed(javax.servlet.ServletRequestEvent) * @param sre */ @Override public void requestDestroyed(ServletRequestEvent sre) { System.out.println("ServletRequest 对象被销毁。" + sre.getServletRequest()); } /** * <p>Title: sessionCreated</p> * <p>Description: </p> * @see javax.servlet.http.HttpSessionListener#sessionCreated(javax.servlet.http.HttpSessionEvent) * @param se */ @Override public void sessionCreated(HttpSessionEvent se) { System.out.println("HttpSession 对象被创建。" + se.getSession()); } /** * <p>Title: sessionDestroyed</p> * <p>Description: </p> * @see javax.servlet.http.HttpSessionListener#sessionDestroyed(javax.servlet.http.HttpSessionEvent) * @param se */ @Override public void sessionDestroyed(HttpSessionEvent se) { System.out.println("HttpSession 对象被销毁。" + se.getSession()); } }
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> <listener> <listener-class>com.xs.javaweb.test.TestAttributeListener</listener-class> </listener> </web-app>
相关文章推荐
- [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)
- Javaweb学习笔记三 Servlet的线程安全
- Javaweb学习笔记一 查看Servlet容器属性
- javaweb学习笔记:Servlet开发基础
- JavaWeb学习笔记之servlet
- javaweb-servlet学习笔记(1)
- J2EE与中间件 学习笔记2 Web组件 Servlet过滤器 监听器
- JavaWeb同步学习笔记之八十八、JavaWeb_使用fileupload组件
- 【JAVAWEB学习笔记】13_servlet
- JavaWeb学习笔记-servlet-03-HttpServlet
- javaweb学习笔记:Servlet的运行过程详解
- JavaWeb同步学习笔记之一百、JavaWeb_国际化之NumberFormat
- [学习笔记]Servlet开发(2)过滤器和监听器
- JavaWeb学习笔记-servlet-01-概述
- JavaWeb学习笔记:ServletConfig()和ServletContext()
- javaweb学习笔记:Servlet开发中需要注意的几个知识点
- JavaWeb同步学习笔记之九十、JavaWeb_文件上传案例_JS代码
- javaweb-servlet学习笔记(3)
- JavaWeb同步学习笔记之九十二、JavaWeb_文件上传案例_总体步骤分析
- JavaWeb同步学习笔记之九十五、JavaWeb_文件上传案例_复习