(-)使用监听查看在线用户
1 显示层(一)登录界面index.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>index.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<CENTER>
<H2>在线系统</H2>
<FORM action="CheckInfo" method="post">
请输入用户名
<INPUT type="text" name="name"><BR>
请输入密码
<INPUT type="password" name="password"><BR>
<INPUT type="submit" value="登录">
</FORM>
</CENTER>
</body>
</html>
2 显示层(二)index.jsp
<%@ page language="java" import="java.util.*,com.*" pageEncoding="UTF-8"%>
<%@ page import="com.UserListener" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<%
UserList userList=UserList.getUserList();
UserListener ul=new UserListener();
%>
<body>
<CENTER>
<H2>在线用户名单</H2>
<P>
<TEXTAREA rows="10" cols="20">
<%
Vector vector=userList.getList();
if(vector!=null&&vector.size()>0)
{
for(int i=0;i<vector.size();i++)
{
out.println(vector.elementAt(i));
}
}
%>
</TEXTAREA>
</P>
</CENTER>
</body>
</html>
3 Servlet处理层CheckInfo.java
package com;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
public class CheckInfo extends HttpServlet {
private ServletRequest session;
/**
* Constructor of the object.
*/
public CheckInfo() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
// PrintWriter out = response.getWriter();
// out
// .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
// out.println("<HTML>");
// out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
// out.println(" <BODY>");
// out.print(" This is ");
// out.print(this.getClass());
// out.println(", using the POST method");
// out.println(" </BODY>");
// out.println("</HTML>");
// out.flush();
// out.close();
UserList userList=UserList.getUserList();
UserListener ul=new UserListener();
String name=request.getParameter("name");
String password=request.getParameter("password");
//测试
// System.out.println(name);
// System.out.println(password);
if(check(name,password))
{
//System.out.println("haha");
ul.setUser(name);
//System.out.println(name);
//session.setAttribute("list",ul);
request.getSession(true).setAttribute("list",ul);
userList.addUser(ul.getUser());
response.sendRedirect("index.jsp");
}
else
{
response.sendRedirect("error.jsp");
}
}
public boolean check(String name,String password)
{
boolean check=false;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
Connection con=DriverManager.getConnection("jdbc:odbc:myDB");
//String sql="select * from student where username"+"=?"+" and "+"password"+"=?";
String sql="select * from student where username=? and password=?";
PreparedStatement stat=con.prepareStatement(sql);
stat.setString(1,name);
stat.setString(2,password);
ResultSet rs=stat.executeQuery();
if(rs.next())
{
System.out.println("OK");
check=!check;
}
if(con!=null)
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return check;
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occure
*/
public void init() throws ServletException {
// Put your code here
}
}
4 模型层(-)UserList.java
package com;
import java.util.Vector;
public class UserList
{
Vector container;
private static UserList userList=new UserList();
private UserList()
{
container=new Vector();
}
public static UserList getUserList()
{
return userList;
}
public void addUser(String user)
{
if(user!=null)
{
container.addElement(user);
}
}
public Vector getList()
{
return container;
}
public void removeUser(String user)
{
if(user!=null)
{
container.removeElement(user);
}
}
}
5 模型层(二)UserListener.java
package com;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class UserListener implements HttpSessionBindingListener
{
private String user;
private UserList userList=UserList.getUserList();
public UserListener()
{
user="";
}
public void setUser(String user)
{
this.user=user;
}
public String getUser()
{
return user;
}
public void valueBound(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
System.out.println(user+"用户上线");
}
public void valueUnbound(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
userList.removeUser(user);
System.out.println(user+"用户下线");
}
}
6 显示层(三)error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'error.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
错误<A href="index.html">fanhui</A>
</body>
</html>
几点说明
1 需要一个数据库,这里的表名为student
2 使用了HttpSessionBingdingListener接口。此接口是唯一一个不用web.xml中设置的接口
分享到:
相关推荐
在"jsp中监听器实现在线用户统计"这个场景下,我们需要关注的是如何利用监听器来跟踪和管理在线用户。 首先,我们要理解Servlet监听器的概念。Servlet监听器是实现了Java Servlet API中特定接口的Java类,这些接口...
Linux 用户空间使用Netlink监听uevent,不是原理介绍,而是实战demo
程序开发中,经常需要对某些事件进行监听,比如一一个网站页面可能要动态监听当前在线用户有 哪些以及在线总人数,这个就可以使用到Servlet进行监听用户的登陆退出。 3、需求分析 程序开发中,经常需要对某些事件...
总结一下,通过使用`HttpSessionAttributeListener`,我们可以监听登录用户的会话属性,从而动态维护登录用户列表。同时,结合会话管理机制,我们可以实现踢人功能,即强制结束特定用户的会话。这种技术在多人在线...
在Spring boot中通过HttpSessionListener监听器统计在线人数是一种常见的技术实现方式,适用于需要跟踪和管理用户会话状态的Web应用程序。以下是从给定文件中提炼的关键知识点。 首先,了解HttpSessionListener接口...
在本主题“day18 监听器”中,我们将探讨如何利用监听器来统计在线人数、定时销毁超时session、实现session的钝化与活化,以及如何在系统中显示在线用户列表和实现踢人功能,从而防止用户自动登录。同时,还会涉及...
一个自己写的实现单用户登录,单点登录的监听器,一旦新用户登录将会销毁上一个登录用户的session 只需在设置session值之前调用一下重置登录这个方法 值得注意的就是,里面的判断得根据自己的项目中存的session的...
【Java Web 监听器统计在线用户及人数详解】 在Java Web开发中,实时统计在线用户数量是一项重要的功能,这通常涉及到对用户会话(Session)的管理。本篇文章将详细解析如何使用Java Web监听器来实现这一目标。 ...
在本篇中,我们将深入探讨如何使用`KeyListener`接口来监听键盘事件,以便在用户按下、释放或键入特定键时执行相应的代码。 `KeyListener`是Java AWT(Abstract Window Toolkit)包中的一个接口,它提供了处理键盘...
"Android 监听自身卸载,弹出...实现 Android 监听自身卸载,弹出用户反馈调查的功能需要使用 JNI 和 C 语言,通过 fork() 函数创建一个子进程来监视父进程是否被卸载,并使用 am 命令来打开一个 url,卸载调查的网页。
为了更好地理解和管理Session的生命周期及其属性,我们可以使用监听器(Listeners)来实现这一目标。以下是关于使用监听器跟踪Session生命周期和属性的详细解释。 1. **HttpSessionListener**: - `...
总之,通过使用JavaScript监听键盘按下事件,我们能够为用户提供更加丰富和灵活的交互体验。无论是简单的回车键监听,还是复杂的组合键操作,掌握这一技术对于提升网页的交互能力都至关重要。希望本文的介绍能够帮助...
总结起来,通过监听器实现在线人数统计的核心思路是监听用户登录和登出事件,动态更新一个全局计数器。在实际项目中,可能还需要考虑并发控制、异常处理、数据持久化等复杂情况,以确保统计的准确性和稳定性。
Java监听键盘鼠标全局事件是指使用Java语言来监听和处理键盘和鼠标事件的技术。这项技术广泛应用于游戏开发、自动化测试、屏幕阅读器等领域。下面是Java监听键盘鼠标全局事件的详细知识点: 一、Java Native ...
在这个场景下,监听器用于追踪用户的连接状态,从而提供实时的在线用户数量。 首先,我们要理解Java中的监听器接口。Java AWT和Swing库提供了多种事件监听器接口,如ActionListener、MouseListener等,但这里我们...
在Java编程中,监听器(Listener)是一种关键的机制,它允许程序对特定事件进行响应。这个例子将探讨如何在Java中使用监听器,特别是事件...建议查看这些文件,动手实践并调试代码,以便更好地掌握Java监听器的使用。
然而,Android系统对第三方应用的权限控制较为严格,直接使用`Inotify`来监听自身卸载并不直接可行。这篇技术博客中可能介绍了如何在Android环境中巧妙地实现这一目标。 首先,我们来理解`Inotify`的基本概念。`...
在服务端,用户需要通过右键菜单选择“设置”,设置监听模式为“服务器模式”,并指定主目录和刷新频率。此外,可以设置开机自动运行,以及为每个子目录生成监控文件,以便对不同版本的软件进行统一监控。同时,通过...
2. **会话监听器**: 可以监控用户的会话状态,如检测会话超时、会话创建和销毁等,常用于实现单点登录、在线用户统计等功能。 3. **请求监听器**: 虽然Java标准API中没有直接提供请求监听器,但可以通过过滤器...
例如,在图形用户界面编程中,我们可以使用监听器模式来处理按钮点击事件、鼠标移动事件等。 在上面的示例代码中,我们定义了一个事件源Robot,包含工作和跳舞两个事件。然后,我们定义了一个事件监听器接口...