บทความนี้อธิบายถึงวิธีการของ Java ที่ใช้ฟังก์ชั่นการตรวจสอบผู้ใช้ออนไลน์โดยใช้ Servlet Listener แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
1. การวิเคราะห์:
ในการทำจำนวนคนออนไลน์ของเว็บไซต์คุณสามารถฟังผ่าน ServletContextListener เมื่อบริบทของเว็บแอปพลิเคชันเริ่มต้นขึ้นให้เพิ่มรายการใน ServletContext ใช้เพื่อเตรียมชื่อผู้ใช้ที่เก็บไว้ทางออนไลน์แล้วฟังผ่าน httpsessionattributeListener เมื่อผู้ใช้เข้าสู่ระบบสำเร็จให้ตั้งชื่อผู้ใช้เป็นเซสชัน ในเวลาเดียวกันเมธอดผู้ใช้จะถูกวางไว้ในรายการของ servletContext และในที่สุดก็ฟังผ่าน httpsessionListener เมื่อผู้ใช้เข้าสู่ระบบจากเซสชันชื่อผู้ใช้จะถูกลบออกจากรายการรายการในขอบเขตบริบทของแอปพลิเคชัน
2. สิ่งที่ควรทราบ
ในระหว่างการทดสอบคุณต้องเริ่มเบราว์เซอร์ที่แตกต่างกันเพื่อเข้าสู่ระบบผู้ใช้ที่แตกต่างกัน โดยการคลิกปุ่มออกจากระบบเท่านั้นคุณสามารถลดผู้ใช้ออนไลน์ได้ ปิดเบราว์เซอร์ไม่สามารถลดผู้ใช้ออนไลน์ได้
3. ซอร์สโค้ดโครงการ
(1) รหัส Java
คลาส Onlinelistener
แพ็คเกจ com.smalle.listener; นำเข้า java.util.linkedlist; นำเข้า java.util.list; นำเข้า Javax.servlet.servlet.servlet.servletcontext; javax.servlet.http.httpsessionbindingevent; นำเข้า Javax.servlet.http.httpsessionEvent; นำเข้า Javax.servlet.http.httpsessionListener; แอปพลิเคชัน = null; // วิธีการที่โทรกลับที่จุดเริ่มต้นของบริบทแอปพลิเคชัน @Override public void contextInitialized (servletContextEvent e) {// เริ่มต้นแอปพลิเคชันวัตถุแอปพลิเคชัน = e.getServletContext (); // ตั้งค่าแอตทริบิวต์รายการเพื่อบันทึกชื่อผู้ใช้ออนไลน์ this.application.setAttribute ("ออนไลน์", LinkedList ใหม่ <String> ()); } // วิธีการโทรกลับเมื่อเพิ่มแอตทริบิวต์ลงในเซสชัน @Override โมฆะสาธารณะ atributeDded (httpsessionBindingEvent e) {// รับรายการรายการชื่อผู้ใช้ <String> onLines = (รายการ <String>) this.Application.getAttribute ("ออนไลน์"); if ("ชื่อผู้ใช้" .Equals (e.getName ())) {onLines.add ((สตริง) e.getValue ()); } // รีเซ็ตคุณสมบัติแอปพลิเคชันคอลัมน์ของรายการที่เพิ่มเข้ามา this.application.setAttribute ("ออนไลน์", onLines); } // วิธีการที่โทรกลับเมื่อเซสชันถูกทำลาย @Override โมฆะสาธารณะเซสชัน destroyed (httpsessionEvent e) {// รับรายการชื่อผู้ใช้รายการ <string> onLines = (รายการ <string>) this.application.getAttribute ("ออนไลน์"); // รับชื่อผู้ใช้ชื่อผู้ใช้ปัจจุบันชื่อผู้ใช้ = (สตริง) e.getSession (). getAttribute ("ชื่อผู้ใช้"); // ลบผู้ใช้นี้ออกจากรายการ onlines.remove (ชื่อผู้ใช้); // รีเซ็ตรายการที่ถูกลบลงในคุณสมบัติแอปพลิเคชัน this.application.setAttribute ("ออนไลน์", onLines); } โมฆะสาธารณะ SessionCreated (httpsessionEvent e) {} โมฆะสาธารณะ attributeremoved (httpsessionbindingevent e) {} โมฆะสาธารณะ attributePlaced (httpsessionbindingevent e) {}}}คลาส LoginServlet
แพ็คเกจ com.smalle.listener; นำเข้า java.io.ioexception; นำเข้า java.io.printwriter; นำเข้า java.util.list; นำเข้า javax.servlet.servletexception; นำเข้า javax.servlet.http.httpservlet; javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; LoginServlet ระดับสาธารณะขยาย HTTPSERVLET {ส่วนตัวคงที่ โมฆะสาธารณะ DOGET (คำขอ httpservletRequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {this.dopost (คำขอ, การตอบสนอง); } โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {request.Setcharacterencoding ("UTF-8"); // ตั้งค่าสตริงประเภทเนื้อหาตอบกลับชื่อผู้ใช้ = request.getParameter ("ชื่อผู้ใช้"); // รับชื่อผู้ใช้ในพารามิเตอร์การร้องขอ // เพิ่มแอตทริบิวต์ในเซสชันจะทริกเกอร์วิธีการที่ได้รับการรวมใน httpsessionattributeListener ถ้า (ชื่อผู้ใช้! = null &&! ชื่อผู้ใช้ ("")) {request.getSession () SetAttribute } // รับรายการชื่อผู้ใช้ออนไลน์จากรายการบริบทแอปพลิเคชัน <String> ออนไลน์ = (รายการ <String>) getSerVletContext (). getAttribute ("ออนไลน์"); System.out.println ("LoginServlet" + ออนไลน์); Response.setContentType ("ข้อความ/html; charset = utf-8"); PrintWriter out = response.getWriter (); out.println (""); out.println ("<title> รายชื่อผู้ใช้ </title>"); out.println (""); out.println ("ผู้ใช้ปัจจุบันคือ:" + ชื่อผู้ใช้); out.print ("<hr> <h3> รายชื่อผู้ใช้ออนไลน์ </h3>"); ขนาด int = ออนไลน์ == null? 0: online.size (); สำหรับ (int i = 0; i <size; i ++) {ถ้า (i> 0) {out.println ("<br>"); } out.println (i + 1 + "." + online.get (i)); } // หมายเหตุ: หากต้องการเขียน url link out.println โดยอัตโนมัติ ("<hr/> <a href =/" " + response.encodeurl (" logoutlistener ") +"/"> logout </a>"); out.println ("); out.println (" "); out.flush (); out.close ();}}คลาส logoutservlet
แพ็คเกจ com.smalle.listener; นำเข้า java.io.ioexception; นำเข้า java.io.printwriter; นำเข้า java.util.list; นำเข้า javax.servlet.servletexception; นำเข้า javax.servlet.http.httpservlet; javax.servlet.http.httpservletResponse; logoutservlet ระดับสาธารณะขยาย httpservlet {โมฆะสาธารณะ doGet (httpservletrequest คำขอ, httpservletresponse การตอบสนอง) โยน servletexception, ioexception } โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {request.Setcharacterencoding ("UTF-8"); // ตั้งค่าประเภทเนื้อหาการตอบกลับ // ทำลายเซสชันวิธีเซสชันที่ถูกทำลายในเซสชัน LIGNESTENER จะถูกทริกเกอร์ไปที่ request.getSession (). unvalidate (); // รับรายการชื่อผู้ใช้ออนไลน์จากรายการบริบทแอปพลิเคชัน <String> ออนไลน์ = (รายการ <String>) GetSerVletContext (). getAttribute ("ออนไลน์"); Response.setContentType ("ข้อความ/html; charset = utf-8"); PrintWriter out = response.getWriter (); out.println (""); out.println ("<title> รายชื่อผู้ใช้ </title>"); out.println (""); out.println (""); out.print ("<h3> รายชื่อผู้ใช้ออนไลน์ </h3>"); ขนาด int = ออนไลน์ == null? 0: online.size (); สำหรับ (int i = 0; i <size; i ++) {ถ้า (i> 0) {out.println ("<br>"); } out.println (i + 1 + "." + online.get (i)); } out.println ("<hr> <a href = '/' index.html/''> home </a>"); out.println (""); out.println (""); out.flush (); out.close (); -(2) รหัส web.xml
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3 <play-name> testservlet </display-name> <sistener> <sistener-lass> com.smalle.listener.onlinelistener </listener-class> </listener> <servlet> <servlet-name> loginservlet </servlet-name> <url-pattern>/loginListener </url-pattern> </servlet-mapping> <servlet> <servlet-name> logoutservlet </servlet-name> <servlet-name> logoutservlet </servlet-name> <url-pattern>/logoutListener </url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file> index.jsp </welcome-file>
(3) รหัสการนำเสนอเลเยอร์
<! doctype html> <html> <head> <title> index.html </title> <meta name = "content-type" content = "text/html; charset = utf-8"> </head> <body> value = "เข้าสู่ระบบ"> <br> <br> </form> </body> </html>
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริทึม Java ผู้อ่านที่สนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "สรุปทักษะการเขียนโปรแกรมเครือข่าย Java", "บทช่วยสอนเกี่ยวกับโครงสร้างข้อมูล Java และอัลกอริทึม", "ทักษะการดำเนินงานของ Java การดำเนินงาน"
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน