application:上下文对象,是由容器建立和初始化的,它的范围是整个的web应用,并且整个web应用中只会有一个 application对象存在,当web服务器关闭时,就会将application对象销毁 session:是一种保存上下文信息的机制,它是针对每一个会话的,它是放在服务器端,经过SessionId区分的,在浏览器和服务器结束后,都会将session销毁 request对象:是当客户端发送请求时,容器就会建立一个ServletRequest对象,来进行封装请求数据,同时会建立一个servletResponse对象来进行封装相应数据,当结束封装请求以后,就会销毁该对象 WEB监听器,就是监听这3个对象的建立,销毁,和它们的属性发生的变化
1,统计在线人数和在线用户。 2,系统启动时加载初始化信息。 3,统计网站访问量。 4,跟Spring结合。java
实现了ServletContextListener接口,建立一个监听源为ServletContext的监听器,当服务器启动时,便会建立application对象并调用初始化方法.能够经过初始化方法的参数来对application对象作出一些操做.web
当服务器关闭,application对象销毁时,也会调用监听器的销毁方法,也能够经过参数来做出一些操做.初始化方法和销毁方法中的参数是ServletContextEvent的对象,所以能够经过参数来获取到application对象来对其操做(得到初始化参数).数据库
1.编写java程序浏览器
public class FirstListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("contextInitialized"); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("contextDestroyed"); } }
2.配置web.xml服务器
<listener> <listener-class>onetry.Listener.FirstListener<stener-class> <stener>
1.按监听器的对象划分: a 用户监听应用程序环境对象(ServletContext)的事件监听器 b 用于监听用户会话对象(HttpSession)的事件监听器 c 用于监听请求消息对象(ServletRequest)的事件监听器。 2.按事件划分 a 监听域对象自身的建立和销毁的事件监听器 b 监听域对象中的属性的增长和删除的事件监听器 c 监听绑定到HttpSession域中的某个对象的状态的事件监听器 ServletContext的建立和销毁 实现ServletContextListener接口用于监听它的建立和销毁事件 一个项目中能够有多个ServletContextListener,可是只有一个ServletContext对象 有两个事件处理方法: (1)contextInitialized方法: public void contextInitialized( ServletContextEvent sce ) 参数 ServletContextEvent 事件对象,能够获取ServletContext对象以及一些初始化参数 例如: 获取ServletContext对象: ServletContext sc = sce.getServletContext(); 获取初始化参数: sc.getInitParmeter("参数名称"); 初始化参数在web.xml中配置: <context-param> <param-name>initParam</param-name> <param-value>imooc</param-value> </context-param> 2.设置ServletContext属性:sc.setAttribute("name",obj); 而后在其它地方获取getAttribute("name") (2)contextDestroyed方法: public void contextDestroyed( ServletContextEvent sce ) ServletContext销毁时调用 主要用于数据库连接关闭时释放一些资源,以避免过分的占用。
HttpSession的建立和销毁 实现HttpSessionListener接口用于监听它的建立和销毁事件 一个HttpSession能够注册多个HttpSessionListener接口, 一个web应用中能够有多个HttpSession对象 有两个事件处理方法: sessionCreated方法: public void sessionCreated(HttpSessionEvent se) session建立时调用 sessionDestroyed方法: public void sessionDestroyed(HttpSessionEvent se) session销毁时调用 HttpSessionListener的主要用途: 统计在线人数 记录访问日志,记录访问时间、访问的ip /** * 销毁session * 1.关闭服务器 * 2.关闭浏览器 * 3.不关闭浏览器,session超时 */ 不关闭浏览器,session超时 能够在web.xml配置session超时的时间 <session-config> <session-timeout>0<ssion-timeout> <ssion-config> 0:没有超时的限制 1:超时1分钟后销毁,可是并非准确的一分钟
实现ServletRequestListener接口用于监听它的建立和销毁事件 一个ServletRequest能够注册多个ServletRequestListener接口, 有两个事件处理方法: requestInitialized方法: public void requestInitialized(ServletRequestEvent sre) request建立时调用 参数ServletRequestEvent能够获取ServletRequest对象 ServletRequest sr = sre.getServletRequest() 进而获取初始化参数:sr.getInitParmeter("") requestDestroyed方法: public void requestDestroyed(ServletRequestEvent sre) request销毁时调用 ServletRequest的主要用途: 读取参数 记录访问历史 request监听的是用户的每个访问请求 Ps:别忘了监听器的web设置。
request.getAttribute()只能经过 request.setAttribute("name",参数)来获取; request.getParameter()则经过URL参数,或前连接页面关系的参数来获取
监听器的分类-按监听事件划分: 一、监听器绑定到HttpSession域中的某个对象的状态事件监听器; 二、HttpSession中的对象状态: (1)绑定:经过setAttribute(); (2)解除绑定:removeAttribute(); (3)钝化:将session对象序列化到存储设备上 (4)活化:将session对象从存储设备上进行恢复 三、session钝化机制: (1)把服务器中不常使用的session对象暂时的序列化到系统文件或是数据库中,当使用时反序列化到内存中,整个过程有服务器自动完成。 (2)session的钝化机制由SessionManager管理 四、实现绑定和解除绑定,建立一个【普通的javabean】绑定和解除绑定需实现【HttpSessionBindingListener】接口; 实现钝化和活化,需实现HttpSessionActivationListener接口和Serializable接口