java 登录下线_java web中Listener的实现(实现用户在线统计数量和强制用户下线)...
一、實現(xiàn)的具體功能
(1)實現(xiàn)用戶在線數(shù)量的統(tǒng)計,并顯示在頁面上。
(2)實現(xiàn)強制用戶下線的功能。創(chuàng)建一個超鏈接,用于實現(xiàn)強制用戶下線的功能。
(3)監(jiān)聽session的創(chuàng)建和銷毀。
二、代碼實現(xiàn)
(1)主頁面:index.jsp。
pageEncoding="utf-8"%>
Insert title here用戶在線列表數(shù)量:${userTable.size()}
| 用戶信息 | |
| ${user.key } | 踢你下線 |
(2)服務(wù)器監(jiān)聽器:SCListener.java文件。
package com.listener;
import java.util.Hashtable;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
/**
* Application Lifecycle Listener implementation class SCListener
*
*/
@WebListener
public class SCListener implements ServletContextListener {
//在線用戶數(shù)量sessionId , session
private static Hashtable userTable;
/**
* Default constructor.
*/
public SCListener() {
// TODO Auto-generated constructor stub
}
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
//服務(wù)器關(guān)閉了
System.out.println("服務(wù)器關(guān)閉了......");
}
/**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent sre) {
// TODO Auto-generated method stub
//服務(wù)器啟動
System.out.println("服務(wù)器啟動了......");
//創(chuàng)建用戶在線列表
userTable = new Hashtable();
//放入全局對象,第一個userTable的Key
sre.getServletContext().setAttribute("userTable",userTable );
}
}
(3)UserListener.java文件。
package com.listener;
import java.util.Hashtable;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* Application Lifecycle Listener implementation class UserListener
*
*/
@WebListener
public class UserListener implements HttpSessionListener {
/**
* Default constructor.
*/
public UserListener() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpSessionListener#sessionCreated(HttpSessionEvent)
*/
public void sessionCreated(HttpSessionEvent se) {
// TODO Auto-generated method stub
System.out.println("session創(chuàng)建了");
//獲取全局對象
ServletContext sc = se.getSession().getServletContext();
//獲取用戶列表
Hashtable userTable = (Hashtable)sc.getAttribute("userTable");
//獲取sessionId
String sid = se.getSession().getId();
//用戶session信息添加到用戶列表
userTable.put(sid, se.getSession());
System.out.println("用戶在線數(shù)量:"+userTable.size());
}
/**
* @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)
*/
public void sessionDestroyed(HttpSessionEvent se) {
// TODO Auto-generated method stub
System.out.println("session銷毀了");
ServletContext sc = se.getSession().getServletContext();
//獲取用戶列表
Hashtable userTable = (Hashtable)sc.getAttribute("userTable");
//獲取sessionId
String sid = se.getSession().getId();
//移除用戶列表中的用戶
userTable.remove(sid);
}
}
(4)交互層用于實現(xiàn)強制用戶下線的功能:KickUser.java文件。
package com.servlet;
import java.io.IOException;
import java.util.Hashtable;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class KickUser
*/
@WebServlet("/KickUser")
public class KickUser extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public KickUser() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//獲取Id
String sid = request.getParameter("sid");
//獲取全局對象
ServletContext sc= request.getServletContext();
//獲取用戶列表
Hashtable userTable = (Hashtable)sc.getAttribute("userTable");
if(userTable.get(sid) != null) {
//銷毀session
userTable.get(sid).invalidate();
}
response.sendRedirect("index.jsp");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
三、運行結(jié)果
(1)用不同的瀏覽器打開,用戶在線數(shù)就會增加,然后進行測試。
一只小小的螞蟻
發(fā)布了45 篇原創(chuàng)文章 · 獲贊 3 · 訪問量 3048
私信
關(guān)注
標簽:web,java,用戶,userTable,Hashtable,import,servlet,javax
來源: https://blog.csdn.net/qq_44863179/article/details/104483179
總結(jié)
以上是生活随笔為你收集整理的java 登录下线_java web中Listener的实现(实现用户在线统计数量和强制用户下线)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java配置文件报错_java使用spr
- 下一篇: java中长方体的类是什么_编写java