Java Web学习(38):Listener学习(二)

    xiaoxiao2026-04-18  3

            监听器分类

            继续接着监听器的分类进行,来看第二种分类中的第二小类。

           ServletContextAttributeListener实例

           MyServletContextAttributeListener.java源代码:

    package com.listener; import javax.servlet.ServletContextAttributeEvent; import javax.servlet.ServletContextAttributeListener; import javax.servlet.annotation.WebListener; /**  * Application Lifecycle Listener implementation class MyServletContextAttributeListener  *  */ @WebListener public class MyServletContextAttributeListener implements ServletContextAttributeListener {     /**      * Default constructor.       */     public MyServletContextAttributeListener() {         } /**      * @see ServletContextAttributeListener#attributeAdded(ServletContextAttributeEvent)      */     public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent)  {      System.out.println("ServletContext_attributeAdded:"+servletContextAttributeEvent.getName());     } /**      * @see ServletContextAttributeListener#attributeRemoved(ServletContextAttributeEvent)      */     public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent)  {      System.out.println("ServletContext_attributeRemoved:"+servletContextAttributeEvent.getName());     } /**      * @see ServletContextAttributeListener#attributeReplaced(ServletContextAttributeEvent)      */     public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent)  {      System.out.println("ServletContext_attributeReplaced:"+servletContextAttributeEvent.getName());     } }

           HttpSessionAttributeListener实例

           MyHttpSessionAttributeListener.java源代码:

    package com.listener; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; /**  * Application Lifecycle Listener implementation class MyHttpSessionAttributeListener  *  */ @WebListener public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener {     /**      * Default constructor.       */     public MyHttpSessionAttributeListener() {         } /**      * @see HttpSessionAttributeListener#attributeAdded(HttpSessionBindingEvent)      */     public void attributeAdded(HttpSessionBindingEvent sessionBindingEvent)  {      System.out.println("HttpSession_attributeAdded:"+sessionBindingEvent.getName());     } /**      * @see HttpSessionAttributeListener#attributeRemoved(HttpSessionBindingEvent)      */     public void attributeRemoved(HttpSessionBindingEvent sessionBindingEvent)  {      System.out.println("HttpSession_attributeRemoved:"+sessionBindingEvent.getName());     } /**      * @see HttpSessionAttributeListener#attributeReplaced(HttpSessionBindingEvent)      */     public void attributeReplaced(HttpSessionBindingEvent sessionBindingEvent)  {           System.out.println("HttpSession_attributeReplaced:"+sessionBindingEvent.getName());     } }

           ServletRequestAttributeListener实例

           ServletRequestAttributeListener.java源代码:

    package com.listener; import javax.servlet.ServletRequestAttributeEvent; import javax.servlet.ServletRequestAttributeListener; import javax.servlet.annotation.WebListener; /**  * Application Lifecycle Listener implementation class MyServletRequestAttributeListener  *  */ @WebListener public class MyServletRequestAttributeListener implements ServletRequestAttributeListener {     /**      * Default constructor.       */     public MyServletRequestAttributeListener() {              } /**      * @see ServletRequestAttributeListener#attributeRemoved(ServletRequestAttributeEvent)      */     public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent)  {      System.out.println("ServletRequest_attributeRemoved:"+servletRequestAttributeEvent.getName());     } /**      * @see ServletRequestAttributeListener#attributeAdded(ServletRequestAttributeEvent)      */     public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent)  {      System.out.println("ServletRequest_attributeAdded:"+servletRequestAttributeEvent.getName());     } /**      * @see ServletRequestAttributeListener#attributeReplaced(ServletRequestAttributeEvent)      */     public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent)  {      System.out.println("ServletRequest_attributeReplaced:"+servletRequestAttributeEvent.getName());     } }

           我们使用的JSP页面包括:

           index.jsp页面:

    <%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body>      <h1>我是JSP页面</h1>      <hr/>      <button οnclick="location.href='<%=request.getContextPath()%>/init.jsp';">Init</button>      <button οnclick="location.href='<%=request.getContextPath()%>/destory.jsp';">Destory</button> </body> </html>

           init.jsp页面:

    <%@page import="com.domain.Admin"%> <%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body>       <h1>这是初始化值的页面</h1>       <hr/>              <%            request.setAttribute("requestName", "requestValue");            request.getSession().setAttribute("sessionName", "sessionValue");            request.getSession().getServletContext().setAttribute("contextName", "contextValue");       %>              <button οnclick="location.href='<%=request.getContextPath()%>/init.jsp';">Init</button>       <button οnclick="location.href='<%=request.getContextPath()%>/destory.jsp';">Destory</button> </body> </html>

           destory.jsp页面:

    <%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body>       <h1>这是销毁值的页面</h1>       <hr/>              <%            request.removeAttribute("requestName");            request.getSession().removeAttribute("sessionName");            request.getSession().getServletContext().removeAttribute("contextName");       %>              <button οnclick="location.href='<%=request.getContextPath()%>/init.jsp';">Init</button>       <button οnclick="location.href='<%=request.getContextPath()%>/destory.jsp';">Destory</button> </body> </html>

           运行结果:

           我们通过访问index页面开始:

           

           点击init按钮:

            

           再次点击init按钮:

           

           点击destory按钮:

           

           我们来看第三小类。

           session钝化机制

           本质就在于把服务器中不经常使用的Session对象暂时序列化到系统文件系统或者数据库系统中,当使用时反序

    列化到内存中,整个过程由服务器自动完成。使用的并不是很多。

           示意图:

           

           Tomcat中两种session钝化管理器

           session钝化机制由SessionManager管理。

           第一种:

           

           第二种:

           

           Servlet规范

           包括两个监听器,都不需要再web.xml中注册。

           HttpSessionBindingListener监听器

           绑定:vlaueBound()方法

           解除绑定:valueUnbound()方法

           HttpSessionActivationListener监听器

           钝化:sessionWillPassivate()方法

           活化:sessionDidActivate()方法

           只提供上述两个监听器的实例源码:

    package com.domain; import java.io.Serializable; import javax.servlet.http.HttpSessionActivationListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingListener; import javax.servlet.http.HttpSessionEvent; public class User implements HttpSessionBindingListener,HttpSessionActivationListener,Serializable { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public void valueBound(HttpSessionBindingEvent httpsessionbindingevent) { System.out.println("valueBound Name:"+httpsessionbindingevent.getName()); } public void valueUnbound(HttpSessionBindingEvent httpsessionbindingevent) { System.out.println("valueUnbound Name:"+httpsessionbindingevent.getName()); } public void sessionWillPassivate(HttpSessionEvent httpsessionevent) { System.out.println("sessionWillPassivate "+httpsessionevent.getSource()); } public void sessionDidActivate(HttpSessionEvent httpsessionevent) { System.out.println("sessionDidActivate "+httpsessionevent.getSource()); } }       我们在init页面和destory页面使用request对象添加User对象实例,就可以测试了。

    转载请注明原文地址: https://ju.6miu.com/read-1308983.html
    最新回复(0)