通過監聽Session對象的方式來實現在線人數的統計和在線人信息展示。
1.web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>MvcPro</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <listener> <listener-class>com.sxt.mvcpro.listener.RequestListener</listener-class> </listener> <!-- 在容器中配置出路徑對應的servlet --> <servlet> <servlet-name>listenerOnlineNumber</servlet-name> <servlet-class>com.sxt.mvcpro.controller.OnlineNumberServlet</servlet-class> </servlet> <!-- 定義出上面的servlet處理的路徑 這個路徑叫做servlet的映射路徑 --> <servlet-mapping> <servlet-name>listenerOnlineNumber</servlet-name> <url-pattern>/online/*</url-pattern> </servlet-mapping> </web-app>
2.online.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <base href="/MvcPro/"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>在線人數為:${count==null? 0:count}</h1> ${users} <form action="online/login" method="post"> <fieldset> <legend>請登錄</legend> 用戶名:<input type="text" name="username"><br><br> <input type="submit" value="登陸"> </fieldset> </form> <a href="online/logout">注銷</a> </body> </html>
3.OnlineNumberServlet.java
對Session對象實現監聽,首先必須繼承HttpSessionListener類,該程序的基本原理就是當瀏覽者訪問頁面的時候必定會產生一個session對象;當關閉該頁面的時候必然會刪除該session對象。所以每當產生一個新的session對象就讓在線人數加1,當刪除一個session對象就讓在線人數減1。
實現登錄的方法
public void login(HttpServletRequest req, HttpServletResponse resp) throws Exception { String username = req.getParameter("username"); // 如果為null則表示還沒登陸 if (req.getSession().getAttribute("username")==null) { if (!"".equals("username")) {// 只有輸入的用戶名不為空才能進行操作 req.getSession().setAttribute("username", username); // 將用戶名保存到set集合中 names.add(username); // 再將names集合保存到application內置對象中去 req.getServletContext().setAttribute("users", names); req.getServletContext().setAttribute("count", names.size()); } } resp.sendRedirect("/MvcPro/pages/online.jsp"); }
實現注銷的方法
public void logout(HttpServletRequest req, HttpServletResponse resp) { names.remove(req.getSession().getAttribute("username")); // 銷毀當前用戶的session內置對象 req.getSession().invalidate(); try { req.getServletContext().setAttribute("count", names.size()); resp.sendRedirect("/MvcPro/pages/online.jsp"); } catch (IOException e) { e.printStackTrace(); } }
獲取服務器信息,並將其作為響應返回給客戶端
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{ req.setCharacterEncoding("UTF-8"); String pathInfo = req.getPathInfo(); if ("/login".equals(pathInfo)) { try { this.login(req, resp); } catch (Exception e) { e.printStackTrace(); } } else if("/logout".equals(pathInfo)) { this.logout(req, resp); } }
客戶端把數據傳送到服務器端
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); }
創建集合保存用戶名
// 保存用戶名 private Set<String> names = new HashSet<String>();
4.測試
(1)登錄界面
(2)輸入用戶名進行登錄
(3)注銷
點擊注銷之后頁面重新返回登錄界面
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。