JavaWeb中Servlet技术之监听器

xiaoxiao2021-02-28  116

Listener监听器

Listener是什么(怎么理解监听)

它是一个接口,可以监听客户端的请求、服务端的操作等。注意:内容有我来实现它需要注册(web.xml中注册)监听中的方法会在特殊事件发生时调用

javaWeb中一共有8个监听

事件源,就是三大域 ServletContext 生命周期监听 ServletContextListener,有两个方法,一个出生时调用,一个死亡时调用属性监听 ServletContextAttributeListener,有三个方法,分别在添加、覆盖、移除时调用HttpSession 生命周期监听 HttpSessionListener,有两个方法,一个出生时调用,一个死亡时调用属性监听 HttpSessionAttributeListener,有三个方法,分别在添加、覆盖、移除时调用ServletRequest 生命周期监听 ServletRequestListener,有两个方法,一个出生时调用,一个死亡时调用属性监听 ServletRequestAttributeListener,有三个方法,分别在添加、覆盖、移除时调用

代码实现步骤(生命周期监听)

实现ServletContextListener

创建一个类,实现ServletContextListener接口重写生命周期方法 contextDestroyed(ServletContextEvent sce) 销毁时调用 contextInitialized(ServletContextEvent sce) 创建时调用ServletContextEvent最主要的就是拿到事件源通过getServletContext() 方法作用(重点) 在项目中,可能有一些tomcat需要的启动数据,可以在contextInitialized方法方法中初始化

HttpSessionListener

创建一个类,实现HttpSessionListener接口重写生命周期方法 sessionCreated(HttpSessionEvent se) 创建时调用HttpSessionEvent拿到事件源,通过getSession() 方法sessionDestroyed(HttpSessionEvent se) 销毁时调用

ServletRequestListener

创建一个类,实现ServletRequestListener接口重写生命周期方法 requestDestroyed(ServletRequestEvent sre) 销毁时调用requestInitialized(ServletRequestEvent sre) 创建时调用ServletRequestEvent拿到事件源,getServletRequest()和getServletContext()方法

代码实现步骤(属性监听)(不常用)

ServletContextAttributeListener 创建一个类,实现ServletRequestListener接口重写方法 attributeAdded(ServletContextAttributeEvent scab) 向ServletCOntext中添加属性时调用getName()getValue()getServletContext()等方法attributeRemoved(ServletContextAttributeEvent scab) 向ServletCOntext中移除属性时调用getName()getValue()getServletContext()等方法attributeReplaced(ServletContextAttributeEvent scab) 向ServletCOntext中添覆盖属性时调用getName()getValue()getServletContext()等方法其他的原理一样,这个请自己动手扩展一下

感知监听器(都与HttpSession相关)

它用来添加到JavaBean中这两个监听器都不要在web.xml中注册 HttpSessionBindingListener JavaBean类去实现这个接口,并重写方法valueBound(HttpSessionBindingEvent event) 加载到session中时调用HttpSessionBindingEvent下的方法 getSession() getName()getValue()valueUnbound(HttpSessionBindingEvent event) 从session中移除时会被调用HttpSessionBindingEvent下的方法 getSession() getName()getValue()作用:javaBean这个了知道什么时候被session加载,什么时候被session抛弃

Session的钝化和活化

我们知道当把数据存储到session中时,服务器关闭在重启的时候,我们浏览器访问数据还是可以访问到的 因为服务器会在服务器关闭的时候把所有session存到硬盘的SESSIONS.ren中,等服务再次启动时再从SESSIONS 中拿到数据,这也是session死而复生的秘密(钝化和活化)

在项目中为了节约服务器内存而使用钝化和活化

<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="true" maxActiveSessions="1"> <Store className="org.apache.catalina.session.FileStore" directory="指定文件地址"> </Store> </Manager>

HttpSessionActivationListener

javabean类实现这个接口,并重写钝化和活化调用时的方法方法

sessionDidActivate(HttpSessionEvent se) 活化时调用sessionWillPassivate(HttpSessionEvent se) 钝化时调用

注意:javabean如果就这样随着钝化的话这个类是不会保存在硬盘上的他会死掉,没有钝化的”通行证”。想活下来就要序列化。就是实现java.io.Serializable

转载请注明原文地址: https://www.6miu.com/read-41584.html

最新回复(0)