Servlet篇-监听器(试水篇)

  servlet里不得不说一下监听器,因为servlet里对象众多,比如:HttpRequestServlet、 HttpResponseServlet、HttpSession、ServletConfig、ServletContext等基本每一个都有其对应的Listener(监听器)而监听器顾名思义是作为辅助类让我们更好的观察Servlet的各个对象,它能帮我们从第三方角度(第一角度客户端,第二角度servlet容器)获取一个web服务器小程序的矢量考究。

这里举个例子:监听session,计算访问在线的用户量。session学过javaweb的都应该知道,这里不再做详细解释,如果有兴趣可以看我随笔,后面我会慢慢整理,由于今天是第一次编撰,还是以监听器为主。言归正传,session属于状态管理,记录用户状态,为了统计有多少个用户在线我们需要Session监听器,步骤如下:

  1)创建一个war包的Maven工程(Maven如何管理后续会整理)注意: groupId 域名反写

artifactId:webapp应用名

    注:创建完报错需要右键generate...stub最长的那个自动生成webapp下的web.xml映射文件

2)将项目部署到Tomcat服务器上,以eclipse为例 右键properties––>Targeted Runtimes选中已经配置好的Tomcat服务器––>Finish

3)创建一个java类实现HttpSessionListener接口

注:会让重写两个方法sessionCreated(HttpSessionEvent se)

sessionDestroyed(HttpSessionEvent se)

一个是写session创建时产生的事件监听处理逻辑

一个是session销毁时监听事件的处理逻辑

4)在session创建监听方法里 进行逻辑判断

首先定义一个全局的计数对象count 然后获取session对象用session获取Servlet上下文用上下文监听 (ps:因为监听session,而session本身只能监听自己即只能看见自己,直接用session绑定数据,统计用户时一直都为一个)

ServletContext ctx = event.getSession( ).getServletContext();

ctx.getAttribute("count");//假设count为绑定的

//在线用户数量

获取后应该考虑是否为空,有可能用户未访问 此时应该将count赋值一 并且绑定数据

ctx.setAttribute("count",count);

如果有值count++

在销毁session监听方法里 写计数减减逻辑

第一步同样获取servlet上下文 不用判断session因为要销毁肯定曾经拥有

接着ctx.setAttribute("count",--count);

5)在web.xml里配置

 

   

            web.listener.SessionCounter

   

 

6)考虑用户及时下线处理,如果用户下线则立即统计用户下线量,减去并重新计算。因为session保存在服务器端,默认配置超时30分钟(session-timeout 超时可以设置 需要配置)正因为如此,如果不做处理,需要30分钟后才会重新统计,这时候可以使用session提供的失效方法

// 销毁session 

    request.getSession().invalidate();

此代码可以在Servlet类service(..,..)里或者doGet()、doPost()方法里

因为调用此方法会触发sessionDestroyed方法可以做到迅速重新统计在线用户列表人数

7)写一个jsp页面 用application内置对象获取绑定的数据count即统计值然后运行 最后观察结果(可以使用多个浏览器测试 一个浏览器可以当做一个用户 浏览器本身就是一个代理用户)

application.getAttribute("count");

    –WriteByJson(纯手打 新手上路 不喜勿喷)

你可能感兴趣的:(Servlet篇-监听器(试水篇))