利用 ServletRequestListener、HttpSessionListener 以及 ServletContextListener 可以把request,session,以及Application的生命周期进一步的做一了解
> request:是一个请求,当一个响应返回时,即被销毁.当发送一个请求时被创建.注意:请求转发的过程是 一个 request 对象。
注:在页面上放的 属性 ,在servlet中时获取不到的,因为页面响应后request已经销毁了。
注:重定向是两个请求。
> session : 当第一次访问WEB 应用的一个 JSP 或 Servlet 时,且该 JSP 或 Servlet 中 还需要创建一个 session 对象。
session 销毁:session 过期,直接调用 session的 invilidate 方法,当前WEB 应用被卸载(session 可以被持久化)
*关闭浏览器,并不意味着session 被销毁,还可以通过 sessionid找到服务器中的 session 对象
> application : 贯穿于当前的 WEB 应用的生命周期。当前 WEB 应用被加载时 创建 application 对象,当前 WEB 应用被
卸载时销毁 application 对象.
ServletContextListener
1). what: 监听 ServletContext 对象被创建或销毁的 Servlet 监听器
2). how:
> 创建一个实现了 ServletContextListener 的类,并且实现其中的两个方法
public class HelloServletContextListener implements ServletContextListener
> 在 web.xml 文件中 配置Listener
<listener>
<listener-class>com.java.javaweb.test.HelloServletContextListener</listener-class>
</listener>
3). why: ServletContextListener 是最常用的Listener,可以在当前 WEB 应用被加载时对当前 WEB 应用的相关资源进行初始化操作:
创建数据库连接池,创建Spring 的 IOC 容器,读取当前 WEB 应用的初始化参数 ...
4). API:
Method Summary | |
---|---|
void |
contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down. |
void |
contextInitialized(ServletContextEvent sce)
Notification that the web application initialization process is starting. |
JavaWEB 中其他的Servlet监听器
HttpSessionActivationListener
1).监听实现了该接口 和 Serializable 接口的 Java 类的对象随session钝化和活化事件
>活化:从餐盘中读取session 对象
>钝化:向磁盘中写入session对象
>session 对象存储在tomcat 服务器的 workCatalinalocalhostcontextPath 目录下.SESSION.SER
2).注意:该监听器不需要再web.xml文件中进行配置.
3).
//在活化之后被调用.
public void sessionDidActivate(HttpSessionEvent se)
//在钝化之前被调用
public void sessionWillPassivate(HttpSessionEvent se)
HttpSessionEvent:getSession()
4).该监听器很少被使用.
-----------------------------------------------------------------------
HttpSessionBindingListener
1).监听实现了该接口的Java类的对象被绑定到 session 或从 session 中解除绑定的事件.
//当前对象被绑定到 session 时调用该方法
public void valueBound(HttpSessionBindingEvent event)
//当前对象从session中解除时调用该方法
public void valueUnbound(HttpSessionBindingEvent event)
2).注意:该监听器不需要再web.xml文件中进行配置.
3).HttpSessionBindingEvent:
getName(),getValue(),getSession()