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