Cet article décrit la méthode de la mise en œuvre de la fonction de surveillance des utilisateurs en ligne basée sur le servlet. Partagez-le pour votre référence, comme suit:
1. Analyse:
Pour faire le nombre de personnes en ligne d'un site Web, vous pouvez écouter le servletContextListener. Lorsque le contexte de l'application Web est démarré, ajoutez une liste dans ServletContext. Utilisez-le pour préparer le nom d'utilisateur stocké en ligne, puis écoutez le HTTPSessionAttributeleListener. Lorsque l'utilisateur se connecte avec succès, définissez le nom d'utilisateur sur la session. Dans le même temps, la méthode du nom d'utilisateur est placée dans la liste de ServletContext, et a finalement écouté le HTTPSessionListener. Lorsque l'utilisateur se déconnecte de la session, le nom d'utilisateur est supprimé de la liste de liste dans la portée du contexte de l'application.
2. Choses à noter
Pendant les tests, vous devez démarrer différents navigateurs pour vous connecter à différents utilisateurs. Ce n'est qu'en cliquant sur le bouton de déconnexion que vous pouvez réduire les utilisateurs en ligne. Fermer le navigateur ne peut pas réduire les utilisateurs en ligne.
3. Code source du projet
(1) Code Java
Classe onlineListener
package com.smalle.Listener; import java.util.linkedlist; import java.util.list; import javax.servlet.servletContext; import javax.servlet.servletcontevent; import javax.servlet.servletContextListener; import javax.servlet.http.httpSessaSSe javax.servlet.http.httpSessionBindingEvent; Importer javax.servlet.http.httpSessionEvent; Importer javax.servlet.http.httpSessionListener; public onlineListener implémente ServletContextener, httSessionAtTutleListener, httpSessionDistener {Privail Application = Notor); // Méthodes que les rappels au début du contexte de l'application @Override public void contextinitialialialized (servletContexTevent e) {// initialiser un objet d'application application = e.getServletContext (); // Définissez un attribut de liste pour enregistrer le nom d'utilisateur en ligne this.application.setAttribute ("en ligne", new LinkedList <string> ()); } // Méthode de rappel lors de l'ajout d'attributs à la session @Override public void attributeAdded (httpSessionBindingEvent e) {// Obtenez la liste des noms d'utilisateur <string> onlines = (list <string>) this.application.getAttribute ("Online"); if ("username" .equals (e.getName ())) {onlines.add ((string) e.getValue ()); } // Réinitialisez la propriété de l'application de colonne de la liste ajoutée. this.application.setAttribute ("en ligne", onlines); } // Méthodes qui rappellent lorsque la session est détruite @Override public void SessionDestRoyed (httpSessionEvent e) {// Obtenez la liste de noms d'utilisateur <string> onlines = (list <string>) this.application.getAttribute ("Online"); // Obtenez le nom d'utilisateur usernom actuel username = (string) e.getSession (). GetAttribute ("username"); // Supprimer cet utilisateur de la liste Onlines.Remove (nom d'utilisateur); // Réinitialise la liste supprimée dans la propriété de demande. this.application.setAttribute ("en ligne", onlines); } public void SessionCreated (httpSessionEvent e) {} public void attributeRemoved (httpSessionBindingEvent e) {} public void attributeReplaced (httsesessionbindingEvent e) {}}Classe de connexion
package com.smalle.Listener; import java.io.ioexception; import java.io.printwriter; import java.util.list; import javax.servlet.servletException; import javax.servlet.http.httpleservlet; import javax.servlet.http.httpsservlet javax.servlet.http.httpservletRequest; Importer javax.servlet.http.httpservletResponse; public class LoginServlet étend httpservlet {private static final SerialVersionUID = 1l; public void doGet (demande httpservletRequest, réponse httpservletResponse) lève ServletException, ioException {this.dopost (demande, réponse); } public void doPost (request httpServLetRequest, httpsservletResponse réponse) lève ServletException, ioException {request.SetcharAtterencoding ("utf-8"); // Définissez la chaîne de type de contenu de réponse username = request.getParameter ("username"); // obtient le nom d'utilisateur dans le paramètre de demande // Ajouter des attributs à la session déclenchera la méthode AttributeAdded dans la HttSessionAttributeListener if (username! = Null &&! Username.equals ("")) {request.getSession (). SetAtTrribute ("username", username); } // Obtenez la liste des noms d'utilisateur en ligne de la liste de contextes d'application <string> en ligne = (liste <string>) getServletContext (). GetAttribute ("Online"); System.out.println ("LoginServlet" + en ligne); Response.SetContentType ("Text / HTML; charSet = UTF-8"); Printwriter out = réponse.getWriter (); out.println (""); out.println ("<Title> Liste d'utilisateurs </Title>"); out.println (""); out.println ("L'utilisateur actuel est:" + nom d'utilisateur); out.print ("<hr> <h3> Liste d'utilisateurs en ligne </h3>"); int size = online == null? 0: en ligne.Size (); pour (int i = 0; i <size; i ++) {if (i> 0) {out.println ("<br>"); } out.println (i + 1 + "." + online.get (i)); } // Remarque: Pour réécrire automatiquement l'URL de liaison out.println ("<hr /> <a href = /" "+ réponse.encodeUrl (" logoutListener ") +" / "> Logout </a>"); out.println ("); out.println (" "); out.flush (); out.close ();}}Classe de connexion
package com.smalle.Listener; import java.io.ioexception; import java.io.printwriter; import java.util.list; import javax.servlet.servletException; import javax.servlet.http.httpleservlet; import javax.servlet.http.httpsservlet javax.servlet.http.httpservletResponse; public class LogoServlet étend httpservlet {public void doGet (httpservletRequest request, httpservletResponse réponse) lance Servlexception, ioException {this.dopost (request, réponse); } public void doPost (request httpServLetRequest, httpsservletResponse réponse) lève ServletException, ioException {request.SetcharAtterencoding ("utf-8"); // Définit le type de contenu de réponse // Détruiser la session, la méthode SessionDestRoyed dans la sessionLinstener sera déclenchée pour demander.getSession (). Invalidate (); // Obtenez la liste des noms d'utilisateur en ligne de la liste de contextes d'application <string> en ligne = (liste <string>) getServletContext (). GetAtTribute ("Online"); Response.SetContentType ("Text / HTML; charSet = UTF-8"); Printwriter out = réponse.getWriter (); out.println (""); out.println ("<Title> Liste d'utilisateurs </Title>"); out.println (""); out.println (""); out.print ("<h3> Liste d'utilisateurs en ligne </h3>"); int size = online == null? 0: en ligne.Size (); pour (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) code 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_0.xsd" id = "webapp_id =" 3.0 " <Display-Name> TestServlet </ Display-Name> <Deurner> <auditeur-class> com.smalle.Listener.onlineListener </ auteur-class> </diner> <Serplet> <Serplet-Name> Loginservlet </ Servlet-Name> <Serplet-Class> com.smalle.lintener. <VerTlet-Name> LoginServlet </ Servlet-Name> <URL-Pattern> / LoginListener </ url-Pattern> </ Servlet-Mapping> <Serplet> <Svlet-Name> LogoutServlet </ Servlet-Name> <Serplet-Class> COM.SMALLE.Listener.LogouSERVlet </Servlet-Class> </Servlet> <Serplet-Mapping> <Servlet-Name> LogoutServlet </ Servlet-Name> <Url-Pattern> / LogOutListener </url-Pattern> </ Servlet-Mapping> <Welcome-File-List> <Deen welcome> index.jsp </ bienvenue-file> </ bienvenue-File-List> </low-Apple>
(3) Code de couche de présentation
<! Doctype html> <html> <éadf> <tdical> index.html </ title> <meta name = "contenu-type" contenu = "text / html; charset = utf-8"> </ head> <body> <form action = "LoginListener" Méthode = "Post"> username: <puty type = "text" name = "username"> <pown-type = "paire type =" text "name =" username "> <pown-type =" paire type = "text" name = "username"> <pown-type = "paire type =" text "Name =" Username "> <pown Type =" Pouper = "Pouper =" Text = "Name =" Username "> Value = "Login"> <br> <br> </ Form> </ Body> </html>
Pour plus d'informations sur les algorithmes Java, les lecteurs qui sont intéressés par ce site peuvent consulter les sujets: "Résumé des compétences de programmation du réseau Java", "Tutorials sur les structures de données Java et les algorithmes", "Résumé des compétences de nœuds Java Dom", "Résumé des compétences de fichiers Java et de l'opération de répertoire" et "Résumé des compétences en opération Java Cache" "
J'espère que cet article sera utile à la programmation Java de tous.