JavaWeb监听器Listener
在监听器的对象作用领域中一般涉及监听主体(监听器)、监听客体(事件源)、监听事件(事件)。
在警察监听小偷中,警察是监听器,小偷是事件源,偷东西是时间。
JavaWeb中监听器的事件源(ServletContext、HttpSession、ServletRequest、JavaBean)
1、ServletContext
- 生命周期监听:ServletContextListener
- 属性监听:ServletContextAttributeListener
2、HttpSession
- 生命周期监听:HttpSessionListener
- 属性监听:HttpSessionAttributeListener
3、ServletReques
- 生命周期监听:ServletRequestListener
- 属性监听:ServletRequestAttributeListener
4、JaveBean
- 感知监听:HttpSessionBindingListener
- 钝化活化监听:HttpSessionActivationListener
事件源为域对象的监听器的实现:
- 写一个监听器类,必须实现某个监听器接口;
- 在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>
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( )方法,
<Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1" >
<Store className="org.apache.catalina.session.FileStore" directory="mysession" />
</Manager>
</Context>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()方法序列化到硬盘。出现如下图所示,表示成功钝化:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。