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

<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(纯手打 新手上路 不喜勿喷)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这部分主要是与Java Web和Web Service相关的面试题。 96、阐述Servlet和CGI的区别? 答...
    杂货铺老板阅读 1,432评论 0 10
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,386评论 11 349
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,082评论 19 139
  • 监听器(listener) 监听器简介 :监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个...
    奋斗的老王阅读 2,572评论 0 53
  • 早晨我刚起来,闺女就起来了。起来就把古诗背了背,又背了背英语单词。给她们做好饭,自己吃着我就上班去了。 今...
    凤轩懿菡阅读 107评论 0 0