Servlet监听器示例
2016-04-09 17:26
465 查看
1.ServletContextListener ServletContext生命周期监听器
2.ServletContextAttributeListener ServletContext属性改变监听器
3.HttpSessionListener HttpSession生命周期监听器
4.HttpSessionAttributeListener HttpSession属性监听器
5.HttpSessionBindingListener 当HttpSession属性值为HttpSessionBindingListener实例且此属性发生改变的监听器
不需要在web.xml中配置Listener
6.HttpSessionActivationListener HttpSession对象迁移监听器
测试类Servlet对于监听器演示
7. ServletRequestListener ServletRequest的生命周期监听器。
8.ServletRequestAttributeListener ServletRequest的属性改变监听器
输出结果:
ServletRequestListener requestInitialized
执行Servlet init()
ServletRequestAttributeListener attributeReplaced name = org.apache.catalina.ASYNC_SUPPORTED value= true
执行MyFilter doFilter
执行MyFilter doFilter before
执行MyFilter1 doFilter
执行MyFilter1 doFilter before
MyHttpSessionListener sessionCreated
取得session时,使用了HttpSessionListener监听器会触发调用sessionCreated
ServletRequestAttributeListener attributeAdded name = age value= 100
ServletRequestAttributeListener attributeReplaced name = age value= 100
ServletRequestAttributeListener attributeRemoved name = age value= 20
过期时间:1800
HttpSessionAttributeListener attributeAdded name=login value=zhangsan
HttpSessionAttributeListener attributeReplaced
HttpSessionAttributeListener attributeAdded name=login value=zhangsan
HttpSessionBindingListener valueBound name=mhsbl value=com.zghw.servlet.demo.MyHttpSessionBindingListener@78472af8
过期时间:1800
HttpSessionAttributeListener attributeAdded name=mhsbl value=com.zghw.servlet.demo.MyHttpSessionBindingListener@78472af8
过期时间:1800
HttpSessionAttributeListener attributeAdded name=mhsal value=com.zghw.servlet.demo.MyHttpSessionActivationListener@575c049d
执行Servlet service
执行MyFilter1 doFilter after
执行MyFilter doFilter after
ServletRequestListener requestDestroyed
HttpSessionActivationListener sessionWillPassivate sessionId=57431BBAB46F393DFE45073566DFDAA9
HttpSessionBindingListener valueBound name=mhsbl value=com.zghw.servlet.demo.MyHttpSessionBindingListener@78472af8
HttpSessionAttributeListener attributeRemoved
MyHttpSessionListener sessionDestroyed
销毁前userName=lisi
HttpSessionAttributeListener attributeRemoved
HttpSessionAttributeListener attributeRemoved
<listener> <listener-class>com.zghw.servlet.demo.MyServletContextListener</listener-class> </listener>
package com.zghw.servlet.demo; import java.util.Enumeration; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; /** * ServletContextListener时生命周期监听器,如果想要知道何时Web应用程序已经初始化或即将结束销毁, * 可以实现ServletContextListener: * @author zghw * */ public class MyServletContextListener implements ServletContextListener { /** * Web应用程序初始化后,监听ServletContext事件做些处理。 * ServletContextEvent封装了ServletContext对象,可以通过getServletContext方法取得 * ServletContext,可以使用ServletContext做些处理。 * 在整个Web应用程序生命周期,Servlet需要共享的资料可以设置ServletContext属性。由于ServletContext * 在Web应用程序存活期间都会一直存在,所以设置为ServletContext属性的数据,除非主动移除,否则也是一直存活于 * Web应用程序中。 */ @Override public void contextInitialized(ServletContextEvent sce) { ServletContext servletContext=sce.getServletContext(); Enumeration<String> params=servletContext.getInitParameterNames(); while(params.hasMoreElements()){ String name=params.nextElement(); System.out.println("初始化参数:"+name+" 值: "+servletContext.getInitParameter(name)); } System.out.println("执行MyServletContextListener contextInitialized"); } /** * Web应用程序即将销毁前,监听ServletContext事件做些处理。 */ @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("执行MyServletContextListener contextDestroyed"); } }
2.ServletContextAttributeListener ServletContext属性改变监听器
<listener> <listener-class>com.zghw.servlet.demo.MyServletContextAttributeListener</listener-class> </listener>
package com.zghw.servlet.demo; import javax.servlet.ServletContext; import javax.servlet.ServletContextAttributeEvent; import javax.servlet.ServletContextAttributeListener; /** * 当Web应用程序中的ServletContext的属性事件发生改变时,通知监听器做些事情。 * @author zghw * */ public class MyServletContextAttributeListener implements ServletContextAttributeListener { /** * 当向ServletContext中调用setAttribute添加一个不存在的属性时, * 该监听器得到事件ServletContextAttributeEvent,做一些处理 * ServletContextAttributeEvent继承了ServletContextEvent可以获得ServletContext * 主要获得添加的值对象,进行处理。event.getName() event.getValue() * key 和 value的方式出现。 */ @Override public void attributeAdded(ServletContextAttributeEvent event) { ServletContext servletContext=event.getServletContext(); System.out.println(" MyServletContextAttributeListener attributeAdded 添加后 " + "name="+event.getName() +", 值="+event.getValue()); } /** * 当属性移除时, */ @Override public void attributeRemoved(ServletContextAttributeEvent event) { System.out.println(" MyServletContextAttributeListener attributeRemoved 移除后 name="+event.getName() +", 值="+event.getValue()); } /** * 当属性被替换时。 */ @Override public void attributeReplaced(ServletContextAttributeEvent event) { System.out.println(" MyServletContextAttributeListener attributeReplaced 替换后 name="+event.getName() +", 值="+event.getValue()); } }
3.HttpSessionListener HttpSession生命周期监听器
<listener> <listener-class>com.zghw.servlet.demo.MyHttpSessionListener</listener-class> </listener>
package com.zghw.servlet.demo; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; /** * HttpSession生命周期监听器,HttpSession的创建及销毁 * @author zghw * */ public class MyHttpSessionListener implements HttpSessionListener { /** * 创建完HttpSession对象时触发监听器。 */ @Override public void sessionCreated(HttpSessionEvent se) { System.out.println("MyHttpSessionListener sessionCreated"); } /** * 即将销毁HttpSession前时触发监听器。 * 可以从HttpSessionEvent中取得HttpSession对象,可以处理一些HttpSession的信息。 * 比如:当浏览器关闭时,session会被web容器回收,回收的时间时session的过期时间。。 */ @Override public void sessionDestroyed(HttpSessionEvent se) { System.out.println("MyHttpSessionListener sessionDestroyed"); String userName=(String)se.getSession().getAttribute("login"); System.out.println("销毁前userName="+userName); } }
4.HttpSessionAttributeListener HttpSession属性监听器
<listener> <listener-class>com.zghw.servlet.demo.MyHttpSessionAttributeListener</listener-class> </listener>
package com.zghw.servlet.demo; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; /** * HttpSession属性监听器,用于监听当属性操作变化事件。 * @author zghw * */ public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener { /** * 当向session添加属性值时, */ @Override public void attributeAdded(HttpSessionBindingEvent event) { HttpSession hs = event.getSession(); System.out.println("过期时间:"+hs.getMaxInactiveInterval()); System.out.println("HttpSessionAttributeListener attributeAdded" + " name="+event.getName()+" value="+event.getValue()); //替换一个属性 if(event.getValue().equals("zhangsan")){ hs.setAttribute(event.getName(), "lisi"); } } /** * HttpSession属性被移除后触发监听 */ @Override public void attributeRemoved(HttpSessionBindingEvent event) { System.out.println("HttpSessionAttributeListener attributeRemoved"); } /** * HttpSession属性被替换后触发监听 */ @Override public void attributeReplaced(HttpSessionBindingEvent event) { System.out.println("HttpSessionAttributeListener attributeReplaced"); System.out.println("HttpSessionAttributeListener attributeAdded" + " name="+event.getName()+" value="+event.getValue()); } }
5.HttpSessionBindingListener 当HttpSession属性值为HttpSessionBindingListener实例且此属性发生改变的监听器
不需要在web.xml中配置Listener
package com.zghw.servlet.demo; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingListener; /** * 当HttpSession属性值为HttpSessionBindingListener实例且此属性发生改变的监听器,监听器触发事件 * 不需要在web.xml中配置Listener * @author zghw * */ public class MyHttpSessionBindingListener implements HttpSessionBindingListener { /** * 当HttpSession添加属性为HttpSessionBindingListener实例,则会触发这个事件 */ @Override public void valueBound(HttpSessionBindingEvent event) { System.out.println("HttpSessionBindingListener valueBound name="+event.getName()+" value="+event.getValue()); } /** * 当HttpSession移除属性为HttpSessionBindingListener实例,则会触发这个事件 */ @Override public void valueUnbound(HttpSessionBindingEvent event) { System.out.println("HttpSessionBindingListener valueBound name="+event.getName()+" value="+event.getValue()); } }
6.HttpSessionActivationListener HttpSession对象迁移监听器
<Context> <!-- 持久化session 如果这个session属性对象是HttpSessionActivationListener则1分钟后,进行持久化到硬盘中 --> <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1"> <!-- 存放目录 --> <Store className="org.apache.catalina.session.FileStore" directory="../gacl"/> </Manager> </Context>
package com.zghw.servlet.demo; import java.io.Serializable; import javax.servlet.http.HttpSessionActivationListener; import javax.servlet.http.HttpSessionEvent; /** * 对象迁移监听器,很多情况不会使用,在分布式环境时会使用,应用程序的对象可能分散在多个JVM中, * 当HttpSession要从一个JVM迁移至另一个JVM时,必须现在原来的JVM上序列化所有的属性对象。 * 在这之前若属性对象有实现HttpSessionActivationListener,就会调用sessionWillPassivate方法 * 而迁移至另一个JVM后,就会对所有属性对象做反序列化,此时会调用sessionDidActivate()方法。 * @author zghw * */ public class MyHttpSessionActivationListener implements HttpSessionActivationListener,Serializable{ private static final long serialVersionUID = 1L; private String name ; /** * 在进行序列化MyHttpSessionActivationListener对象前,触发监听器处理,可以查看META-INF/context.xml用来持久化该对象的配置 */ @Override public void sessionWillPassivate(HttpSessionEvent se) { System.out.println("HttpSessionActivationListener sessionWillPassivate sessionId="+se.getSession().getId()); } /** * 当HttpSession创建激活这个MyHttpSessionActivationListener对象属性后,触发监听器处理,可以查看META-INF/context.xml用来持久化该对象的配置 */ @Override public void sessionDidActivate(HttpSessionEvent se) { System.out.println("HttpSessionActivationListener sessionDidActivate sessionId="+se.getSession().getId()); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
测试类Servlet对于监听器演示
package com.zghw.servlet.demo; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import java.util.*; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class MyServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void init() throws ServletException { System.out.println("执行Servlet init()"); } public void destroy() { System.out.println("执行Servlet destroy()"); } public void doGet(HttpServletRequest request, HttpServletResponse respose) throws ServletException, IOException { HttpSession session = request.getSession(); System.out.println("取得session时,使用了HttpSessionListener监听器会触发调用sessionCreated"); String username = request.getParameter("userName"); String age = request.getParameter("age"); //使用ServletRequestAttributeListener监听器监听属性改变 request.setAttribute("age", 100); request.setAttribute("age", 20); request.removeAttribute("age"); if(username!=null){ String info=(String)session.getAttribute(username); if(info==null){ session.setAttribute("login",username); //当session绑定了SessionBindingListener监听器会触发SessionBindingListener的valueBound方法 MyHttpSessionBindingListener mhsbl=new MyHttpSessionBindingListener(); session.setAttribute("mhsbl", mhsbl); // MyHttpSessionActivationListener mhsal=new MyHttpSessionActivationListener(); session.setAttribute("mhsal", mhsal); //设置session活动时间,当session清空后就会触发HttpSessionListener sessionDestroyed session.setMaxInactiveInterval(70); } } System.out.println("执行Servlet service"); respose.setContentType("text/html;charset=UTF-8"); PrintWriter out = respose.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>"); out.println("this is a servlet out"); out.println("</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello Servlet : " + getServletInfo() + "</h1>"); out.println("<p>"); out.println("<h3>ServletConfig</h3>"); out.println("Servlet名字:" + this.getServletName()); out.println("<br/>"); Enumeration<String> initParamNames = this.getInitParameterNames(); while (initParamNames.hasMoreElements()) { String name = initParamNames.nextElement(); out.print("初始化参数: name = " + name + " , value = " + this.getInitParameter(name)); out.println("<br/>"); } ServletContext servletContext = this.getServletContext(); out.println("<h3>servletContext</h3>"); out.println("</p>"); out.println("</body>"); out.println("</html>"); //销毁session //System.out.println("即将销毁session"); //session.invalidate(); } }
7. ServletRequestListener ServletRequest的生命周期监听器。
<listener> <listener-class>com.zghw.servlet.demo.MyServletRequestListener</listener-class> </listener>
package com.zghw.servlet.demo; import javax.servlet.ServletContext; import javax.servlet.ServletRequest; import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; /** * ServletRequest的生命周期监听器。 * @author zghw * */ public class MyServletRequestListener implements ServletRequestListener { /** * ServletRequest对象创建后 */ @Override public void requestDestroyed(ServletRequestEvent sre) { ServletContext sc=sre.getServletContext(); ServletRequest sr=sre.getServletRequest(); System.out.println("ServletRequestListener requestDestroyed"); } /** * ServletRequest对象销毁前 */ @Override public void requestInitialized(ServletRequestEvent sre) { System.out.println("ServletRequestListener requestInitialized"); } }
8.ServletRequestAttributeListener ServletRequest的属性改变监听器
<listener> <listener-class>com.zghw.servlet.demo.MyServletRequestAttributeListener</listener-class> </listener>
package com.zghw.servlet.demo; import javax.servlet.ServletRequestAttributeEvent; import javax.servlet.ServletRequestAttributeListener; /** * ServletRequest的属性改变时,触发监听器执行事件 * @author zghw * */ public class MyServletRequestAttributeListener implements ServletRequestAttributeListener { /** * ServletRequest添加属性后触发 */ @Override public void attributeAdded(ServletRequestAttributeEvent srae) { System.out.println("ServletRequestAttributeListener attributeAdded name = " + srae.getName() + " value= "+ srae.getValue()); } /** * ServletRequest移除属性前触发 */ @Override public void attributeRemoved(ServletRequestAttributeEvent srae) { System.out.println("ServletRequestAttributeListener attributeRemoved name = " + srae.getName() + " value= "+ srae.getValue()); } /** * ServletRequest属性替换后触发 */ @Override public void attributeReplaced(ServletRequestAttributeEvent srae) { System.out.println("ServletRequestAttributeListener attributeReplaced name = " + srae.getName() + " value= "+ srae.getValue()); } }
输出结果:
ServletRequestListener requestInitialized
执行Servlet init()
ServletRequestAttributeListener attributeReplaced name = org.apache.catalina.ASYNC_SUPPORTED value= true
执行MyFilter doFilter
执行MyFilter doFilter before
执行MyFilter1 doFilter
执行MyFilter1 doFilter before
MyHttpSessionListener sessionCreated
取得session时,使用了HttpSessionListener监听器会触发调用sessionCreated
ServletRequestAttributeListener attributeAdded name = age value= 100
ServletRequestAttributeListener attributeReplaced name = age value= 100
ServletRequestAttributeListener attributeRemoved name = age value= 20
过期时间:1800
HttpSessionAttributeListener attributeAdded name=login value=zhangsan
HttpSessionAttributeListener attributeReplaced
HttpSessionAttributeListener attributeAdded name=login value=zhangsan
HttpSessionBindingListener valueBound name=mhsbl value=com.zghw.servlet.demo.MyHttpSessionBindingListener@78472af8
过期时间:1800
HttpSessionAttributeListener attributeAdded name=mhsbl value=com.zghw.servlet.demo.MyHttpSessionBindingListener@78472af8
过期时间:1800
HttpSessionAttributeListener attributeAdded name=mhsal value=com.zghw.servlet.demo.MyHttpSessionActivationListener@575c049d
执行Servlet service
执行MyFilter1 doFilter after
执行MyFilter doFilter after
ServletRequestListener requestDestroyed
HttpSessionActivationListener sessionWillPassivate sessionId=57431BBAB46F393DFE45073566DFDAA9
HttpSessionBindingListener valueBound name=mhsbl value=com.zghw.servlet.demo.MyHttpSessionBindingListener@78472af8
HttpSessionAttributeListener attributeRemoved
MyHttpSessionListener sessionDestroyed
销毁前userName=lisi
HttpSessionAttributeListener attributeRemoved
HttpSessionAttributeListener attributeRemoved
相关文章推荐
- 1——A Journey into Microservices
- adb devices指令实例讲解
- Spring学习之代理
- framework4.0 IIS配置支持ashx
- SparseLM Demo示例分析
- HTML中div垂直居中的三种方式
- AVAudioPlayer与AVPlayer播放音频
- SQL优化技巧(Oracle)
- 旅游
- iOS获取相册/相机图片-------自定义获取图片小控件
- a 标签中调用js的几种方法
- Nginx+tomcat负载均衡配置
- TSM 报服务器空间不足 磁带都标记为BAD TYPE
- LeetCode *** 225. Implement Stack using Queues
- OpenGL基础图形编程(六)OpenGL辅组库的基本使用
- 朴素求欧拉函数模板(1787)
- 关于[[NSBundle mainBundle] infoDictionary]里面的那些东西
- 实用站点收集
- git 覆盖本地变化
- mysql获取表行数的方法