javaWeb三大组件:
Servlet
Listener
Filter
本篇博客主要讲Listener监听器。
监听器:
- 监听器是一个接口,其具体内容根据自己的需求自己实现。
- 监听器中的方法会在特殊事件发生时被调用
- 它他需要注册
javaWeb中的监听器简介
在JavaWeb被监听的事件源为:ServletContext、HttpSession、ServletRequest,即三大域对象。
监听域对象“创建”与“销毁”的监听器;
监听域对象“操作域属性”的监听器;
监听HttpSession的监听器。
-
ServletContext
-
声明周期监听:ServletContextListener,其有两个方法,一个在出生时调用,一个在死亡是调用。
void contextInitizlized9(ServletContextEvent sce):创建ServletContext时调用
void ContextDestoryed(ServletContextEvent sce):销毁Servletcontext时调用 -
属性监听:ServletContextAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个在移除属性时调用
void attrivuteAdded(ServletContextAttributeEvent event) :添加属性时调用
void attributeReplaced(ServletContextAttributeEvent event):替换属性时调用
void attributeRemoved(ServletContextAttributeEvent event):移除属性时调用
-
-
HttpSession
-
生命周期监听:HttpSessionListener,它有两个方法,一个在出生时调用,一个在死亡时调用
void sessionCreated(HttpSessionEvent se):创建session时调用
void sessionDestoryed(HttpSessionEvent se):销毁session时调用 -
属性监听:HttpSessionAttributeListener,三个方法,分别是添加属性、删除属性、替换属性时调用
void attributeAdded(HttpSessionBindingEvent event):添加属性时调用
void attributeReplaced(HttpSessionBindingEvent event):替换属性时调用
void attributeRemoved(HttpSessionBindingEvent event):移除属性
-
-
ServletRequest
- 生命周期:ServletRequestListener,具有两个方法,一个是出生时调用,一个是死亡时调用;
void requestInitialized(ServletRequestEvent sre):创建request时
void requestDestroyed(ServletRequestEvent sre):销毁request时- 属性监听
void attributeAdded(ServletRequestAttributeEvent srae):添加属性时
void attributeReplaced(ServletRequestAttributeEvent srae):替换属性时
void attributeRemoved(ServletRequestAttributeEvent srae):移除属性时
javaWeb中完成编写监听器
① 写一个监听器类:要求是必须实现某个监听接口
② 在web.xml中配置来完成注册
事件对象的介绍
ServletContextEvent: ServletContext getServletContext()
HttpSessionEvent: HttpSession getSession()
ServletRequest:
①: ServletContext getServletContext()
②: ServletReques getServletRequest()
ServletContextAttributeEvent:
》String getName():获取当前操作的属性名;
》Object getValue():获取当前操作的属性值;
》ServletContext getServletContext():获取ServletContext对象。
HttpSessionBindingEvent
》String getName():获取当前操作的属性名;
》Object getValue():获取当前操作的属性值;
》HttpSession getSession():获取当前操作的session对象。
ServletRequestAttributeEvent
》Object getValue():获取当前操作的属性值;
》ServletContext getServletContext():获取ServletContext对象;
》ServletRequest getServletRequest():获取当前操作的ServletRequest对象。
public class MyServletContextListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent evt) {
System.out.println("销毁ServletContext对象");
}
public void contextInitialized(ServletContextEvent evt) {
System.out.println("创建ServletContext对象");
}
}
public class MyHttpSessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent evt) {
System.out.println("创建session对象");
}
public void sessionDestroyed(HttpSessionEvent evt) {
System.out.println("销毁session对象");
}
}
public class MyServletRequestListener implements ServletRequestListener {
public void requestDestroyed(ServletRequestEvent evt) {
System.out.println("销毁request对象");
}
public void requestInitialized(ServletRequestEvent evt) {
System.out.println("创建request对象");
}
}
web.xml中的配置
<listener>
<listener-class>MyServletContextListener监听器的全类名</listener-class>
</listener>
<listener>
<listener-class>MyHttpSessionListener监听器的全类名</listener-class>
</listener>
<listener>
<listener-class>MyServletRequestListener监听器的全类名</listener-class>
</listener>
<session-config>
<!--为了看出session销毁的过程,把session过期时间设置为1秒-->
<session-timeout>1</session-timeout>
</session-config>
属性监听示例:创建一个类,同时实现ServletContextAttributeListener,ServletRequestAttributeListener,HttpSessionAttributeListener接口
public class MyListener implements ServletContextAttributeListener,
ServletRequestAttributeListener, HttpSessionAttributeListener {
public void attributeAdded(HttpSessionBindingEvent evt) {
System.out.println("向session中添加属性:" + evt.getName() + "=" + evt.getValue());
}
public void attributeRemoved(HttpSessionBindingEvent evt) {
System.out.println("从session中移除属性:" + evt.getName() + "=" + evt.getValue());
}
public void attributeReplaced(HttpSessionBindingEvent evt) {
System.out.println("修改session中的属性:" + evt.getName() + "=" + evt.getValue());
}
public void attributeAdded(ServletRequestAttributeEvent evt) {
System.out.println("向request中添加属性:" + evt.getName() + "=" + evt.getValue());
}
public void attributeRemoved(ServletRequestAttributeEvent evt) {
System.out.println("从request中移除属性:" + evt.getName() + "=" + evt.getValue());
}
public void attributeReplaced(ServletRequestAttributeEvent evt) {
System.out.println("修改request中的属性:" + evt.getName() + "=" + evt.getValue());
}
public void attributeAdded(ServletContextAttributeEvent evt) {
System.out.println("向context中添加属性:" + evt.getName() + "=" + evt.getValue());
}
public void attributeRemoved(ServletContextAttributeEvent evt) {
System.out.println("从context中移除属性:" + evt.getName() + "=" + evt.getValue());
}
public void attributeReplaced(ServletContextAttributeEvent evt) {
System.out.println("修改context中的属性:" + evt.getName() + "=" + evt.getValue());
}
}
web.xml中的配置与上面配置事件监听时一样,唯一变化的是全类名变为MyListener的全类名