美文网首页
Servlet篇-监听器(试水篇)

Servlet篇-监听器(试水篇)

作者: Forever_JSON | 来源:发表于2018-06-08 00:31 被阅读0次

      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里配置

    <listener> 

        <listener-class>

                web.listener.SessionCounter

      </listener-class> 

    </listener> 

    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篇-监听器(试水篇)

          本文链接:https://www.haomeiwen.com/subject/koxosftx.html