jsp+servlet+java 实现统计在线人数

 

首先:jsp ----------------------------index.jsp

我要现在index.jsp 写一段 JavaScript

<html>

<head>

<script type="text/javascript">

window.onbeforeunload = function() //author: meizz
{
var n = window.event.screenX - window.screenLeft;
var b = n > document.documentElement.scrollWidth-20;
if(b && window.event.clientY < 0 || window.event.altKey)
{

location.href="SessionInvalidate" ;// SessionInvalidate 是一个处理 session 失效的Servlet
}

}

</script>

</head>

<body>

<form action="LoginAction" method="post">

<input type="text" name="username">

<input type="password" name="password">

<input type="sunmit">

</form>

</body>

</html>

LoginAction --------------------------------------------------------------------

package com.dkp.servlet;

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 com.dkp.bean.Users;
import com.dkp.dao.UsersDao;
import com.dkp.dao.impl.UsersDaoImpl;

public class LoginAction extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

String username = request.getParameter("username");// 获得username
String password = request.getParameter("password");// 获得password
UsersDao usersDao = new UsersDaoImpl(); // 创建对象 这是我的验证用户的dao 和他的IMpl(实现)
Users user = usersDao.findUserByUsername(username); // 根据用户名返回用户

if (user != null && user.getPassword().equals(password)) { // 判断返回的用户是不是为空,并且用户的密码和输入的密码是不是一致
// 如果用户不为空,并且密码一样
HttpSession session = request.getSession();
//把用户放进session
session.setAttribute("users", user);
response.sendRedirect("index.jsp");
return;
} else {
response.sendRedirect("index.jsp");
}
}
}

SessionInvalidate-------------------------------------------

package com.dkp.servlet;

import java.io.IOException;

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 com.dkp.action.OnlineUser;

public class SessionInvalidate extends HttpServlet {

/**
*
*/
private static final long serialVersionUID = -2799996612094958606L;

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
session.removeAttribute("users");
session.invalidate();
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

----------------------OnlineUser -----------这个类是最主要的 onlineUser 是一个session的监听器

package com.dkp.action;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import com.dkp.bean.Users;

public class OnlineUser implements HttpSessionListener,
HttpSessionAttributeListener {
private static int activeSessions = 0;
private static Map<String,Users> online=new HashMap<String,Users>();
public static Map<String,Users> getOnline() {
return online;
}

public static int getActiveSessions() {
return activeSessions;
}

public void attributeAdded(HttpSessionBindingEvent event) {
if (event.getName().equals("users")) {
System.out.println("User logged in.");
Users users = (Users) event.getSession().getAttribute("user");

online.put(event.getSession().getId(),users);
}
}

public synchronized void attributeRemoved(HttpSessionBindingEvent event) {
if (event.getName().equals("users")) {
System.out.println("User logged out.");
online.remove(event.getSession().getId());
}
}

public void attributeReplaced(HttpSessionBindingEvent event) {
}

public void sessionCreated(HttpSessionEvent event) {
activeSessions++;
System.out.println("有人来了");
}

public void sessionDestroyed(HttpSessionEvent event) {
if (activeSessions > 0) {
activeSessions--;
System.out.println("有人走了");
}
}
}

-------------------------------------------下面是web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>com.dkp.action.OnlineUser</listener-class>
</listener>
<servlet>
<description>退出</description>
<display-name>退出</display-name>
<servlet-name>SessionInvalidate</servlet-name>
<servlet-class>com.dkp.servlet.SessionInvalidate</servlet-class>
</servlet>
<servlet>
<description>登录</description>
<display-name>登录</display-name>
<servlet-name>LoginAction</servlet-name>
<servlet-class>com.dkp.servlet.LoginAction</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>SessionInvalidate</servlet-name>
<url-pattern>/SessionInvalidate</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LoginAction</servlet-name>
<url-pattern>/LoginAction</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>admin/index.jsp</welcome-file>
</welcome-file-list>
</web-app>

转载于:https://www.cnblogs.com/xzyeah/archive/2009/04/28/1445723.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 文件系统详解

From&#xff1a;http://soysauce93.blog.51cto.com/7589461/1715655 From&#xff1a;http://blog.csdn.net/new0801/article/details/63687127 Linux 的虚拟文件系统(强烈推荐)&#xff1a;http://blog.csdn.net/heikefangxian23/article/details/51579971 鸟哥 Linux 磁盘…

国际互联网协会(ISOC)提出未来互联网十项原则

来源&#xff1a;腾讯研究院此前&#xff0c;国际互联网协会&#xff08;Internet Society&#xff0c;简称ISOC&#xff09;发布了题为《通往数字化未来之路&#xff08;Paths to Our Digital Future&#xff09;》的报告&#xff0c;就数字化未来的道路进行了探索。ISOC认为&…

不错的html学习网址。

http://htmlplayground.com/ 转载于:https://www.cnblogs.com/techfootsprints/archive/2009/04/28/1445774.html

Spring Data JPA 从入门到精通~javax.persistence概况介绍

虽然 Spring Data JPA 已经对数据的操作封装的很好了&#xff0c;约定大于配置的思想&#xff0c;帮我们默认了很多东西。JPA&#xff08;Java 持久性 API&#xff09;是存储业务实体关联的实体的来源&#xff0c;它显示了如何定义一个面向普通 Java 对象&#xff08;POJO&…

java equals 判断空_Java 判断字符串是否为空的三种方法与性能分析

[java中判断字符串是否为数字的三种方法 1>用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i str.length();--i>0;){ if (!CharactJava 判断字符串是否为空的三种方法与性能分析Java编程过程中经常会涉及到判断空字符串的问题&#x…

Linux安装配置类似mac下的docky

百度经验&#xff1a;ubuntu安装配置类似mac下的docky 亲手打造自己的Linux桌面环境&#xff1a;http://os.51cto.com/art/201510/493896_all.htm Dock是一种图形用户界面元素&#xff0c;允许用户一键访问常用的应用程序&#xff0c;在应用程序之间快速切换&#xff0c;以及…

埃森哲:2018年科技愿景

来源&#xff1a;199IT互联网数据中心埃森哲近日发布了新报告“2018年科技愿景”&#xff0c;分析了五大技术趋势让企业能够挖掘潜力&#xff0c;创造新的商业机会并帮助改变我们所知道的世界。1公民AI&#xff08;人工智能&#xff09;AI随处可见&#xff0c;在整个社会范围内…

IT人不要一直做技术(转--我也不知道转了几圈了)

【引子】感觉这篇文章很有深意&#xff0c;正是我所想说的话。希望大家有借鉴。 【原文】 我现在是自己做&#xff0c;但我此前有多年在从事软件开发工作&#xff0c;当回过头来想一想自己&#xff0c;觉得特别想对那些初学JAVA/DOT。NET技术的朋友说点心里话&#xff0c;希望你…

java 导出excel教程_Java导出Excel表格

Java导出Excel表格 导出Excel表格需要一个poi-3.9.jar的包&#xff0c;该包在网上可以找到。第一步&#xff0c;创建Excel对象。 HSSFWorkbook workbook new HSSFWorkbook();创建一个工作表。 HSSFSheet sheet workbook.createSheet("日常收入报表");创建合并单元格…

Spring Data JPA 从入门到精通~基本注解

Entity、Table、Id、GeneratedValue、Basic、Column、Transient、Lob、Temporal 先看一个 Blog 的案例其中实体的配置如下&#xff1a; Entity Table(name "user_blog", schema "test") public class UserBlogEntity {IdColumn(name "id", …

大数据竞赛平台——Kaggle 入门

From&#xff1a;http://blog.csdn.net/u012162613/article/details/41929171 大数据竞赛平台——Kaggle 入门篇 这篇文章适合那些刚接触Kaggle、想尽快熟悉Kaggle并且独立完成一个竞赛项目的网友&#xff0c;对于已经在Kaggle上参赛过的网友来说&#xff0c;大可不必耗费时间…

俄罗斯智库 | 人工智能在军事领域的发展现状及应用前景

本文来自&#xff1a;知远战略与防务研究所原文来自&#xff1a;俄罗斯外交和国防政策委员会网站人工智能在军事领域的发展现状及应用前景本文主要介绍了当今世界及俄罗斯本国人工智能技术发展的现状以及未来该技术在军事领域的应用前景&#xff0c;文章还重点分析了人工智能技…

Internet Explorer 8 使用技巧(3):安全上网

如何上网更安全&#xff1f; 听说过“网络钓鱼”吗&#xff1f;最简单的例子&#xff1a;有不法分子模仿真实的银行网站做了个一模一样的&#xff0c;然后通过邮件或其他方式骗你登录并输入银行账号和密码&#xff0c;结果信息泄露&#xff0c;钱被盗走——这就是最典型的“钓鱼…

java 常量折叠_深入理解Java虚拟机之早期编译器优化

Javac编译器Javac编译器是一个由Java语言编写的程序Javac的源码与调试从Sun Javac的代码来看&#xff0c;编译器大致分为3个过程&#xff1a;解析与填充符号表的过程插入式注解处理器的注解处理过程分析与字节码生成的过程Javac编译动作的入口为com.sun.tools.javac.main.JavaC…

Spring Data JPA 从入门到精通~JpaRepository介绍

从 JpaRepository 开始的子类&#xff0c;都是 Spring Data 项目对 JPA 实现的封装与扩展。JpaRepository 本身继承 PagingAndSortingRepository 接口&#xff0c;是针对 JPA 技术的接口&#xff0c;提供 flush()、saveAndFlush()、deleteInBatch()、deleteAllInBatch() 等方法…

深入理解程序从编译到运行

From&#xff1a;http://blog.chinaunix.net/uid-22327815-id-3540305.html 从 Hello World 说程序运行机制&#xff1a;http://www.sohu.com/a/132798003_505868 C/C 中如何在 main() 函数之前执行一条语句&#xff1f;&#xff1a;https://www.zhihu.com/question/26031933 …

用VML画图(一些基本的矢量图)(转)

用VML画图(一些基本的矢量图) 注&#xff1a;其中所有的left:top:都是针对图左上角的&#xff0c;比如圆&#xff0c;他的左上角应该是以圆为中心的矩形的左上角 1.line(直线) a.示例&#xff1a; <html xmlns:v"urn:schemas-microsoft-com:vml"> <head>…

技术力量 | 社会计算与计算社会: 智慧社会的基础与必然

来源&#xff1a;智慧城市决策参考摘要&#xff1a;基于社会计算&#xff0c;智慧社会可充分利用开放流动的大数据资源, 综合协调人、地、事、物和组织等各种要素, 形成信息对称、权利对等、扁平化组织的社会结构, 推动传统社会管理模式向分布式、集约化、信息化、智能化、全响…

php关闭当前页_php如何直接关闭页面注销SESSION

php如何直接关闭页面注销SESSION发布时间&#xff1a;2020-07-09 09:03:06来源&#xff1a;亿速云阅读&#xff1a;100作者&#xff1a;Leah这篇文章将为大家详细讲解有关php如何直接关闭页面注销SESSION&#xff0c;文章内容质量较高&#xff0c;因此小编分享给大家做个参考&a…

ELF格式文件符号表全解析及readelf命令使用方法

From&#xff1a;http://blog.csdn.net/yasi_xi/article/details/45197583 readelf命令&#xff1a;http://man.linuxde.net/readelf ELF文件格式解析&#xff1a;https://www.2cto.com/kf/201605/511370.html ELF文件格式解析&#xff1a;http://blog.csdn.net/earbao/arti…