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应用的启动而启动,只初始化一次, ...
随机推荐
- sql 存储过程返回值 变量名
return 语句返回值,前台调用的参数名称为 @RETURN_VALUE
- Maven(一) Maven3 的安装与配置
Maven的安装以及环境变量的配置: a).在安装maven之前,先确保已经安装JDK1.7及以上版本,并且配置好JDK的环境变量. b).下载maven3,下载地址:http://maven.apa ...
- zookeeper简绍
先一句话概括下zookeeper:zookeeper可谓是目前使用最广泛的分布式组件了.其功能和职责单一,但却非常重要. zookeeper到底是什么?(技术文) 1)zookeeper实际上是yah ...
- k8s实战
wget https://github.com/coreos/etcd/releases/download/v2.2.0/etcd-v2.2.0-linux-amd64.tar.gz etcd -na ...
- CLR的八大特性
[CLR的八大特性] Code that you develop with a language compiler that targets the runtime is called managed ...
- Android开发之获取系统所有进程信息。
最近在做一个app,有一个进程管理模块用于管理系统中正在运行的进程,并且可以关闭进程进行加速手机的功能,基本把它实现了出来.界面的效果都是自己写的,虽然有BUG,但是基本上能满足需求,后期我会改进BU ...
- NoClassDefFoundError: net/sf/ezmorph/Morpher
使用import net.sf.json.JSONObject; json-lib-2.4-jdk15.jar时报这个错,各种查找,受到https://blog.csdn.net/chenleixin ...
- Step By Step Hibernate Tutorial Using eclipse WTP[z]
[shivasoft.in/blog/sql/myqsl/step-by-step-hibernate-tutorial-using-eclipse-wtp/] Hibernate is the O ...
- nignx reload的时候报错invalid PID number
第一种思路是从PID号着手,提示无效PID号时nginx.pid文件为空,将进程的PID号追加到空的nginx.pid上,问题解决: 还有问题,请参考:https://www.cnblogs.com/ ...
- log日志查看
(1)类型1: TcLogCls::add_log($data, __METHOD__ . '::订单号:' . $order_no, 'tc_order'); (2)类型2: