package com.bai; import javax.servlet.ServletContext; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!********* //*******************注意之前是通过servletmapping映射然后访问 进入这个类 //现在 不是 因为****我们没有继承httpservlet接口所以不能用mapping ****** //我们没有继承httpservlet接口所以不能用mapping //我们没有继承httpservlet接口所以不能用mapping //但是监听器还是要注册的 // 现在是myweb前端直接拿到 context中的counts //!!!!!! //服务器处理请求时会产生一个 session 但处理不一定成功 所以可能会产生失败的session cookie是产生在客户端的 public class ListenerSessionDemo implements HttpSessionListener { //每创建一个session都会调用这个方法 //每创建一个session都会调用这个方法 //每创建一个session都会调用这个方法 //每创建一个session都会调用这个方法 @Override public void sessionCreated(HttpSessionEvent httpSessionEvent) { ServletContext Context = httpSessionEvent.getSession().getServletContext(); System.out.println(httpSessionEvent.getSession().getId()); //httpSessionEvent.getSession()获得该绘画对象 每创建一个session都会调用这个方法 getServletContext获得上下文对象 // context是最大的上下文 不同的servlet可以在里面存东西 //Object counts = Context.getAttribute("number");//setattribute的value类型是object 对象类型 不是int //这里为了计数方便 改为具体的对象 integer Integer counts = (Integer) Context.getAttribute("number");//int的实体类 //获取存在上下文的 键为number的值value // if(counts==0)//这里不能是counts=0 因为这里判断的是 一个键为number的键值对是否为空 应该是null判断 // { // counts++; // }else { // counts=counts+1; // } // Context.setAttribute("number",counts); // } if(counts==null) { counts=new Integer(1); }else { // counts=counts+1; int a=counts.intValue(); counts=new Integer(a+1); } Context.setAttribute("number",counts); } @Override //每销毁一个session都会调用这个方法 //每销毁一个session都会调用这个方法 //每销毁一个session都会调用这个方法 //每销毁一个session都会调用这个方法 //销毁方法有两个:一手动销毁 getsession。invalide //自动销毁 web。xlm配置sessionconfig //还有 服务器观赏就销毁 public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { ServletContext Context = httpSessionEvent.getSession().getServletContext();//context上下文中的东西 会话结束会销毁 Integer counts =(Integer) Context.getAttribute("number"); if(counts!=null) { int a=counts.intValue(); counts=new Integer(a-1); } Context.setAttribute("number",counts); } }
<%--index.jsp--%>
<%@page contentType="text/html;charset=utf-8" %> <html> <body> <h1>当前访问人数为=<%=this.getServletConfig().getServletContext().getAttribute("number")%></h1> </body> </html>
//监听器配置 和session自动销毁 web.xml中配置
<session-config> <session-timeout>1</session-timeout> </session-config> <listener> <listener-class>com.bai.ListenerSessionDemo</listener-class> </listener>