对httpSession,servletContext生命周期的理解

httpSession 和 servlertContext 的生命周期类似,这里详细讨论下httpSession,然后servletContext类似

httpSession是浏览器级别的状态字,只要网页打开了就已经和服务器建立了一个连接session,创建一个属于这个网页特有的sessionId

下面我们通过建立一个监听器对httpSession,servletContext 进行监听监听器代码如下,理解其中的生命周期

package com.restaurant.listener;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class ResListener implements ServletContextListener, HttpSessionListener, ServletContextAttributeListener, HttpSessionAttributeListener {

    public ResListener() {
    }
    //当属性被移除时调用.如session.removeAttribute("hotel");
    public void attributeRemoved(HttpSessionBindingEvent arg0) {
     //System.out.println("Session attributeRemoved sessionId="+arg0.getSession().getId());
    }


    //当属性被移除时调用.如session.addAttribute("hotel","myhotel");
    public void attributeAdded(HttpSessionBindingEvent arg0) {
    //System.out.println("Session attributeAdded sessionId="+arg0.getSession().getId());
    }
    //服务器初始化的时候调用,如打开tomcat
    public void contextInitialized(ServletContextEvent arg0) {
    //System.out.println("ServletContext contextInitialized");
    }
    //服务器某一个属性的内容改变时调用,如context.addAttribute("hotel","myhotel");
    public void attributeAdded(ServletContextAttributeEvent arg0) {
    //System.out.println("ServletContext attributeAdded");
    }
    /**
     * session某一个属性的内容改变时调用,如一开始session.addAttribute("hotel","myhotel");
     * 创建了一个属性,当下次用这个用session.addAttribute("hotel","youhotel");
     * 就调用了该函数
     */
    public void attributeReplaced(HttpSessionBindingEvent arg0) {
    //System.out.println("HttpSession  attributeReplaced sessionId="+arg0.getSession().getId());
    }
  //浏览器打开网页,和服务器建立连接时,创建,刷新页面不会创建新的session
    public void sessionCreated(HttpSessionEvent arg0) {
    //System.out.println("HttpSession  sessionCreated sessioinId="+arg0.getSession().getId());
    }
    /**
     * servlet某一个属性的内容改变时调用,如一开始session.addAttribute("hotel","myhotel");
     * 创建了一个属性,当下次用这个用session.addAttribute("hotel","youhotel");
     * 就调用了该函数
     */
    public void attributeReplaced(ServletContextAttributeEvent arg0) {
    //System.out.println("ServletContext  attributeReplaced");
    }
  //context的属性被替代时调用
    public void attributeRemoved(ServletContextAttributeEvent arg0) {
    //System.out.println("ServletContext  attributeRemoved");
    }
    /**
     * session 失效时调用,如用session.invalidate()或者session过期,可以在web.xml配置失效时间,
<session-config>   
<session-timeout>1</session-timeout>     时间单位是一分钟,并且只能是整数,如果是零或负数,那么会话就永远不会超时。
</session-config>
注意:关闭浏览器不会调用该函数
     */
    public void sessionDestroyed(HttpSessionEvent arg0) {
    }
    //context失效时调用,如tomcat服务器关闭
    public void contextDestroyed(ServletContextEvent arg0) {
    //System.out.println("ServletContex  contextDestroyed");
    }

}

你可能感兴趣的:(servlet)