Este artículo describe el método de implementación de Java en la función de monitoreo de usuarios en línea basada en el oyente de servlet. Compártelo para su referencia, como sigue:
1. Análisis:
Para hacer el número de personas en línea de un sitio web, puede escuchar a través de ServletContextListener. Cuando se inicie el contexto de la aplicación web, agregue una lista en el ServletContext. Úselo para preparar el nombre de usuario almacenado en línea y luego escuche a través del httpsessionAttributeListener. Cuando el usuario inicie sesión correctamente, configure el nombre de usuario en la sesión. Al mismo tiempo, el método de nombre de usuario se coloca en la lista de servletContext y finalmente se escucha a través del httpsessionListener. Cuando el usuario inicia sesión de la sesión, el nombre de usuario se elimina de la lista de listas en el alcance del contexto de la aplicación.
2. cosas a tener en cuenta
Durante las pruebas, debe iniciar diferentes navegadores para iniciar sesión en diferentes usuarios. Solo haciendo clic en el botón de inicio de sesión puede reducir los usuarios en línea. Cerrar el navegador no puede reducir los usuarios en línea.
3. Código fuente del proyecto
(1) Código Java
Clase OnLineListener
paquete com.smalle.listener; import java.util.linkedList; import java.util.list; import javax.servlet.servletContext; import javax.servlet.servletContextEvent; import javax.servlet.servletContextListener; javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;public class OnlineListener implements ServletContextListener, HttpSessionAttributeListener, HttpSessionListener { private ServletContext application = nulo; // Métodos que devuelen devoluciones al comienzo del contexto de la aplicación @Override public void contextInitialized (servletContextEvent e) {// inicializar una aplicación de objeto de aplicación = e.getServletContext (); // Establezca un atributo de lista para guardar el nombre de usuario en línea this.application.setAttribute ("en línea", new LinkedList <String> ()); } // Método de devolución de llamada Al agregar atributos a la sesión @Override public void atributeadDed (httpsessionBindingEvent e) {// Obtenga la lista de la lista de usuarios <String> onlines = (list <string>) this.application.getAttribute ("en línea"); if ("username" .equals (e.getName ())) {onlines.add ((string) e.getValue ()); } // Restablecer la propiedad de la aplicación de columna de la lista agregada. this.application.SetAttribute ("en línea", onlines); } // Métodos que devuelven la llamada cuando la sesión se destruye @Override public void sessionDestroyed (httpSessionEvent e) {// Obtenga la lista de la lista de nombre de usuario <String> onlines = (list <string>) this.application.getAttribute ("en línea"); // Obtenga el nombre de usuario actual String UserName = (String) E.GetSession (). GetAttribute ("UserName"); // eliminar este usuario de la lista onlines.remove (nombre de usuario); // Restablecer la lista eliminada en la propiedad de la aplicación. this.application.SetAttribute ("en línea", onlines); } public void sessionCreated (httpsessionEvent e) {} public void atributereMoved (httpsessionBindingEvent e) {} public void attributeRePlaced (httpsessionBindingEvent e) {}}Clase LoginServlet
paquete com.smalle.listener; import java.io.ioException; import java.io.printwriter; import java.util.list; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; public class LoginServlet extiende httpservlet {private estático final long SerialVersionUid = 1l; public void doget (HTTPServletRequest Solicitud, respuesta httpservletResponse) lanza ServletException, ioException {this.doPost (solicitud, respuesta); } public void dopost (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {request.setcharacterEncoding ("UTF-8"); // Establecer la respuesta Tipo de contenido String UserName = request.getParameter ("UserName"); // Obtenga el nombre de usuario en el parámetro de solicitud // Agregar atributos a la sesión activará el método atributadeadded en httpsessionAtTributEnstener if (username! = Null &&! Username.equals ("")) {request.getSession (). SetAttribute ("username", username); } // Obtenga la lista de nombre de usuario en línea de la lista de contexto de la aplicación <String> en línea = (List <String>) getServletContext (). GetAttribute ("en línea"); System.out.println ("LoginServlet" + en línea); respuesta.setContentType ("text/html; charset = utf-8"); PrintWriter out = Response.getWriter (); out.println (""); out.println ("<title> Lista de usuarios </title>"); out.println (""); out.println ("El usuario actual es:" + nombre de usuario); out.print ("<hr> <h3> Lista de usuarios en línea </h3>"); int size = en línea == nulo? 0: en línea.size (); for (int i = 0; i <size; i ++) {if (i> 0) {out.println ("<br>"); } out.println (i + 1 + "." + en línea.get (i)); } // Nota: para reescribir automáticamente la url del enlace out. out.println ("); out.println (" "); out.flush (); out.close ();}}Clase de logroutservlet
paquete com.smalle.listener; import java.io.ioException; import java.io.printwriter; import java.util.list; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletResponse; public class logroutServlet extiende httpservlet {public void doget (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception {this.dopost (solicitud, respuesta); } public void dopost (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {request.setcharacterEncoding ("UTF-8"); // Establecer el tipo de contenido de respuesta // Destruir la sesión, el método de sessionDestrOyed en el sessionlinstener se activará a request.getSession (). Invalidate (); // Obtenga la lista de nombre de usuario en línea de la lista de contexto de la aplicación <String> en línea = (List <String>) getServletContext (). GetAttribute ("en línea"); respuesta.setContentType ("text/html; charset = utf-8"); PrintWriter out = Response.getWriter (); out.println (""); out.println ("<title> Lista de usuarios </title>"); out.println (""); out.println (""); out.print ("<H3> Lista de usuarios en línea </h3>"); int size = en línea == nulo? 0: en línea.size (); for (int i = 0; i <size; i ++) {if (i> 0) {out.println ("<br>"); } out.println (i + 1 + "." + en línea.get (i)); } out.println ("<hr> <a href = '/' index.html/''> home </a>"); out.println (""); out.println (""); out.flush (); out.close (); }}(2) código web.xml
<? xml versión = "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_0.xsd" <Spant-Name> testServlet </siplip-name> <Oyerer> <Oyerer-class> com.smalle.listener.onlineListener </ oyeyer-class> </oyeyer> <ervlet> <ervlet-name> loginservlet </servlet-name> <ervlet-class> com.smalle.listener.loginservlet </servlet-class> </servlet> <Servlet-name> loginservlet </servlet-name> <url-pattern>/loginlistener </sl-pattern> </servlet-mapping> <ervlet> <ervlet-name> logroutservlet </servlet-name> <ervlet-class> com.smalle.listener.logoutservlet </servlet-class> </servlet> <servlet-mapping> com.smalle.listener.logoutservlet </servlet-class> </servlet> <servlet-mapping> <Servlet-name> logroutservlet </servlet-name> <url-pattern>/logroutListener </sl-pattern> </servlet-mapping> <beating-file-list> <levle-file> index.jsp </welcome-file> </welcome-file-list> </web-app>
(3) Código de capa de presentación
<! Doctype html> <html> <fead> <title> index.html </title> <meta name = "content-type" content = "text/html; charset = utf-8"> </toad> <body> <form action = "loginListener" método = "post"> usereName: <input type = "text" name = "name" <inying type = "subting" Subting " value = "Login"> <br> <br> </form> </body> </html>
Para obtener más información sobre los algoritmos Java, los lectores interesados en este sitio pueden ver los temas: "Resumen de las habilidades de programación de redes de Java", "Tutoriales sobre estructuras de datos de Java y algoritmos", "Resumen de habilidades de nodo DOM de operación Java", "Resumen del archivo de Java y las habilidades de operación de directorio" y "Summary of Java Cache Skills"
Espero que este artículo sea útil para la programación Java de todos.