用application 比较合适 大家都能看到
监听器是 servlet 的一种特例,对整个web 环境的监听
ServletContext是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。
为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的,线程又是安全的一些信息。如,做一个购物类的网站,要从数据库中提取物品信息,如果用session保存这些物品信息,每个用户都访问一次数据库,效率就太低了;所以要用来Servlet上下文来保存,在服务器开始时,就访问数据库,将物品信息存入Servlet上下文中,这样,每个用户只用从上下文中读入物品信息就行了。
对对象进行监听,不需要写 mapping
com.bj.listener.ServletContextDemo
有两个方法
容器启动时就进行初始化操作
把ServletContext 当成application
private ServletContext application =null;
application=sce.getServletContext();
当前项目路径: application.getContextPath();
application.getRealPath("/");
3.对ServletContext监听 实现 ServletContextListener 接口
这些信息每个人都能访问到 把他存到ServletContext 中
监控servletContext中属性的变化,还要实现ServletContextAttributeListener:对Servlet上下文属性的监听
测试
this.getServletContext().setAttribute(“name”,“tom”);
说明已经拿到用户,然后将用户名加入用户列表字符数组中;
session 监听器也是一样的
要统计一个网站的在线人数,首先,可以通过ServletContextListener监听,当Web应用上下文启动时,在ServletContext中添加一个List,用来准备存放在线的用户名;然后,可以通过HttpSessionAttributeListener监听,当用户登录成功把用户名设置到Session中时同时将用户名存放到ServletContext中的List列表中;最后通过HttpSessionListener监听,当用户注销会话时将用户名从应用上下文范围中的List列表中删除。
用户登录的时候把用户名添加到userlist ,再把userlist放到application中
要用两个浏览器做测试 因为同一个浏览器的session是一样的