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应用的启动而启动,只初始化一次, ...
随机推荐
- [ShaderStaff] Vignette Effect
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:GLSL | C 最近在看Cardboard实现,其中关于畸变的着色器代码中有加入 晕影Vignette 效果的实现,固在 ...
- 改成maven工程
configure->convert to Maven Project
- 迷你MVVM框架 avalonjs 0.98发布
在本版本中,avalon侧重于对组件开发的支持,可用控件达到12个,末来将大力投入对GRID,TREE等重型UI的开发中. 添加ms-widget绑定,废弃ms-ui绑定 为ms-include添加跨 ...
- 每月IT摘录201806
一.技术 1.架构师的技术升级要点:用两个字来描述:集群,用三个字:分布式,再用多点的文字:把海量的流量和数据合理分摊到数量合适的机器上. 想明白这点,后面就能知道该学哪些了,比如流量分摊时得负载均衡 ...
- acer笔记本禁用或关闭触摸板
acer笔记本禁用或关闭触摸板 如果启用或停用AspireOne的触摸板? 如果您希望启用或停用触摸板,请同时按下功能键(Fn)key和F7键.屏幕上会显示触摸板是否已启用或已禁用.
- Android登录模块原理及实现
1.需要保持登录状态,在本地保存登录的状态信息. 2.界面布局 3.登录流程 输入信息=>登录成功=>手机号发送验证码=>输入验证码=>登录成功
- mvc html.PartialView()传参
方式一,viewDatapublic static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, ...
- BZOJ 1001 狼抓兔子 (最小割转化成最短路)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 27715 Solved: 7134[Submit][ ...
- C语言 void 万能类型
C中 void类型其实是一种万能类型, 也就是说 我们的 void 可以代表任意一种类型,也就是说他的范围要比具体的一种类型要宽广, 例如: int *p = NULL;void *ptr = p; ...
- URAL1991 The battle near the swamp 2017-04-12 18:07 92人阅读 评论(0) 收藏
The battle near the swamp Gungan: Jar Jar, usen da booma! Jar Jar: What? Mesa no have a booma! Gun ...