一.监听器生命周期
监听器是web的三个主要组件之一,是接收请求并接收服务端操作的servlet侦听器。
监听器分为以下几类: ((都是接口类,所以必须实现适当的方法) )。
1 .生命周期监听器(3个) ) ) ) ) ) ) )。
ServletContextListener
requestDestroyed在容器启动时调用。 在servlet实例化之前运行
当容器被销毁时,将调用请求初始化。 在servlet被销毁后运行
http会话监听器
在创建http会话后调用sessionCreated
在http会话被销毁之前调用sessionDestroyed。 (session.invalidate ); 方法)
ServletRequestListener
requestDestroyed在创建请求对象后被调用(
请求初始化在请求对象被销毁之前被调用(请求结束)。
2 .属性变更监听器(3个) ) )。
attribute added (servletcontextattributeeventevent ) )将属性添加到APP时调用
从APP中移除属性时调用属性移除(servletcontextattributeeventevent )
attribute replaced (servletcontextattributeeventevent ) )替换应用程序属性时调用
HttpSessionAttributeListener
属性添加(httpsessionbindingeventevent )。
属性移除(httpsessionbindingeventevent )。
属性替换(httpsessionbindingeventevent )。
servletrequestattributelistener
属性添加(servletrequestattributeeventevent )。
属性移除(servletrequestattributeeventevent )。
属性替换(servletrequestattributeeventevent )。
上述侦听器接口不仅参数不同,而且方法名称也相同。 分别监听应用程序、会话和请求对象属性的变化。
3 .在3.session中指定类属性更改侦听程序(2)。
HttpSessionBindingListener
当类实例设置为session域时,将调用value bound (httpsessionbindingeventevent )
从会话域中删除类的实例时,将调用value unbound (httpsessionbindingeventevent )
HttpSessionActivationListener
在对象session序列化(钝化)之后调用sessionwillpassivate (httpsessioneventse )
sessiondidactivate (httpsessioneventse )是在对象session反向序列化)之后调用的
二.测试范例
1 .生命周期拦截:
servletcontentattribute _ listener.Java
1 publicclassservletcontentattribute _ listenerimplementsservletcontextlistener {2/* *
3 *如何实现servletcontextlistener4* @ params ce5* /
6 publicvoidcontextinitialized (servletcontexteventsce ) 7系统. out.println (servletcontextlistener初始化); (9) 9
10 publicvoidcontextdestroyed (servletcontexteventsce ) 11 system.out.println (servletcontextlistener销毁); 12 }13 }
其他两个听众相似,没有反复投稿。
在web.xml中配置
1
2
3
4 study.my listener.servletcontentattribute _ listener
5
6
7
8
9 study.my listener.http session attribute _ listener
10
11
12
13
14 study.my listener.servletrequestattribute _ listener
15
执行结果:
2 .属性拦截:
servletcontentattribute _ listener.Java
1 publicclassservletcontentattribute _ listenerimplementsservletcontextattributelistener {2}
3 /**
4 * servletcontextattributelistener实现方法5 *@paramevent6 */
7 publicvoidattributeadded (servletcontextattributeeventevent )8string Meg=message format.format (servlet content附加属性33666666 9 十)十一
12 publicvoidattributeremoved (servletcontextattributeeventevent ) 13 string Meg=message format.format ) servlet cont删除属性14系统15 ) 16
17替代publicvoidattributereplaced (servletcontextattributeeventevent (18 string Meg=message format.format ) servlet cont 二十)二十一
22 }
另外两个听众很相似,不是女婿收养的。 然后在jsp页面上进行测试
listenerDemo.jsp
1
8
9
10
11
监听器设定12
13
14
22/* * 23 *会话拦截24 */25会话. set attribute (' session name ',' changxiang ' ); 26 session.set attribute (session name,) zxdtk ); 27会话.移除属性(会话名称); 28 session.invalidate (; 29/* * 30 *请求拦截31 */32请求. set attribute ('请求名称',' changxiang ' ); 3 request.set attribute (request name,) zxdtk ); 34 request.remove attribute (请求名称); 35 %
36
37
执行结果如下。
注:一个问题是,tomcat启动时将执行两次servletContextListener侦听,最后删除server.xml上的context手动配置,不再加载两次。