首页 > 代码库 > JavaWeb监听器Listener
JavaWeb监听器Listener
在监听器的对象作用领域中一般涉及监听主体(监听器)、监听客体(事件源)、监听事件(事件)。
在警察监听小偷中,警察是监听器,小偷是事件源,偷东西是时间。
JavaWeb中监听器的事件源(ServletContext、HttpSession、ServletRequest、JavaBean)
1、ServletContext
- 生命周期监听:ServletContextListener
- 属性监听:ServletContextAttributeListener
2、HttpSession
- 生命周期监听:HttpSessionListener
- 属性监听:HttpSessionAttributeListener
3、ServletReques
- 生命周期监听:ServletRequestListener
- 属性监听:ServletRequestAttributeListener
4、JaveBean
- 感知监听:HttpSessionBindingListener
- 钝化活化监听:HttpSessionActivationListener
前3个都是域对象监听器,需要在web.xml中配置注册一下。其中ServletContxt域的监听器使用的最多。域对象监听器主要有两个作用:1、监听域对象的“创建”与“销毁”;2、监听域对象中属性的变幻(增、删、改);
第4个不是给session添加,而是给Bean添加。即让Bean类实现监听器接口,然后再把Bean对象添加到session域中。不需要在web.xml中注册。
事件源为域对象的监听器的实现:
- 写一个监听器类,必须实现某个监听器接口;
- 在web.xml中配置一下;
事件源为非域对象的监听器实现只需要写一个监听器类即可
域对象监听器的示例:
监听器类
public class MyServletContextListener implements ServletContextListener,HttpSessionListener,ServletRequestListener { public void contextInitialized(ServletContextEvent sce) { System.out.println("ServletContext创建了..."); } public void contextDestroyed(ServletContextEvent sce) { System.out.println("ServletContext销毁了..."); } public void sessionCreated(HttpSessionEvent se) { System.out.println("HttpSession创建了..."); } public void sessionDestroyed(HttpSessionEvent se) { System.out.println("HttpSession销毁了..."); } public void requestDestroyed(ServletRequestEvent sre) { System.out.println("ServletRequest创建了..."); } public void requestInitialized(ServletRequestEvent sre) { System.out.println("ServletRequest销毁了..."); } }配置web.xml
<listener> <listener-class>cn.edu.jxau.MyServletContextListener</listener-class> </listener>
HttpSessionBindingListener实现类
public class Student implements HttpSessionBindingListener { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void valueBound(HttpSessionBindingEvent event) { System.out.println("Student对象保存到了Session中"); } public void valueUnbound(HttpSessionBindingEvent event) { System.out.println("Student对象从Session中移除了"); } }当Student加到seesion中时,服务器自动调用valueBound( )方法,
当Student对象从session移除时,服务器调用valueUnbound()方法。
活化和钝化
钝化:对象从内存中保存到硬盘
活化:钝化后的对象从硬盘调入内存
当有很多用户访问服务器,我们可以把长时间不活动的用户的session钝化到硬盘中。可以配置Tomcat中session需要钝化的时间间隔,把下面配置文件放到tomcat\conf\catalina\localhost目录下!文件名称为项目名称。
<Context>
<ManagerclassName="org.apache.catalina.session.PersistentManager" maxIdleSwap="1" >
<StoreclassName="org.apache.catalina.session.FileStore" directory="mysession" />
</Manager>
</Context>实现了HttpSessionActivationListener接口的javaBean对象能够感知自己被活化和钝化的事件。JavaBean对象会随着HttpSession对象一起活化钝化
HttpSessionActivationListener实现类:
public class User implements HttpSessionActivationListener,Serializable { public void sessionDidActivate(HttpSessionEvent arg0) { System.out.println("活化了.....从硬盘反序列化到内存"); } public void sessionWillPassivate(HttpSessionEvent arg0) { System.out.println("钝化了.....序列化到硬盘"); } }jsp
<% Object user = session.getAttribute("user"); if(user==null){ user = new User(); session.setAttribute("user", user); out.println("创建了一个User对象:"+user+",并放入session当中"); }else{ out.println("从session中取出了User对象:"+user); } %>往session中放了User对象之后,关闭服务器时,会调用监听器的sessionWillPassivate()方法序列化到硬盘。出现如下图所示,表示成功钝化:
所有的session都保存在该文件中,保存在session中的信息都必须实现Serialization接口(String类也实现了该接口)
当我们再次打开服务器的时候该文件会消失,则活化了。
JavaWeb监听器Listener
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。