1.JavaWeb监听器
监听器:
- 是一个接口,内容由我们自己实现
- 需要注册,例如注册到按钮上
- 监听器中的方法,会在特殊事件发生时被调用
观察者:
- 事件源
- 事件
- 监听器
在JavaWeb被监听的的事件源为:ServletContext、HttpSession、ServletRequest三大域对象
ServletContext
- 创建与销毁监听器:ServletContextListener
- 创建时调用的方法:contextDestroyed(ServletContextEvent sce)
- 销毁时调用的方法:contextInitialized(ServletContextEvent sce)
- 操作域属性的监听器:ServletContextAttirbuteListener
- 添加属性时调用的方法:attributeAdded(ServletContextAttributeEvent event)
- 替换属性时调用的方法:attributeReplaced(ServletContextAttributeEvent event)
- 移出属性时调用的方法:attributeReplaced(ServletContextAttributeEvent event)
Httpsession
- 创建与销毁监听器:HttpsessionListener
- 创建时调用的方法:sessionCreated(HttpSessionEvent se)
- 销毁时调用的方法:sessionDestroyed(HttpSessionEvent se)
- 操作域属性的监听器:HttpsessionAttirbuteListener
- 添加属性时调用的方法:attributeAdded(HttpSessionBindingEvent event)
- 替换属性时调用的方法:attributeReplaced(HttpSessionBindingEvent event)
- 移出属性时调用的方法:attributeReplaced(HttpSessionBindingEvent event)
ServletRequest
- 创建与销毁监听器:ServletRequestListener
- 创建时调用的方法:requestDestroyed(ServletRequestEvent sre)
- 销毁时调用的方法:requestInitialized(ServletRequestEvent sre)
- 操作域属性的监听器:ServletRequestAttirbuteListener
- 添加属性时调用的方法:attributeAdded(ServletRequestAttributeEvent event)
- 替换属性时调用的方法:attributeReplaced(ServletRequestAttributeEvent event)
- 移出属性时调用的方法:attributeReplaced(ServletRequestAttributeEvent event)
感知监听(都与HttpSession相关)
Session自动序列化
Session会在服务器停止时序列化到work目录的catalina中
- 禁止session序列化
content.xml:<Manager pathname="" />
Session的钝化和活化
钝化:通过序列化把session保存到硬盘
活化:通过反序列化把session从硬盘读到内存
保存到tomcat\conf\catalina\localhost下,文件名为项目名
<Context>
<Manager className="org.apache.catalina.session.PresistentManager" maxIdleSwap="1">单位分钟,当用户长时间不访问时,session会自动钝化
<Store className="org.apache.catalina.session.FileStore" directory="Mysession">
</Manager>
</Context>
-
一个session一个文件,就算session活化,钝化文件也不会被删除
它用来添加到JavaBean上,而不是添加到三大域上
这两个监听器都不需要在web.xml中注册
监听JavaBean是否被添加到session
监听JavaBean是否被钝化活化,要实现JavaBean序列化接口 -
HttpSessionBindingListener
- session绑定JavaBean时:valueBound(HttpSessionBindingEvent event)
- session绑定JavaBean时:valueBound(HttpSessionBindingEvent event)
-
HttpSessionActivationListener
- 钝化:sessionDidActivate(HttpSessionEvent se)
- 活化:sessionWillPassivate(HttpSessionEvent se)
2.JavaWeb中编写监听器
可以在这个监听器中存放一些tomcat启动时就要完成的代码,比如JDBC连接
- 写一个监听器类:必须实现某个监听器接口
public class AListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
- 注册,在web.xml中
<listener>
<listener-class>me.dddz.web.listener.AListener</listener-class>
</listener>