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");
}
}