java—实现一个监听器HttpServletRequest的创建销毁、在线人数 (56)
在JavaWeb中的监听器分类
在Javaweb中存在三个被监听对象:
HttpServletRequest
HttpSessoin
ServletContext
|
监听者 |
被监听者 |
监听到事件对象 |
|
HttpSession – 监听HttpSession活化和顿化。 |
||
|
HttpSession – 监听session的属性变化的。S.setAttributee(); |
||
|
HttpSession - 监听哪一个对象,绑定到了session上。S.setAtrri(name,User); |
||
|
HttpSesion – 监听sessioin创建销毁 |
||
|
ServletContext – 属性变化的 |
||
|
servletContext 创建销毁 |
||
|
ServletRequestListener - serlvetRequestAttibuteListner |
Rrequest -创建销毁 |
实现一个监听器HttpServletRequest的创建销毁
第一步:实现一个类:
package cn.hx.listener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
public class RequestListener implements ServletRequestListener {
public void requestDestroyed(ServletRequestEvent sre) {
System.err.println("request销毁了:");
Object o = sre.getSource();
System.err.println("这个o is :"+o);//apache.RequestFaced@22222
}
public void requestInitialized(ServletRequestEvent sre) {
System.err.println("request创建了:");
Object o = sre.getSource();
System.err.println("这个o是 :"+o);//apache.RequestFaced@22222
}
}
第二步:必须要配置到web.xml
<listener>
<listener-class>cn.itcast.listener.RequestListener</listener-class>
</listener>
说明:
1:配置一个Listener只要求提供类名就可以了。
2:在tomcat启动时,会自动的初始化这个监听器类。
3:tomcat创建的Listner,Serlvet,Filter都是单列的.
在线人数
只要有人访问本站点,成功创建一个Session就是一个会话,一个会话就是一个在线人数。
用HttpSSessionListener来监听Session的创建。
第一步:
package cn.hx.listener;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* 以下实现在线人数的统计
*/
public class MySessionListener implements HttpSessionListener {
private Integer online=1;
//request.getSession();
public void sessionCreated(HttpSessionEvent se) {
System.err.println("有人访问本网点了");
HttpSession hs1 = (HttpSession) se.getSource();
HttpSession hs2 = se.getSession();
System.err.println("hs1:"+hs1.getId()+","+hs2.getId()+",ip:");
//获取整个域的对象
ServletContext sc= se.getSession().getServletContext();
sc.setAttribute("online",online++);
//将所有session放到servletContext
//先从application获取所有已经维护的sesison
List<HttpSession> list = (List<HttpSession>) sc.getAttribute("sessions");
if(list==null){//第一个访问的人
list = new ArrayList<HttpSession>();
sc.setAttribute("sessions", list);
}
list.add(hs2);
}
//过期(30),s.invalidate();
public void sessionDestroyed(HttpSessionEvent se) {
System.err.println("有人退出了..."+se.getSession().getId());
ServletContext sc= se.getSession().getServletContext();
sc.setAttribute("online",online--);
}
}
java—实现一个监听器HttpServletRequest的创建销毁、在线人数 (56)的更多相关文章
- Effective java笔记(一),创建与销毁对象
1.考虑用静态工厂方法代替构造器 类的一个实例,通常使用类的公有的构造方法获取.也可以为类提供一个公有的静态工厂方法(不是设计模式中的工厂模式)来返回类的一个实例.例如: //将boolean类型转换 ...
- effective java读书小记(一)创建和销毁对象
序言 <effective java>可谓是java学习者心中的一本绝对不能不拜读的好书,她对于目标读者(有一点编程基础和开发经验)的人来说,由浅入深,言简意赅.每一章节都分为若干的条目, ...
- 《用Java写一个通用的服务器程序》02 监听器
在一个服务器程序中,监听器的作用类似于公司前台,起引导作用,因此监听器花在每个新连接上的时间应该尽可能短,这样才能保证最快响应. 回到编程本身来说: 1. 监听器最好由单独的线程运行 2. 监听器在接 ...
- java最简单的知识之创建一个简单的windows窗口,利用Frame类
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 微博:http://weibo.com/mcxiaobing 首先给大家看一下 ...
- java实现下载器(以及创建一个URL对象)
java实现下载器(以及创建一个URL对象) 1.思路讲解: (1)注意路径:是网络路径噢 (2)创建创建网路协议对象(远程对象):HttpURLConnection urlConnection (3 ...
- 编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以“62”开头,如图所示。
查看本章节 查看作业目录 需求说明: 使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以"62"开头,如图所示. 实现思路: (1)创建 J ...
- java之Servlet监听器Listener
常用应用场景:单点登录.统计在线人数 一.简介 (一)概述 1.Listener 用于监听 java web程序中的事件,例如创建.修改.删除Session.request.context等,并触发响 ...
- 【Servlet】Java Serlvet Listener 监听器
Listener监听器 Servlet规范中定义的一种特殊的组件,用来监听Servlet容器产生的事件并进行相应的处理 容器产生的事件分类 - 生命周期相关的事件 - 设置和删除Attribute数据 ...
- Java三大器之监听器(Listener)的工作原理和代码演示
现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次, ...
随机推荐
- 在线OFFICE方案
Office在线预览及PDF在线预览的实现方式大集合 在线浏览office 文件 在线预览文档openoffice+swfTool 类百度文库文档上传.转换和展示功能项目开源代码 微软的office ...
- 「小程序JAVA实战」小程序搜索功能(55)
转自:https://idig8.com/2018/09/23/xiaochengxujavashizhanxiaochengxusousuogongneng54/ 通过用户搜索热销词,将热销词添加到 ...
- eclipse liquibase 插件
http://marketplace.eclipse.org/category/free-tagging/liquibase http://marketplace.eclipse.org/market ...
- sql日期查询
select getdate() ,getdate()) ,getdate()) ) ,getdate())) ,getdate())) Select datename(weekday, getdat ...
- js 实现 一张图片的上传
.js进行图片预览 使用input标签来选择图片,使用FileReader读取图片并转成base64编码,然后发送给服务器. <html> <body> <img id= ...
- maven工程 ,通过maven更新后,jre恢复到1.5的解决方法
在maven setting.xml profiles节点下加入 <profile> <id>jdk-1.8</id> <activation> < ...
- 7.25 6figting!
TEXT 82 Proton 马来西亚宝腾汽车 A fork in the road 何去何从?(陈继龙编译) Nov 30th 2006 | HONG KONG From The Economist ...
- 25.Reverse Nodes in k-Group (List)
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...
- 【总结整理】令人惊喜的app
1.音遇,从无名氏跃居appstore社交类榜单前十:2.刺激战场,不懂算不算互联网产品hhh,打败手游吃鸡先锋荒野行动:3.微信小游戏,从跳一跳到更复杂的h5游戏,微信小游戏占据了部分玩家的琐碎时间 ...
- php从数组中取出一段 之 array_slice
array array_slice ( array $array , int $offset [, int $length [, bool $preserve_keys ]] ) array_slic ...