Java监听器学习 统计当前在线人数
2016-12-01 20:23
447 查看
javax.servlet.http.HttpSession 这个类是很常用的,每当我们浏览网站,不论有没有登陆,都会产生1个session,它记录了和浏览者相关的数据;
下面介绍session的2个监听器接口:
1)javax.servlet.http.HttpSessionBindingListener;
实现这个接口的类,每当被存放到session或从session中移除都会出发接口中相应的方法,从而实现监听的效果;
2)javax.servlet.http.HttpSessionListener;
实现这个接口的类,本身就是1个监听器,每当有session生成或消亡时,都触发接口中相应的方法,从而实现监听器的效果;
HttpSessionListener 的实现类本身就是一个监听器,要使用它需要在 web.xml 中启动这个监听器,例如
Xml代码
<listener>
<listener-class>packname.classname</listener-class>
</listener>
3)这2个监听器是有区别的
前者的触发取决于 session 中加入的属性;
后者的触发取决于 session 本身的产生和消亡;
与shangshu 之类似的还有
对ServletContext的监听和对Request监听
应用:当前在线人数列表
在线人数列表是对所有人起作用,数据应放到application中。即ServletContext对象
OnLineDemo.java
Java代码
package demo;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class OnlineDemo implements ServletContextListener, HttpSessionListener,
HttpSessionAttribu
101c2
teListener {
// 声明一个ServletContext对象
private ServletContext application = null;
public void contextInitialized(ServletContextEvent sce) {
// 容器初始化时,向application中存放一个空的容器
this.application = sce.getServletContext();
this.application.setAttribute("alluser", new ArrayList());
}
public void contextDestroyed(ServletContextEvent sce) {
}
public void sessionCreated(HttpSessionEvent se) {
}
public void sessionDestroyed(HttpSessionEvent se) {
// 将用户名称从列表中删除
List l = (List) this.application.getAttribute("alluser");
String value = (String) se.getSession().getAttribute("uname");
l.remove(value);
this.application.setAttribute("alluser", l);
}
public void attributeAdded(HttpSessionBindingEvent se) {
// 如果登陆成功,则将用户名保存在列表之中
List l = (List) this.application.getAttribute("alluser");
l.add(se.getValue());
this.application.setAttribute("alluser", l);
}
public void attributeRemoved(HttpSessionBindingEvent se) {
}
public void attributeReplaced(HttpSessionBindingEvent se) {
}
}
online.jsp
Html代码
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<form action="online.jsp" method="post">
用户名:
<input type="text" name="name">
<input type="submit" value="登陆">
<a href="logout.jsp">注销</a>
</form>
<!-- 向session接收输入的用户名 -->
<%
if(request.getParameter("name")!=null)
session.setAttribute("uname",request.getParameter("name")) ;
%>
<h2>在线人员</h2>
<hr>
<%
List l = (List)application.getAttribute("allUser");
for(Object o : l)
out.println(o);
%>
logout.jsp
Html代码
<%
session.invalidate() ;
%>
下面介绍session的2个监听器接口:
1)javax.servlet.http.HttpSessionBindingListener;
实现这个接口的类,每当被存放到session或从session中移除都会出发接口中相应的方法,从而实现监听的效果;
2)javax.servlet.http.HttpSessionListener;
实现这个接口的类,本身就是1个监听器,每当有session生成或消亡时,都触发接口中相应的方法,从而实现监听器的效果;
HttpSessionListener 的实现类本身就是一个监听器,要使用它需要在 web.xml 中启动这个监听器,例如
Xml代码
<listener>
<listener-class>packname.classname</listener-class>
</listener>
3)这2个监听器是有区别的
前者的触发取决于 session 中加入的属性;
后者的触发取决于 session 本身的产生和消亡;
与shangshu 之类似的还有
对ServletContext的监听和对Request监听
应用:当前在线人数列表
在线人数列表是对所有人起作用,数据应放到application中。即ServletContext对象
OnLineDemo.java
Java代码
package demo;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class OnlineDemo implements ServletContextListener, HttpSessionListener,
HttpSessionAttribu
101c2
teListener {
// 声明一个ServletContext对象
private ServletContext application = null;
public void contextInitialized(ServletContextEvent sce) {
// 容器初始化时,向application中存放一个空的容器
this.application = sce.getServletContext();
this.application.setAttribute("alluser", new ArrayList());
}
public void contextDestroyed(ServletContextEvent sce) {
}
public void sessionCreated(HttpSessionEvent se) {
}
public void sessionDestroyed(HttpSessionEvent se) {
// 将用户名称从列表中删除
List l = (List) this.application.getAttribute("alluser");
String value = (String) se.getSession().getAttribute("uname");
l.remove(value);
this.application.setAttribute("alluser", l);
}
public void attributeAdded(HttpSessionBindingEvent se) {
// 如果登陆成功,则将用户名保存在列表之中
List l = (List) this.application.getAttribute("alluser");
l.add(se.getValue());
this.application.setAttribute("alluser", l);
}
public void attributeRemoved(HttpSessionBindingEvent se) {
}
public void attributeReplaced(HttpSessionBindingEvent se) {
}
}
online.jsp
Html代码
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<form action="online.jsp" method="post">
用户名:
<input type="text" name="name">
<input type="submit" value="登陆">
<a href="logout.jsp">注销</a>
</form>
<!-- 向session接收输入的用户名 -->
<%
if(request.getParameter("name")!=null)
session.setAttribute("uname",request.getParameter("name")) ;
%>
<h2>在线人员</h2>
<hr>
<%
List l = (List)application.getAttribute("allUser");
for(Object o : l)
out.println(o);
%>
logout.jsp
Html代码
<%
session.invalidate() ;
%>
相关文章推荐
- Java监听器学习 统计当前在线人数
- 使用java 监听器实现在线人数统计
- 利用java监听器实现在线人数统计
- java创建一个统计在线人数的监听器
- java监听器示例-统计在线人数
- Java监听器实现网站在线人数统计
- java使用监听器实现一个统计网站在线人数的示例
- Java统计学习之道:统计java网站访问量和在线人数
- java web监听器统计在线用户及人数
- 用java统计网站在线人数
- session监听器 统计在线人数 2
- 监听器配置,java监听器,登陆监听,Listener,struts监听器配置,用户在线统计
- servlet+java+jsp实现在线人数的统计
- 使用监听器实现一个统计网站在线人数的示例
- 监听器--ServletRequestListener接口实现统计在线人数
- 监听器统计网站在线人数与在线会员数
- java统计当前在线数
- 用session监听器统计在线人数和在线人列表
- 监听器(实现在线统计人数,踢人)
- 简单的java web 统计在线人数实现方法