统计在线用户 踢人

原创 2015年07月07日 23:36:19


2014年9月8日 16:55:13





<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
 
</head>
<body>
<c:if test="${sessionScope.user==null}">
<form action="${pageContext.request.contextPath}/servlet/LoginServlet" method="post">
username:<input type="text" name="username"/>(用户名不能重复,且不能为空)<br/>
<input type="submit" value="登录"/>
</form>
</c:if>
<c:if test="${sessionScope.user!=null}">
欢迎您:${sessionScope.user.username}<a href="#">注销</a>
</c:if>
<a href="onlineuser.jsp">在线用户</a>
</body>
</html>



package cn.itcast.domain;
 
import java.io.Serializable;
 
public class User implements Serializable {
private String username;
 
public String getUsername() {
return username;
}
 
public void setUsername(String username) {
this.username = username;
}
}



package cn.itcast.web.controller;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import cn.itcast.domain.User;
 
public class LoginServlet extends HttpServlet {
 
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//取到用户名:
String username = request.getParameter("username");
//验证用户是否合法(略)
User user = new User();
user.setUsername(username);
//正确:放到HttpSession中
HttpSession session = request.getSession();
session.setAttribute("user", user);
out.write("登录成功");
}
 
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
 
doGet(request, response);
}
 
}





package cn.itcast.domain;
 
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
 
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
//此处核心代码
public class OnlineUserListener implements HttpSessionAttributeListener {
//只要向HttpSession的域中放东东都会执行该方法
//我们要的是放的是User对象,标记还是user的东东
//找个地方存起来:容器要求唯一;页面上还能访问到该容器
public synchronized void attributeAdded(HttpSessionBindingEvent se) {
//找到存储的是user标记,且绑定的对象时User类
HttpSession session = se.getSession();
ServletContext sc = session.getServletContext();
Object obj = session.getAttribute("user");
if(obj!=null&&obj instanceof User){
//向容器中存起来
Map<String,HttpSession> map = (Map<String, HttpSession>) sc.getAttribute("users");//存放东东的容器(Map<String,HttpSession>.key:用户名;value:HttpSession对象)
if(map==null){
map = new HashMap<String, HttpSession>();//Collections.synchronizedMap(map)
sc.setAttribute("users", map);
}
map.put(((User)obj).getUsername(), session);
}
}
 
public synchronized void attributeRemoved(HttpSessionBindingEvent se) {
}
 
public void attributeReplaced(HttpSessionBindingEvent se) {
 
}
 
}



<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
 
</head>
<body>
<h1>在线用户</h1>
<c:if test="${empty applicationScope.users}">
对不起!没有在线用户
</c:if>
<c:if test="${!empty applicationScope.users}">
<c:forEach items="${applicationScope.users}" var="me">
<c:url value="/servlet/KickServlet" var="url">
<c:param name="username" value="${me.key}"></c:param>
</c:url>
${me.key}  <a href="${url}">踢出</a><br/>
</c:forEach>
</c:if>
</body>
</html>




package cn.itcast.web.controller;
 
import java.io.IOException;
import java.util.Map;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
//踢人
public class KickServlet extends HttpServlet {
 
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext sc = getServletContext();
Map<String, HttpSession> users = (Map<String, HttpSession>) sc.getAttribute("users");
if(users!=null){
String username = request.getParameter("username");
username = new String(username.getBytes("ISO-8859-1"),"UTF-8");
HttpSession s = users.get(username);
if(s!=null){
s.invalidate();
users.remove(username);
}
}
response.sendRedirect(request.getContextPath()+"/onlineuser.jsp");
}
 
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
 
doGet(request, response);
}
 
}
2014年9月8日 16:55:13






<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
 
</head>
<body>
<c:if test="${sessionScope.user==null}">
<form action="${pageContext.request.contextPath}/servlet/LoginServlet" method="post">
username:<input type="text" name="username"/>(用户名不能重复,且不能为空)<br/>
<input type="submit" value="登录"/>
</form>
</c:if>
<c:if test="${sessionScope.user!=null}">
欢迎您:${sessionScope.user.username}<a href="#">注销</a>
</c:if>
<a href="onlineuser.jsp">在线用户</a>
</body>
</html>



package cn.itcast.domain;
 
import java.io.Serializable;
 
public class User implements Serializable {
private String username;
 
public String getUsername() {
return username;
}
 
public void setUsername(String username) {
this.username = username;
}
}



package cn.itcast.web.controller;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import cn.itcast.domain.User;
 
public class LoginServlet extends HttpServlet {
 
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//取到用户名:
String username = request.getParameter("username");
//验证用户是否合法(略)
User user = new User();
user.setUsername(username);
//正确:放到HttpSession中
HttpSession session = request.getSession();
session.setAttribute("user", user);
out.write("登录成功");
}
 
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
 
doGet(request, response);
}
 
}





package cn.itcast.domain;
 
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
 
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
//此处核心代码
public class OnlineUserListener implements HttpSessionAttributeListener {
//只要向HttpSession的域中放东东都会执行该方法
//我们要的是放的是User对象,标记还是user的东东
//找个地方存起来:容器要求唯一;页面上还能访问到该容器
public synchronized void attributeAdded(HttpSessionBindingEvent se) {
//找到存储的是user标记,且绑定的对象时User类
HttpSession session = se.getSession();
ServletContext sc = session.getServletContext();
Object obj = session.getAttribute("user");
if(obj!=null&&obj instanceof User){
//向容器中存起来
Map<String,HttpSession> map = (Map<String, HttpSession>) sc.getAttribute("users");//存放东东的容器(Map<String,HttpSession>.key:用户名;value:HttpSession对象)
if(map==null){
map = new HashMap<String, HttpSession>();//Collections.synchronizedMap(map)
sc.setAttribute("users", map);
}
map.put(((User)obj).getUsername(), session);
}
}
 
public synchronized void attributeRemoved(HttpSessionBindingEvent se) {
}
 
public void attributeReplaced(HttpSessionBindingEvent se) {
 
}
 
}



<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
 
</head>
<body>
<h1>在线用户</h1>
<c:if test="${empty applicationScope.users}">
对不起!没有在线用户
</c:if>
<c:if test="${!empty applicationScope.users}">
<c:forEach items="${applicationScope.users}" var="me">
<c:url value="/servlet/KickServlet" var="url">
<c:param name="username" value="${me.key}"></c:param>
</c:url>
${me.key}  <a href="${url}">踢出</a><br/>
</c:forEach>
</c:if>
</body>
</html>




package cn.itcast.web.controller;
 
import java.io.IOException;
import java.util.Map;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
//踢人
public class KickServlet extends HttpServlet {
 
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext sc = getServletContext();
Map<String, HttpSession> users = (Map<String, HttpSession>) sc.getAttribute("users");
if(users!=null){
String username = request.getParameter("username");
username = new String(username.getBytes("ISO-8859-1"),"UTF-8");
HttpSession s = users.get(username);
if(s!=null){
s.invalidate();
users.remove(username);
}
}
response.sendRedirect(request.getContextPath()+"/onlineuser.jsp");
}
 
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
 
doGet(request, response);
}
 
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

用户在线踢人

index.jsp:   用户登录           欢迎${requestScopse.user.username}  注销     loggin.jsp 用户...
  • hcq__yy
  • hcq__yy
  • 2013年10月05日 22:38
  • 442

JavaWeb实例:记录在线人员信息,管理员可以踢人

总的需求:   1、使用HttpSessionListener记录在线人数。 2、使用HttpSessionAttributeListener记录登录人数。 3、 将用户踢出系统。     成果展示:...
  • zuosixiaonengshou
  • zuosixiaonengshou
  • 2016年12月17日 11:07
  • 1355

java实现在线用户统计

我们一般的问法是这样:在一个门户网站,且没有登录的情况下要如何统计出在线人数。很多人给我的答案大多是拦首页等或别的页面,当然这个是不行的。还有的答法是用过滤器,这个或许可以,但至今我没有试过。 我们...
  • u012173884
  • u012173884
  • 2015年06月02日 09:23
  • 1098

一个统计当前在线用户的解决方案,可以在聊天室、论坛、网站中使用

 在做一个在线交流的网站时,有个问题很令我头疼,就是关于实时统计在线用户的问题,客户要求:统计当前在线人数、游客人数、会员人数、在线用户列表,包括游客、会员和管理员(如果是游客,则自动生成游客的ID,...
  • frostnet
  • frostnet
  • 2007年04月23日 21:34
  • 437

在线登录用户统计

在线登录用户统计只统计登录后的在线用户,忽略未登录的用户,并且同一帐号不允许多次登录,即当用户登录时,如果该用户帐号已经在其他地方登录,则自动踢出之前登录的用户。登录标识为Session中logonU...
  • zh2qiang
  • zh2qiang
  • 2011年09月24日 15:21
  • 1886

用户在线登录时长统计

突然接到个任务,让统计用户连续在线的时长,写个简单的脚本来做个记录:...
  • yusimiao
  • yusimiao
  • 2014年05月22日 19:12
  • 5979

SAP直接踢人下线 SM04

  • zhongguomao
  • zhongguomao
  • 2016年06月08日 16:17
  • 1658

java web监听器统计在线用户及人数

在线用户使用HttpSessionListener监听器统计   每当一个session会话建立  在线用户人数+1 每当一个session会话销毁 在线用户人数-1 使用Servlet...
  • su20145104009
  • su20145104009
  • 2016年11月18日 16:04
  • 7885

安卓开发统计用户在线时长

有3种方案: 1、客户端定时发送请求到服务器端。实现方法是在用户登录后,将uid,session_id,login_time插入一条记录,然后在客户端js设定一个计时器,比如每10分钟向服务器端发送...
  • ithouse
  • ithouse
  • 2016年06月13日 17:39
  • 2342

实现统计在线用户的几种方式

一,每次用户操作更新其在线时间 这个方法很直接,在用户表里加一个字段update_time,每次用户进行操作,都更新这个字段为当前时间,一般是在一个被所有Action继承的基类里写这个操作。 然后...
  • sb___itfk
  • sb___itfk
  • 2014年09月02日 19:20
  • 2997
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:统计在线用户 踢人
举报原因:
原因补充:

(最多只允许输入30个字)