Servlet中的监听器:提供了8个监听器
一类:监听三个域对象的创建和销毁的监听器.3个
ServletContext ServletContextListenerHttpSession HttpSessionListener
HttpServletRequest ServletRequestListener
二类:监听三个域对象的属性变更的监听器.(属性添加,属性移除,属性替换)3个.
ServletContext ServletContextAttributeListenerHttpSession HttpSessionAttributeListener
HttpServletRequest ServletRequestAttributeListener
三类:监听HttpSession对象中的JavaBean的状态的改变.(绑定,解除绑定,钝化和活化)2个
HttpSessionBindingListenerHttpSessionActivationListener
setAttribute("name",user);
1.1.1.1 一类监听器:监听三个域对象的创建和销毁的监听器:
ServletContextListener:监听ServletContext对象的创建和销毁.
【方法】
【问题】
* ServletContext对象何时创建和销毁: 应用在,它就在。
* 创建:服务器启动时,就为每个应用创建一个单享的ServletContext对象
* 销毁: 服务器关闭或应用卸载时。
【入门案例】
1.编写一个类实现监听器的接口.
public class MyServletContextListener implements ServletContextListener{
@Override
/**
* 监听ServletContext对象的创建的方法:
* @param sce
*/
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContext对象被创建了...");
}
@Override
/**
* 监听ServletContext对象的销毁的方法:
* @param sce
*/
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext对象被销毁了...");
}
}
2.通过配置完成监听器和事件源的绑定.
<!-- 配置监听器 -->
<listener>
<listener-class>com.itheima.weblistener.MyServletContextListener</listener-class>
</listener>
【企业中应用】
* 初始化工作.
* 加载配置文件:Spring框架.
* ContextLoaderListener:
HttpSessionListener:监听HttpSession对象的创建和销毁的监听器.
【方法】
【问题】
* HttpSession对象何时创建和销毁的?
* 创建:当用户第一次访问Servlet,且调用了getSession()时。用户第一次访问jsp时就创建。
* 销毁:
*默认30分种后销毁
*服务器非正常关闭。
*调用invalidate();
*setMaxInactiveInterval()设置session的有效存活时间
【入门】
1.编写监听器:
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对象被销毁了...");
}
}
2.配置监听器:
<listener>
<listener-class>com.itheima.weblistener.MyHttpSessionListener</listener-class>
</listener>
【问题】
1.访问一个Servlet是否创建session对象?:不一定。如果调用了getSession()时。
2.访问一个jsp是否创建session对象?:是
ServletRequestListener:监听ServletRequest对象的创建和销毁的监听器:
【方法】
【问题】
ServletRequest对象何时创建和销毁?
* 创建:用户每次访求都创建。
* 销毁:当服务器响应数据后,就销毁了。
【入门】
1.编写一个监听器
public class MyServletRequestListener implements ServletRequestListener {
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("ServletRequest被创建了...");
}
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("ServletRequest被销毁了...");
}
}
2.配置监听器
<listener>
<listener-class>com.itheima.weblistener.MyServletRequestListener</listener-class>
</listener>
【问题】
1.访问一个Servlet是否创建request对象?:会
2.访问一个jsp是否创建request对象?:会
1.1.1.2 二类监听三个域对象属性变更的监听器:
ServletContextAttributeListener:监听ServletContext对象中的属性变更的监听器
【方法】
HttpSessionAttributeListener:监听HttpSession对象中的属性变更的监听器
【方法】
ServletRequestAttributeListener:监听ServletRequest对象中的属性变更的监听器
【方法】
1.1.1.3 三类:监听HttpSession中的JavaBean的状态改变的监听器.(绑定,解决绑定,钝化,活化)
第三类监听器非常特殊:
* 监听器作用在JavaBean上.JavaBean可以自己感知在session中状态.
* 这类监听器不用配置.
HttpSessionBindingListener:监听HttpSession中的JavaBean的绑定和解除绑定的状态.
【方法】
HttpSessionActivationListener:监听HttpSession中的JavaBean的钝化和活化的状态.
【方法】
sessionDidActivate(HttpSessionEvent se); -- 活化
SessionWillPassivate(HttpSessionEvent se); -- 钝化
1.1.1.4 监听器的总结:
Servlet的监听器分成三类8个:
* 一类:监听三个域对象的创建和销毁的监听器.
* 二类:监听三个域对象的属性的变更.
* 三类:监听HttpSession中JavaBean的状态的改变.