JavaWeb监听器
三大组件:
- Servlet
- Listener
- Filter
监听器:
- 它是一个接口,内容由我们来实现;
- 它需要注册,例如注册在按钮上!
- 监听器中的方法,会在特殊事件发生时被调用!
JavaWeb中的监听器
一、生命周期监听与属性监听
ServletContext
生命周期监听:ServletContextListener,它有两个方法,一个在创建时调用,一个在销毁时调用;
- void contextInitialized(ServletContextEvent sce):创建Servletcontext时
- void contextDestroyed(ServletContextEvent sce):销毁Servletcontext时
属性监听:ServletContextAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,
最后一个是在移除属性时调用。
- void attributeAdded(ServletContextAttributeEvent event):添加属性时;
- void attributeReplaced(ServletContextAttributeEvent event):替换属性时;
- void attributeRemoved(ServletContextAttributeEvent event):移除属性时;
HttpSession
生命周期监听:HttpSessionListener,它有两个方法,一个在创建时调用,一个在销毁时调用;
- void sessionCreated(HttpSessionEvent se):创建session时
- void sessionDestroyed(HttpSessionEvent se):销毁session时
属性监听:HttpSessioniAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,
最后一个是在移除属性时调用。
- void attributeAdded(HttpSessionBindingEvent event):添加属性时;
- void attributeReplaced(HttpSessionBindingEvent event):替换属性时
- void attributeRemoved(HttpSessionBindingEvent event):移除属性时
ServletRequest
生命周期监听:ServletRequestListener,它有两个方法,一个在创建时调用,一个在销毁时调用;
- void requestInitialized(ServletRequestEvent sre):创建request时
- void requestDestroyed(ServletRequestEvent sre):销毁request时
属性监听:ServletRequestAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,
最后一个是在移除属性时调用。
- void attributeAdded(ServletRequestAttributeEvent srae):添加属性时
- void attributeReplaced(ServletRequestAttributeEvent srae):替换属性时
- void attributeRemoved(ServletRequestAttributeEvent srae):移除属性时
- javaWeb中完成编写监听器:
- 写一个监听器类:要求必须去实现某个监听器接口;
- 注册,是在web.xml中配置来完成注册!
<listener>
<listener-class>包名.类名</listener-class>
</listener>
- 事件对象:
- ServletContextEvent:ServletContext getServletContext()
- HttpSessionEvent:HttpSession getSession()
- ServletRequest:
- ServletContext getServletContext();
- ServletReques getServletRequest();
- ServletContextAttributeEvent:
- ServletContext getServletContext();
- String getName():获取属性名
- Object getValue():获取属性值
二、感知监听(都与HttpSession相关)
- 它用来添加到JavaBean上,而不是添加到三大域上!
- 这两个监听器都不需要在web.xml中注册!
1、JavaBean中继承HttpSessionBindingListener接口:感知Bean对象是否存放到Session(存放触发,删除触发)
2、JavaBean中继承HttpSessionActivationListener,java.io.Serializable接口:Bean对象是否跟随Session钝化(钝化触发,
活化触发)Serializable接口用来序列化
Session的钝化:即会话在一定时间内没有操作,Session信息自动保存至硬盘中以节省内存空间的技术
--------具体操作:Tomcat7/conf/context.xml添加以下代码,就会将session
保存至Tomcat7\work\Catalina\localhost\项目名\mysession中,如果保存属性有Bean对象
,要将Bean对象实现序列化(即继承java.io.Serializable接口)。
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore" directory="mysession"/>
</Manager>
总结:看视频说Session钝化后保存至硬盘,Session的活化可在浏览器重新打开(即一个会话关闭后)再次取出对象信息;
但实际经验是Session的生命周期只有一个会话,或许是我Tomcat的问题,在会话关闭后重新打开时虽然有保存Session
信息到磁盘,但此时取不出Session信息。