Este artículo presenta principalmente un ejemplo del uso de oyentes a Java para contar el número de personas en línea en un sitio web. Tiene cierto valor de referencia. Los amigos necesitados pueden aprender sobre eso.
(1) Cree una clase de implementación del oyente
Para contar más o menos el número de personas en línea en un sitio web, primero puede escuchar a través de ServletContextListener. Cuando se inicie el contexto de la aplicación web, agregue una lista en ServletContext para preparar el nombre de usuario almacenado en línea; Luego, puede escuchar a través del httpsessionTtributeListener. Cuando el usuario inicia sesión con éxito, establece el nombre de usuario en la sesión, el nombre de usuario se almacena en la lista de listas en ServletContext al mismo tiempo; Finalmente, escuche 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 contexto de la aplicación.
Por lo tanto, escriba la clase OnLineListener para implementar las interfaces ServletContextListener, HttpsessionAtTributeListener y HttpsessionListener. El código específico es el siguiente:
paquete com.web.servlet; import java.util.linkedlist; import java.util.list; import javax.servlet.servletContext; import javax.servlet.servletContextEvent; import javax.servlet.servletContextListener; import javax.servlet.http.httpsessionAttributeListener; import javax.servlet.http.httpsessionbindingEvent; import javax.servlet.http.httpsessionEvent; import javax.servlet.http.httpsessionListener; // Estadísticas del usuario en línea Clase de implementación del oyente Clase pública OnLineListener implementa ServletContextListener, httpsessionAtTributEnstener, httpSessionListener {private servletContext Application = null; Public void contextDestroyed (servletContextEvent arg0) {// toDO método generado automático stub} public void contextInitialized (servletContextEvent arg0) {// Inicializar un objeto de aplicación th.Application = arg0.getServletContext (); // Establezca un atributo de lista para guardar el nombre de usuario this.application.setAttribute ("en línea", new LinkedList <String> ()); } // Método que devolverá la llamada al agregar atributos a la sesión public void atributeadded (httpsessionBindingEvent arg0) {// Obtenga la lista de la lista de usuarios <String> en línea = (list <String>) this.application .getAttribute ("en línea"); if ("username" .equals (arg0.getName ())) {// Agregar el nombre de usuario actual a la lista en línea.add ((string) arg0.getValue ()); } // restablecer la lista agregada al atributo de la aplicación this.application.setAttribute ("en línea", en línea); } public void atributereMoved (httpSessionBindEngeVent arg0) {// toDO Auto Method Generated Stub} public void atributRoPlayed (httpsessionBindingEningEvent arg0) {// tODO metod de método automático de metod Métode} de session created (httpsessionEventEvent) {// ado met Method de met Methode} que devolverá la llamada cuando la sesión se destruya public void sessionDestrOyed (httpsessionEvent arg0) {// Obtenga la lista de la lista de nombre de usuario <String> en línea = (list <string>) this.application .getAttribute ("en línea"); // Obtenga el nombre de usuario actual String UserName = (String) arg0.getSession (). GetAttribute ("UserName"); // eliminar este nombre de usuario de la lista en línea.remove (nombre de usuario); // Restablecer la lista eliminada en la propiedad de la aplicación this.application.setAttribute ("en línea", en línea); }} (2) Registre al oyente en Web.xml
Después de implementar el oyente, también necesita registrarse en el archivo web.xml para funcionar. Solo necesita agregar elementos en el web.xml de la siguiente manera.
<!-Registre un oyente-> <Oyeer> <!-Especifique el nombre totalmente calificado de la clase de implementación del oyente-> <Oyerer-class> com.web.servlet.onlineListener </oyearclass> </oyente
Finalmente, creamos varios servlets para probar la funcionalidad implementada por este oyente.
Código de clase de servlet para manejar el inicio de sesión del usuario:
paquete com.web.servlet; 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; // Manejo de servlet Inicio de sesión del usuario LoginServlet extiende httpservlet {public void doget (httpservletRequest solicitud, respuesta httpservletreSponse) arroja servletException, ioexception {this.dopost (solicitud, respuesta); } public void dopost (httpservletRequest solicitud, httpservletResponse respuesta) lanza ServletException, ioException {request.setcharacterEncoding ("utf-8"); // Establecer el tipo de contenido correspondiente. Método atributeadded en httpsessionAtTributEnsiStener 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"); respuesta.setContentType ("text/html; charset = utf-8"); PrintWriter out = Response.getWriter (); out.println ("<html>"); out.println ("<Evieve> <title> Lista de usuarios </title> </head>"); out.println ("<body>"); 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 ("</body>"); out.println ("</html>"); out.flush (); out.close (); }} Código de clase para manejar el inicio de sesión del usuario en servlet
paquete com.web.servlet; import java.io.*; import java.util.list; import javax.servlet.servletException; import javax.servlet.http.*; // Servlet que maneja la sesión de inicio de sesión del usuario de la clase pública 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"); // Destruir la sesión, el método de sessionDestrOyed en el sessionlinstener se activará 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 ("<Evieve> <title> Lista de usuarios </title> </head>"); out.println ("<body>"); 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 ="/"mce_href ="/"" index.html/"> home </a>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }} Luego cree un archivo index.html para que los usuarios inicien sesión, el código es el siguiente:
<! DocType html public "-// w3c // dtd html 4.01 transitional // en"> <html> <fead> <meta http-oquiv = "content-type" content = "text/html; charset = utf-8"> <title> index.html </title> </body> <body> <body> <body " UserName: <input type = "text" name = "username"/> <input type = "subt" value = "Login"/> <br/> <br/> </form> </body> </html>
Implemente la web en el total de contenedores Tomcat y comience. Abra el navegador para acceder
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.