이 기사에서는 서틀 리스너를 기반으로 온라인 사용자 모니터링 기능을 구현하는 Java 방법에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
1. 분석 :
웹 사이트의 온라인 사람들 수를 수행하려면 ServletContextListener를 통해들을 수 있습니다. 웹 응용 프로그램 컨텍스트가 시작되면 ServletContext에 목록을 추가하십시오. 이를 사용하여 온라인으로 저장된 사용자 이름을 준비한 다음 httpssessionattributeListener를 통해 듣습니다. 사용자가 성공적으로 로그인하면 사용자 이름을 세션으로 설정하십시오. 동시에 사용자 이름 메소드는 ServletContext 목록에 배치되고 마침내 httpsessionListener를 통해 들었습니다. 사용자가 세션에서 로그인하면 응용 프로그램 컨텍스트 범위의 목록 목록에서 사용자 이름이 삭제됩니다.
2. 주목할만한 것들
테스트하는 동안 다른 브라우저를 시작하여 다른 사용자에게 로그인해야합니다. 로그 아웃 버튼을 클릭하면 온라인 사용자를 줄일 수 있습니다. 브라우저를 닫으면 온라인 사용자를 줄일 수 없습니다.
3. 프로젝트 소스 코드
(1) Java 코드
OnlineListener 클래스
package com.smalle.listener; import java.util.linkedlist; import java.util.list; import javax.servlet.servletcontext; import javax.servlet.servletcontextevent; import javax.servlet.servletcontextlistener; import javax.servlet.http.httpertiptreation javax.servlet.http.httpsessionbindingevent; import javax.servlet.http.httpessessionevent; import javax.servlet.http.htttp.htttp.httpessionListener; 공개 클래스 OnlineListener는 ServletContectlistner, Httpsessionationsents {httpsistContection {httpsistContection {httpsisticeTernate {httpsesticer {httpsestencepenter { 널; // 응용 프로그램 컨텍스트의 시작 부분에서 콜백하는 메소드 @Override public void 컨텍스트 eitialized (servletcontextevent e) {// 응용 프로그램 객체 응용 프로그램 초기화 = e.getServletContext (); // 온라인 사용자 이름을 저장하기 위해 목록 속성을 설정하십시오. } // 세션에 속성을 추가 할 때 콜백 메소드 @override public void avrebitedEadded (httpsessionBindingEvent e) {// 사용자 이름 목록 <string> onlines = (list <string>) this.application.getAttribute ( "온라인"); if ( "username".equals (e.getName ())) {onlines.add ((String) e.getValue ()); } // 추가 된 목록의 열 애플리케이션 속성을 재설정합니다. this.application.setattribute ( "온라인", 온라인); } // 세션이 파괴 될 때 콜백하는 메소드 @override public void sessiondestroyed (httpsessionevent e) {// 사용자 이름 목록 <string> onlines = (list <string>) this.application.getAttribute ( "온라인"); // 현재 사용자 이름 문자열 username = (string) e.getSession (). getAttribute ( "username"); // 목록 에서이 사용자를 ONLINES.REMOVE (username)에서 삭제합니다. // 삭제 된 목록을 응용 프로그램 속성으로 재설정합니다. this.application.setattribute ( "온라인", 온라인); } public void sessioncreated (httpsessionEvent e) {} public void attributermoved (httpssessionBindingEvent e) {} public void averbiterEplaced (httpsessionBindingEvent e) {}}loginservlet 클래스
package com.smalle.listener; import java.io.ioexception; import java.io.printwriter; import java.util.list; import javax.servlet.servletexception; import javax.servlet.http.httpervax; import javax.servlet.httplet.httpepest.httpepest.; javax.servlet.http.httpervletrequest; import javax.servlet.http.httpervletresponse; public class loginservlet httpservlet {private static final long serialversionuid = 1l; public void doget (httpservletrequest request, httpservletresponse 응답)은 servletexception, ioexception {this.dopost (요청, 응답); } public void dopost (httpservletRequest 요청, httpservletResponse 응답) servletexception, ioexception {request.setcharacterencoding ( "utf-8"); // 응답 내용 유형을 설정 문자열 username = request.getParameter ( "username"); // 요청 매개 변수에서 사용자 이름을 가져옵니다. // 세션에 속성을 추가하면 (username! = null &&! username.equals ( "")) {request.getSession (). setattribute ( "username", username); } // 애플리케이션 컨텍스트에서 온라인 사용자 이름 목록을 가져옵니다. List <string> online = (list <string>) GetServletContext (). getAttribute ( "온라인"); System.out.println ( "loginservlet" + online); Response.setContentType ( "Text/Html; charset = utf-8"); printwriter out = response.getwriter (); out.println ( ""); out.println ( "<title> 사용자 목록 </title>"); out.println ( ""); out.println ( "현재 사용자는 :" + username); out.print ( "<hr> <h3> 온라인 사용자 목록 </h3>"); int size = online == null? 0 : online.size (); for (int i = 0; i <size; i ++) {if (i> 0) {out.println ( "<br>"); } out.println (i + 1 + "." + online.get (i)); } // 참고 : 링크 URL OUT.println을 자동으로 다시 작성하려면 ( "<hr/> <a href =/" " + response.encodeUrl ("logoutListener ") +"/"> 로그 아웃 </a>"); out.println ( "); out.println (" "); out.flush (); out.close ();}}로그 아웃 서비스 클래스
package com.smalle.listener; import java.io.ioexception; import java.io.printwriter; import java.util.list; import javax.servlet.servletexception; import javax.servlet.http.httpervax; import javax.servlet.httplet.httpepest.httpepest.; javax.servlet.http.httpervletresponse; public class logoutservlet는 httpservlet {public void doget (httpservletrequest request, httpservletreponse 응답)을 servletexception, ioexception {this.dopost (요청, 응답); } public void dopost (httpservletRequest 요청, httpservletResponse 응답) servletexception, ioexception {request.setcharacterencoding ( "utf-8"); // 응답 내용 유형 설정 // 세션을 파괴하면 SessionLlinStener의 SessionDestroyed 메소드가 request.getSession ()로 트리거됩니다. invalidate (); // 애플리케이션 컨텍스트에서 온라인 사용자 이름 목록을 가져옵니다. list <string> online = (list <string>) getServletContext (). getAttribute ( "온라인"); Response.setContentType ( "Text/Html; charset = utf-8"); printwriter out = response.getwriter (); out.println ( ""); out.println ( "<title> 사용자 목록 </title>"); out.println ( ""); out.println ( ""); out.print ( "<h3> 온라인 사용자 목록 </h3>"); int size = online == null? 0 : online.size (); for (int i = 0; i <size; i ++) {if (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"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 http://java.sun.com/xml/ns/javaee/web-app_3_3_0.xsd"3. ""webapp_ "" " <display-name> testservlet </display-name> <layer> <layer-class> com.smalle.listener.onlinelistener </laiseer-class> </lareer> <servlet> <servlet-name> loginservlet </servlet-name> <servlet-class> com.smalle.listener.loginservlet> </servletsvass> <Servlet-name> loginservlet </servlet-name> <url-pattern>/loginlistener </url-pattern> </servlet-mapping> <servlet-name> logoutservlet </servlet-name> <servlet-class> com.smalle.listener.logoutservlass> </servlet> <Servlet-name> logoutServlet </servlet-name> <Url-pattern>/logoutlistener </url-pattern> </servlet-mapping> <Welcome-file-list> <welcome-file> index.jsp </belop-file> </welcome-file-list> </web-app>
(3) 프리젠 테이션 계층 코드
<! docType html> <html> <head> <head> index.html </title> <meta name = "content-type"content = "text/html; charset = utf-8"> </head> <body> <form action = "loginListener"method = "post"> username : <input type = "userame" ""useNem "" " value = "로그인"> <br> <br> </form> </body> </html>
Java 알고리즘에 대한 자세한 내용은이 사이트에 관심이있는 독자들이 주제를 볼 수 있습니다. "Java Network 프로그래밍 기술 요약", "Java 데이터 구조 및 알고리즘에 대한 자습서", "Java 운영 Dom Node Skills 요약", "Java 파일 및 디렉토리 운영 기술 요약"및 "Java Cache 운영 기술 요약".
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.