- 浏览: 1273880 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (499)
- java (101)
- linux (82)
- mysql (30)
- javascript (45)
- Oracle (12)
- ext (14)
- 虚拟机 (1)
- 搜索引擎 (2)
- struts2 (11)
- 设计模式 (9)
- nginx (17)
- tomcat (12)
- 随想 (10)
- spring (18)
- svn (1)
- flash (3)
- UML (1)
- 数据结构 (7)
- 算法 (2)
- 网摘 (9)
- 数据库 (15)
- ibatis (3)
- jquery (31)
- lucene (1)
- hibernate (14)
- Myeclipse (4)
- 线程 (7)
- jbpm (4)
- 重构 (1)
- mantis (3)
- MediaWiki (4)
- ExtMail (1)
- MDaemon (1)
- egit (1)
- dwr (7)
- sitemesh (2)
- mybatis (1)
- ico (1)
- hadoop (5)
- jsoup (1)
- urlrewrite (2)
- jstl (1)
- spring3 (2)
- aop (2)
- 定时器 (1)
- Quartz (2)
- apache (1)
- php (1)
- security (1)
- iptables (2)
- QQ (1)
- mysqldump (1)
- vim (1)
- memcached (4)
- jad (1)
- 微博 (1)
- html5 (1)
- css3 (1)
- httpclient (10)
- google (1)
- shortUrl (1)
- json (2)
- virtualBox (1)
- mantisBT (2)
- htmlunit (1)
- selenium (2)
- mail (1)
- 正则表达式 (4)
- html (3)
- css (2)
- jatoolsPrinter (1)
- 图片处理 (1)
- hql (1)
- webservice (1)
- 分词 (3)
- 短信 (1)
- VPS (1)
- 事务 (1)
- 广告 (1)
- 画廊 (1)
- git (3)
- github (1)
- openshift (1)
- 缓存 (1)
- web (3)
- android (3)
- c3p0 (1)
- 邮箱 (1)
- memcache (2)
- windows (2)
- js (14)
- 编辑器 (1)
- 打印 (1)
- centos (5)
- boneCP (1)
- 连接池 (1)
- sql (1)
- nosql (1)
- MongoDB (1)
- 浏览器 (1)
- node (1)
- node.js (1)
- backbone.js (1)
- lazyload (1)
- Switch Off (1)
- Titanium (1)
- 网站架构 (1)
- WebDriver (1)
- APJP (1)
- 代理 (1)
- comet (1)
- kendoui (1)
- UI (2)
- 互联网 (1)
- localStorage (1)
- 记录 (1)
- 微信 (2)
- Sphinx (1)
- netty (1)
- js,mvvm,Avalon (1)
- 安卓 (1)
- Tengine (1)
- 大数据 (1)
- 手机 (1)
- paypal (1)
- SaaS (1)
- gitlab (1)
- nodejs (1)
- React (1)
- shadowsocks (0)
- vpn (0)
- 验证码 (1)
- SSL (2)
- SEO (1)
- IntelliJ (1)
- 敏捷开发 (1)
- 项目管理 (1)
- 爬虫 (1)
- 正则 (1)
- owncloud (1)
- 云存储 (1)
- ajax (1)
- pjax (1)
- jdk (1)
- zookeeper (1)
- phantomjs (1)
- ELK (1)
- springcloud (1)
- IDEA (1)
- hexo (1)
- ss (1)
- letencrypt (1)
最新评论
-
peakandyuri:
这个是有BUG的,数字小体现不出来,数字大了就不对了,但是Ja ...
java十进制转换N进制并反转换的工具类 -
ginolai:
然后是相关配置:/etc/sysconfig/iptables ...
Linux中iptables设置详细 -
bzhao:
我测试没啥区别啊!
Thread.sleep()和Thread.currentThread().sleep()区别 -
zhl549342097:
match == false
Spring Security 3.1 中功能强大的加密工具 PasswordEncoder -
hellotieye:
renzhengzhi 写道drager 写道用jsoup后解 ...
jsoup select 选择器
下午比较闲(其实今天都很闲),想了一下在线人数统计方面的实现,上网找了下这方面的知识,最初我的想法是,管理session,如果session销毁了就减少,如果登陆用户了就新增一个,但是如果是用户非法退出,如:未注销,关闭浏览器等,这个用户的session是管理不到的,最后决定用HttpSessionListener接口或HttpSessionBindingListener接口来实现,通过监听session的新建和销毁来控制,详细如下。 先添加登陆的页面index.jsp 点击登陆后跳转的login.jsp(为了方便,用jsp做servlet,同学们用的时候记得改过来) 登陆成功跳转到显示页面result.jsp 点击注销页面logout.jsp页面 OK,登陆、查看、注销页面都有了,下面开始新建监听器 1、HttpSessionListener 添加类OnlineUserListener,继承HttpSessionListener,HttpSessionListener中有两个方法sessionCreated(HttpSessionEvent event)与sessionDestroyed(HttpSessionEvent event),前者是监听session的新建,后者是监听session的销毁。 OnlineUserListener代码如下: web.xml配置: 一旦监听器发现调用了sessionDestoryed方法就会把其用户从在线人数中delete,在下面两种情况下会发生sessionDestoryed事件 a.执行session.invalidate()方法时 logout.jsp中调用了 session.invalidate()方法 b.session会话超时 session的默认超时事件是30分钟,30分钟后自动销毁session 2、HttpSessionBindingListener HttpSessionBindingListener虽然叫做监听器,但使用方法与HttpSessionListener完全不同。我们实际看一下它是如何使用的。 新建类OnlineUserBindingListener,实现HttpSessionBindingListener接口,构造方法传入username参数,HttpSessionBindingListener内有两个方法valueBound(HttpSessionBindingEvent event)和valueUnbound(HttpSessionBindingEvent event),前者为数据绑定,后者为取消绑定 所谓对session进行数据绑定,就是调用session.setAttribute()把HttpSessionBindingListener保存进session中。 在login.jsp中做这一步: 这就是HttpSessionBindingListener和HttpSessionListener之间的最大区别:HttpSessionListener只需要设置到web.xml中就可以监听整个应用中的所有session。HttpSessionBindingListener必须实例化后放入某一个session中,才可以进行监听。 从监听范围上比较,HttpSessionListener设置一次就可以监听所有session,HttpSessionBindingListener通常都是一对一的。 正是这种区别成就了HttpSessionBindingListener的优势,我们可以让每个listener对应一个username,这样就不需要每次再去session中读取username,进一步可以将所有操作在线列表的代码都移入listener,更容易维护。 HttpSessionBindingListener代码如下: 这里可以直接使用listener的username操作在线列表,不必再去担心session中是否存在username。 valueUnbound的触发条件是以下三种情况: a.执行session.invalidate()时。 b.session超时,自动销毁时。 c.执行session.setAttribute("onlineUserListener", "其他对象");或session.removeAttribute("onlineUserListener");将listener从session中删除时。 因此,只要不将listener从session中删除,就可以监听到session的销毁。
01
<%@ page contentType="text/html;charset=utf-8"%>
02
<
html
>
03
<
head
>
04
<
title
>test</
title
>
05
</
head
>
06
<
body
>
07
<
form
action
=
"login.jsp"
method
=
"post"
>
08
用户名:<
input
type
=
"text"
name
=
"username"
/>
09
<
br
/>
10
<
input
type
=
"submit"
value
=
"登录"
/>
11
</
form
>
12
</
body
>
13
</
html
>
01
<%@ page contentType="text/html;charset=utf-8"%>
02
<%@ page import="java.util.*"%>
03
<%
04
request.setCharacterEncoding("UTF-8");
05
// 取得登录的用户名
06
String username = request.getParameter("username");
07
// 把用户名保存进session
08
session.setAttribute("username", username);
09
// 把用户名放入在线列表
10
List onlineUserList = (List) application.getAttribute("onlineUserList");
11
// 第一次使用前,需要初始化
12
if (onlineUserList == null) {
13
onlineUserList = new ArrayList();
14
application.setAttribute("onlineUserList", onlineUserList);
15
}
16
onlineUserList.add(username);
17
// 成功
18
response.sendRedirect("result.jsp");
19
%>
1
<%@ page contentType="text/html;charset=utf-8"%>
2
<%@ page isELIgnored="false"%>
3
<%@page import="java.util.List"%>
01
<
h3
>您好:${username} [<
a
href
=
"logout.jsp"
>注销</
a
>]</
h3
>
02
当前在线用户:
03
<
table
>
04
<%
05
List onlineUserList = (List) application.getAttribute("onlineUserList");
06
for (int i = 0; i <
onlineUserList.size
(); i++) {
07
String onlineUsername = (String) onlineUserList.get(i);
08
%>
09
<
tr
>
10
<
td
><%=onlineUsername%></
td
>
11
</
tr
>
12
<%
13
}
14
%>
15
</
table
>
01
<%@ page contentType="text/html;charset=utf-8"%>
02
<%@ page import="java.util.*"%>
03
<%
04
// 取得登录的用户名
05
String username = (String) session.getAttribute("username");
06
// 销毁session
07
session.invalidate();
08
// 从在线列表中删除用户名
09
List onlineUserList = (List) application.getAttribute("onlineUserList");
10
onlineUserList.remove(username);
11
// 成功
12
response.sendRedirect("index.jsp");
13
%>
01
package
com.test;
02
03
import
java.util.List;
04
import
javax.servlet.ServletContext;
05
import
javax.servlet.http.HttpSession;
06
import
javax.servlet.http.HttpSessionEvent;
07
import
javax.servlet.http.HttpSessionListener;
08
/**
09
* @author 版本
10
*/
11
public
class
OnlineUserListener
implements
HttpSessionListener {
12
13
public
void
sessionCreated(HttpSessionEvent event) {
14
System.out.println(
"新建session:"
+event.getSession().getId());
15
}
16
public
void
sessionDestroyed(HttpSessionEvent event) {
17
HttpSession session = event.getSession();
18
ServletContext application = session.getServletContext();
19
// 取得登录的用户名
20
String username = (String) session.getAttribute(
"username"
);
21
// 从在线列表中删除用户名
22
List onlineUserList = (List) application.getAttribute(
"onlineUserList"
);
23
onlineUserList.remove(username);
24
System.out.println(username+
"已经退出!"
);
25
}
26
}
1
<
listener
>
2
<
listener-class
>com.test.OnlineUserListener</
listener-class
>
3
</
listener
>
01
<%@page import="com.test.OnlineUserBindingListener"%>
02
<%@ page contentType="text/html;charset=utf-8"%>
03
<%@ page import="java.util.*"%>
04
<%
05
request.setCharacterEncoding("UTF-8");
06
// 取得登录的用户名
07
String username = request.getParameter("username");
08
// 把用户名放入在线列表
09
session.setAttribute("onlineUserBindingListener", new OnlineUserBindingListener(username));
10
// 成功
11
response.sendRedirect("result.jsp");
12
%>
01
package
com.test;
02
03
import
java.util.ArrayList;
04
import
java.util.List;
05
import
javax.servlet.ServletContext;
06
import
javax.servlet.http.HttpSession;
07
import
javax.servlet.http.HttpSessionBindingEvent;
08
import
javax.servlet.http.HttpSessionBindingListener;
09
10
public
class
OnlineUserBindingListener
implements
HttpSessionBindingListener {
11
String username;
12
13
public
OnlineUserBindingListener(String username){
14
this
.username=username;
15
}
16
public
void
valueBound(HttpSessionBindingEvent event) {
17
HttpSession session = event.getSession();
18
ServletContext application = session.getServletContext();
19
// 把用户名放入在线列表
20
List onlineUserList = (List) application.getAttribute(
"onlineUserList"
);
21
// 第一次使用前,需要初始化
22
if
(onlineUserList ==
null
) {
23
onlineUserList =
new
ArrayList();
24
application.setAttribute(
"onlineUserList"
, onlineUserList);
25
}
26
onlineUserList.add(
this
.username);
27
}
28
29
public
void
valueUnbound(HttpSessionBindingEvent event) {
30
HttpSession session = event.getSession();
31
ServletContext application = session.getServletContext();
32
33
// 从在线列表中删除用户名
34
List onlineUserList = (List) application.getAttribute(
"onlineUserList"
);
35
onlineUserList.remove(
this
.username);
36
System.out.println(
this
.username +
"退出。"
);
37
38
}
39
40
}
发表评论
-
[转]Spring Cloud微服务的那点事
2018-04-20 21:58 678转自:https://blog.csdn.ne ... -
[转]ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
2018-04-20 17:10 880本文转自:https://my.oschin ... -
生成无重复的hashid短地址(短随机字符串)
2017-04-26 14:57 2192具体查看项目: http://hashids.org/j ... -
2017年Struts漏洞修复:版本从2.3.15.1升级到2.3.32
2017-03-24 15:10 2009如果你当前的项目使用了Struts2.3.5至 Strut ... -
多线程爬虫Miner [转]
2016-08-01 13:49 835多线程爬虫Miner 本文转自原作者博客:http:/ ... -
JAVA关键字替换
2015-11-03 21:22 1049import java.util.ArrayList; ... -
关于java web前后端分离
2015-08-27 22:47 1937由于公司架构上需要前后端分离,这里先记录一下相关内容,待后 ... -
基于NODEJS的前后端项目分离实践
2015-06-17 14:07 1201前后端分离项目实践 本文转自:http://jiangxi ... -
paypal IPN返回
2015-05-28 10:12 20641.设定返回的地址 目标:登录paypal-->用户 ... -
根据class搜索jar包
2015-05-20 13:00 881http://grepcode.com/ -
基于DWR的点对点聊天实现 server---client
2015-04-28 16:53 1133本文转自:http://htj1231825.iteye.c ... -
Java分布式中文分词组件word分词v1.2发布
2015-04-20 12:07 808word分词是一个Java实现的分布式的中文分词组件,提供了 ... -
java开源论坛jeebbsV4发布
2015-04-08 09:56 620论坛APP的帖子新展现形式 APP即时聊天模块 ... -
开源大数据解决方案
2015-03-12 13:01 1071解决方案 开发商 类型 描述 Storm Twit ... -
根据用户IP查询所属国家(数据库版)-geoip
2015-03-06 14:44 1191关键词:geoip,最新版本GeoIP2 http:// ... -
查询用户IP所在地服务接口(淘宝)
2015-03-04 10:17 1078import java.io.BufferedReader; ... -
java内存溢出优化
2014-12-28 12:42 2194本文转自:http://www.importnew.com ... -
Tomcat6线程池(Executor Thread pool)的配置
2014-12-27 01:07 919原文地址:http://www.java2000.net/p ... -
Netty学习系列导航-开源Java高性能NIO框架推荐
2014-08-13 17:49 1347纯记录,事件驱动服务器和客户端设计: http://mus ... -
破解验证码相关:用imagemagick和tesseract-ocr破解简单验证码
2014-08-13 17:08 2958本文源自:http://hooopo.iteye.com/ ...
相关推荐
jsp 统计在线人数实例,是个完整的项目实例,部署即可查看效果! 通过使用:HttpSessionListener、HttpSessionBindingListener来实现. valueBound 方法登录触发。 valueUnbound 方法退出触发。
在此方法内可以实现统计在线人数的逻辑,每当一个新session创建时,在线人数计数增加。 2. `sessionDestroyed(HttpSessionEvent event)`:当HttpSession即将从与当前请求相关联的会话中移除时触发此方法。此方法适用...
- 使用`HttpSessionListener`可以监控用户登录状态的变化,及时更新在线用户列表,从而确保各个子系统之间共享正确的用户状态信息。 - 通过`HttpSessionBindingListener`可以在用户登录时绑定必要的认证信息至会话中...
下面将详细介绍如何使用`HttpSessionListener`来实现这些功能。 首先,我们需要创建一个类并实现`HttpSessionListener`接口。这个类必须包含两个方法:`sessionCreated(HttpSessionEvent se)`和`sessionDestroyed...
在这个场景下,我们关注的是如何利用监听器来实现在线人数的统计。在线人数统计是一项重要的功能,特别是在构建实时交互的Web应用或者聊天室时,能够提供实时的用户活跃度信息。 首先,我们需要理解业务需求。当...
`HttpSessionBindingListener`接口提供了一种优雅的方式来跟踪用户的在线状态,从而实现统计在线用户数的功能。这篇文章将详细讲解如何利用`HttpSessionBindingListener`来获取在线用户数。 首先,我们需要理解`...
以上就是使用JSP实现在线人数统计的基本方法和关键点,具体实现可能需要根据项目需求和环境进行调整。在实际开发中,还要考虑到性能、可扩展性和用户体验等因素,确保统计的准确性和系统的稳定性。
以上就是利用`HttpSessionListener`实现在线人数统计的基本步骤和原理,通过结合Java后端和JavaScript前端,可以实现动态、实时的在线用户统计功能。这种方法简单实用,但在高并发场景下可能需要优化,以避免频繁的...
3. SessionCounter类:在本示例代码中,定义了一个SessionCounter类,该类实现了HttpSessionListener接口,用于统计在线人数。该类有三个方法:sessionCreated、sessionDestroyed和getActiveSessions,分别用于统计...
用户登录时,调用LoginServlet,将用户名写入application的在线用户列表中,用户退出时,调用LogoutServlet,调用session.invalidate(),交给HttpSessionListener的sessionDestroyed()方法,将用户从在线列表中删除。...
本文将深入探讨如何使用Java Web技术来监听并统计在线人数。 1. **HTTP与Session** HTTP协议本身是无状态的,无法直接追踪用户的会话。为了在多个请求之间保持用户状态,Web服务器引入了Session机制。每当用户打开...
为了实现在线人数统计,我们首先需要创建一个监听器类`OnLineDemo.java`,该类实现了`ServletContextListener`、`HttpSessionListener`和`HttpSessionAttributeListener`接口。 1. **监听器类`OnLineDemo.java`**:...
此类通过监听器实现了在线人数统计,其原理很简单,就是每当增加一个HttpSession时就触发了实现HttpSessionListener接口的类的SessionCreated()方法,使在线人数加1....
以上就是通过`HttpSessionListener`统计在线人数的基本原理和实现步骤。在实际应用中,你可能还需要根据项目需求进行相应的调整和优化,比如增加日志记录、异常处理等。项目中的`SessionListener`类应该包含了实现...
本项目"ex.zip_JSP在线人数统计_ex"显然关注的是如何在JSP环境中实现一个在线人数统计功能。这一功能对于网站管理员来说非常有用,能够实时了解当前访问网站的用户数量,从而对服务器性能进行优化或调整。 首先,...
Java监听器实现在线人数统计的知识点主要包括以下几个方面: 1. Java监听器概念:在Java Web应用程序中,监听器是一种特殊的Java类,它可以监听Web应用中的特定事件。这些事件包括:上下文初始化事件、会话创建和...
综上所述,J2EE登录人数统计不仅涉及了`HttpSession`与`HttpSessionListener`的基本使用,还牵涉到了并发控制、性能优化等高级话题。合理的设计与实现能够极大地提升用户体验,同时保证系统的稳定性和效率。
在这个小型案例中,我们使用了Java Servlet中的`HttpSessionListener`和`HttpSessionBindingListener`接口来实现这一功能。以下是对这两个接口以及整个案例的详细解释: 1. **`HttpSessionListener`接口**: `...
在这个场景中,我们将探讨如何使用`ServletContextListener`来实现在线人数的统计和显示人员列表的功能。 首先,让我们了解一下`ServletContextListener`的基本用法。要创建一个`ServletContextListener`,你需要...
随着技术的发展,使用Java语言实现在线人数统计也变得可行,而实现的方式之一就是通过Java的监听器。 监听器是Java Servlet规范中的一部分,它是一种特殊的对象,能够在某些特定的事件发生时得到通知。对于在线人数...