1.监听器的术语
事件源:指的是被监听的对象.(汽车)
监听器:值的是监听的对象.(报警器)
事件源与监听器的绑定:就是在汽车上安装报警器.
事件:指的是事件源的改变.(踹汽车一脚)---主要的功能获得事件源对象.
2.web中的监听器
WEB中的Listener和Filter是属于Servlet规范中的高级的技术.
WEB中的监听器共有三类八种(监听三个域对象)
事件源:servlet中的三个域对象:ServletContext,HttpSession,ServletRequest
监听器:自定义实现8个接口
事件源和监听器的绑定:配置
3.web中的监听器的分类
三类八种:
一类:监听三个域对象的创建和销毁的监听器
*ServletContextListener
*HttpSessionListtener
*ServletRequestListener
二类:监听三个域对象属性变更的监听器(属性添加,移除,替换)
*ServletContextAttributeListener
*HttpSessionAttributeListener
*ServletRequestAttributeListener
三类:监听HttpSession中的javabean的状态改变(绑定,解除绑定,钝化,活化)
*HttpSessionBindingListener
*HttpSessionActiveListener
ServletContextListener:监听ServletContext对象的创建和销毁
【ServletContext对象的创建和销毁】:
* 创建:服务器启动的时候,服务器为每个WEB应用创建一个属于该web项目的对象ServletContext.
* 销毁:服务器关闭或者项目从服务器中移除的时候.
public class MyServletContextListener implements ServletContextListener{ @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("ServletContext对象被创建了..."); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("ServletContext对象被销毁了..."); } }
配置:
<!-- 配置监听器 --> <listener> <listener-class>com.itheima.weblistener.MyServletContextListener</listener-class> </listener>
HttpSessionListener:监听HttpSession的创建和销毁的监听器:
【HttpSession何时创建和销毁的】
* 创建:服务器端第一次调用getSession();
* 销毁:
* 非正常关闭服务器(正常关闭session会序列化):
* session过期了默认30分钟.
* 手动调用session.invalidate();
【HttpSession的问题】
* 访问Servlet会不会创建Session : 不会
* 访问JSP会不会创建Session :会.
* 访问html会不会创建Session :不会
public class MyHttpSessionListener implements HttpSessionListener{ @Override public void sessionCreated(HttpSessionEvent se) { System.out.println("HttpSession被创建了..."); } @Override public void sessionDestroyed(HttpSessionEvent se) { System.out.println("HttpSession被销毁了..."); } }
配置:
<listener> <listener-class>com.itheima.weblistener.MyHttpSessionListener</listener-class> </listener>
ServletRequestListener:监听ServletRequest对象的创建和销毁的监听器:
【request对象何时创建和销毁】:
* 创建:客户端向服务器发送一次请求,服务器就会创建request对象.
* 销毁:服务器对这次请求作出响应后就会销毁request对象.
【问题】:
访问一个Servlet会不会创建request对象:会
访问一个JSP会不会创建request对象:会
访问一个HTML会不会创建request对象:会
public class MyServletRequestListener implements ServletRequestListener{ @Override public void requestDestroyed(ServletRequestEvent sre) { System.out.println("ServletRequest被销毁了..."); } @Override public void requestInitialized(ServletRequestEvent sre) { System.out.println("ServletRequest被创建了..."); } }
配置:
<listener> <listener-class>com.itheima.weblistener.MyServletRequestListener</listener-class> </listener>