java Session统计在线用户,并且显示在线用户
关键字: httpsession
1.http://www.jspcn.net/htmlnews/11049329478121583.html 监听器
2.session.invalidate() ,session才会destroy
3.HttpSessionListener: 这个监听取不到session里面的值
http://hi.baidu.com/tianshiyeben/blog/item/17d43923d695d042ad34de36.html
http://www.family168.com/tutorial/jsp/html/jsp-ch-04.html#jsp-ch-04-02 在线列表实例
下面的代码可以获取上线,下线的在线列表 :
public class OnlineListener implements HttpSessionListener ,HttpSessionAttributeListener{
public void sessionCreated(HttpSessionEvent event) {//只要一打开浏览器就会执行 ,没有登陆也会执行.
}
public void sessionDestroyed(HttpSessionEvent event) {//只有超时,invalidate()才会执行
HttpSession se=event.getSession();
OnlineManager.getInstance().removeSession(se); //从列表中删除
// System.out.println("remove session....................");//为什么浏览窗口关闭了,没有执行啊???
}
public void attributeAdded(HttpSessionBindingEvent event) {//如果登陆成功, 就把上线 用户添加 到列表.
HttpSession se=event.getSession();
String name=event.getName();
String value=(String)event.getValue();
if("username".equals(name)){
OnlineManager.getInstance().addSession(se); //添加
}
}
}
public class OnlineManager {
private static OnlineManager om;
private Map<String,HttpSession> sessions;
private OnlineManager(){
sessions=new HashMap<String,HttpSession>();//为什么没有共用一个sessions;
}
public static OnlineManager getInstance(){
if(om==null){
om=new OnlineManager();
}
return om;
}
public void addSession(HttpSession se){
String key=(String)se.getAttribute("username");
sessions.put(key, se);
System.out.println("add 1 : "+sessions.size());
}
public void removeSession(HttpSession se){
String key=(String)se.getAttribute("username");
//sessions.remove(key); //这个只是把key=null
sessions.remove(sessions.get(key));
System.out.println("remove 1 : " +"key:"+key+sessions.size());
System.out.println(sessions);
}
}
------------------------
第二种方法实现在线,下线:
public class BindSession implements HttpSessionBindingListener {
private String username;
public BindSession(String username){
this.username=username;
}
public void valueBound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession();
// String name=(String)session.getAttribute("name");
ServletContext application = session.getServletContext();
// 把用户名放入在线列表
List onlineUserList = (List) application.getAttribute("onlineUserList");
// 第一次使用前,需要初始化
if (onlineUserList == null) {
onlineUserList = new ArrayList();
application.setAttribute("onlineUserList", onlineUserList);
}
onlineUserList.add(this.username);
System.out.println("valueBound: .........."+onlineUserList.size());
}
public void valueUnbound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession();
// String name=(String)session.getAttribute("name");
ServletContext application = session.getServletContext();
// 从在线列表中删除用户名
List onlineUserList = (List) application.getAttribute("onlineUserList");
onlineUserList.remove(this.username);
System.out.println(this.username + "退出。");
}
}
public class Login extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String name=req.getParameter("name");
String pass=req.getParameter("password");
boolean isLogin=false;
int len=set.size();
for(int i=0;i<len;i++){
if(set.containsKey(name)&&set.containsValue(pass)){
isLogin=true;
}
}
if(isLogin){
req.getSession().setAttribute("username", name);
System.out.println("login ...username="+name);
//BindListener 的使用:
BindSession bl=new BindSession(name);
req.getSession().setAttribute("lis", bl);
resp.sendRedirect("index.jsp");
}
else{
resp.sendRedirect("login.jsp");
}
java Session统计在线用户,并且显示在线用户的更多相关文章
- 【Linux学习】Linux用户管理1—用户查询指令、用户切换
Linux用户管理1-用户查询指令.用户切换 一.用户查询指令 who: 查看当前在线用户情况 -a:显示所有用户的所有信息 -m:显示运行该程序的用户名,和"who am I"的 ...
- 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_11-前端显示当前用户-前端请求jwt
前端代码 sessionStorage也是key/value的格式 页头显示当前用户 查询jwt nginx里面的配置 测试 开启认证服务 进行登陆 跳转到首页就应该立即请求查询. 跳转到首页 coo ...
- ASP.NET实现在线人员实时显示
在最近的学习中,参考其他资源,做了一个简单的在线人员显示的功能,总结了一下,思路如下: 1.定义一个全局的内存来作为在线人员列表 2.通过实时判断用户Session值,来判断某个用户的登录或离线 3. ...
- Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)
简单介绍 关于SignalR的简单实用 请参考 Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室) 在上一篇中,我们只是介绍了简单的消息推送,今天我们来修改一下,实现 ...
- linux查看在线用户并踢出用户
linux查看在线用户并踢出用户 1.查看在线用户 w [root@dbserver01 ~]# w 16:45:04 up 16 days, 8:48, 1 user, load average: ...
- leaflet-webpack 入门开发系列二加载不同在线地图切换显示(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- openfire广播broadcast插件怎么发送消息给所有用户(包括在线和离线)
openfire广播broadcast插件怎么发送消息给所有用户(包括在线和离线): 打开openfire管理界面,找到服务器系统属性,添加一个属性(属性名:plugin.broadcast.all2 ...
- session统计在线人数
/* * 当不涉及验证码的时候 */ //统计游客(未登录)人数 $map = array('session_expire'=>array('gt',NOW_TIME),'session_dat ...
- 通过纯真IP地址实现根据用户地址显示信息
为了实现中关村在线商品报价中通过用户的地理位置信息显示相应的报价. 示例地址:http://detail.zol.com.cn/lens/index224693.shtml 现把我做的使用asp.ne ...
随机推荐
- React Native学习(九)—— 使用Flexbox布局
本文基于React Native 0.52 Demo上传到Git了,有需要可以看看,写了新内容会上传的.Git地址 https://github.com/gingerJY/React-Native-D ...
- java double相加
public class DoubleUtil { private static final int DEF_DIV_SCALE = 10; /** * 相加 * * @param d1 * @par ...
- SpringBoot的注解:@SpringBootApplication注解 vs @EnableAutoConfiguration+@ComponentScan+@Configuration
spring Boot开发者经常使用@Configuration,@EnableAutoConfiguration,@ComponentScan注解他们的main类, 由于这些注解如此频繁地一块使用( ...
- Hadoop API:遍历文件分区目录,并根据目录下的数据进行并行提交spark任务
hadoop api提供了一些遍历文件的api,通过该api可以实现遍历文件目录: import java.io.FileNotFoundException; import java.io.IOExc ...
- javascript中的事件类型
表单事件 submit reset click change focus blur input window事件 load DomContentLoaded readyStatechange unlo ...
- Linux下文件权限(一)用户ID和用户组ID
最近在读<unix环境高级编程>,看到文件权限这里比较糊涂,主要设计多个用户ID和用户组ID,包括下面两个: (1)实际用户ID和实际用户组ID:这一部分表示我们究竟是谁.这两个字段在登录 ...
- Docker配置加速器
我们国内使用官方Docker Hub仓库实在是太慢了,很影响效率 使用命令编辑文件: vim /etc/docker/daemon.json 加入下面的数据: docker-cn镜像: { " ...
- LeetCode169:Majority Element(Hash表\位操作未懂)
题目来源: Given an array of size n, find the majority element. The majority element is the element that ...
- NPM实用指北
npm作为下载node附送的大礼包,大家一定不会陌生. 然而关于npm,估计大量的只是用到npm install XXX以及npm run XXX. 其实这里边还有很多有意思的命令&参数.关于 ...
- 规约模式(Specification Pattern)
一.引言 最近在看一个项目的源码时(DDD),对里面的一些设计思想和设计思路有了一些疑问.当看到(Repository层)中使用了 spec.SatisfiedBy() 时,感觉有点懵.于是在项目中搜 ...