Cet article présente principalement un exemple d'utilisation des auditeurs de Java pour compter le nombre de personnes en ligne sur un site Web. Il a une certaine valeur de référence. Les amis dans le besoin peuvent en savoir plus.
(1) Créer une classe d'implémentation d'écoute
Pour compter à peu près le nombre de personnes en ligne sur un site Web, vous pouvez d'abord écouter le servletContextListener. Lorsque le contexte de l'application Web est démarré, ajoutez une liste dans le ServletContext pour préparer le nom d'utilisateur stocké dans le ligne en ligne; Ensuite, vous pouvez écouter le HTTPSessionAttributeleListener. Lorsque l'utilisateur se connecte à définir avec succès le nom d'utilisateur sur la session, le nom d'utilisateur est stocké dans la liste de liste dans le servletContext en même temps; Enfin, écoutez le HttScessionListener. Lorsque l'utilisateur se déconnecte de la session, le nom d'utilisateur est supprimé de la liste de liste dans le contexte de l'application.
Par conséquent, écrivez la classe OnlineListener pour implémenter les interfaces HttSessionListener HttSessionAttributeleListener et HTTSESSELListener HttSessionAtTRubleListener. Le code spécifique est le suivant:
package com.web.servlet; import java.util.linkedlist; Importer java.util.list; import javax.servlet.servletContext; Importer javax.servlet.servletContexTevent; import javax.servlet.servletContextListener; Importer javax.servlet.http.httpSessionAttributeListener; Importer javax.servlet.http.httpSessionBindingEvent; Importer javax.servlet.http.httpSessionEvent; Importer javax.servlet.http.httpSessionListener; // Statistiques de l'utilisateur en ligne Classe publique de la classe publique de la classe publique OnlineListener implémente ServletContextListener, httpSessionAttributeListener, httpSessionListener {private ServLetContext application = null; public void contextDestRoyed (ServletContextevent arg0) {// TODO Méthode générée automatiquement Stub} public void contextinitialialialialialized (servletContextevent arg0) {// initialiser un objet d'application this.application = arg0.getServletContext (); // Définissez un attribut de liste pour enregistrer le nom d'utilisateur this.application.setAttribute ("en ligne", new LinkedList <string> ()); }! if ("username" .equals (arg0.getName ())) {// ajouter le nom d'utilisateur actuel à la liste en ligne.add ((string) arg0.getValue ()); } // Réinitialisez la liste ajoutée à l'attribut de l'application this.application.setAttribute ("en ligne", en ligne); } public void attributeReMoved (httpSessionBindingEvent arg0) {// Todo Méthode générée automatiquement Stub} public void attributerelpaced (httpSessionBindingEvent Arg0) {// Todo Auto-Generated Method Stub} public void SessionCreated (HTTPSESSEENT ARG0) {// TOTO-GETERAD GETHODE STOHETH AUTO-AUCHETH La session est détruite publique void SessionDestRoyed (httSessionEvent Arg0) {// Obtenez la liste des noms d'utilisateur <string> en ligne = (list <string>) this.application .getAttribute ("Online"); // Obtenez le nom d'utilisateur Username actuel username = (string) arg0.getSession (). GetAttribute ("username"); // Supprimer ce nom d'utilisateur de la liste en ligne.reMove (nom d'utilisateur); // Réinitialise la liste supprimée dans la propriété de l'application this.Application.SetAttribute ("en ligne", en ligne); }} (2) Enregistrez l'auditeur dans web.xml
Une fois l'auditeur implémenté, il doit également s'inscrire dans le fichier web.xml pour fonctionner. Il vous suffit d'ajouter des éléments dans le web.xml comme suit.
<! - Enregistrez un écouteur -> <ouvoiteur> <! - Spécifiez le nom entièrement qualifié de la classe d'implémentation de l'écoute -> <auditeur-classe> com.web.servlet.onlineListener </ auteur-classe> </ écouteur
Enfin, nous créons plusieurs servlets pour tester les fonctionnalités implémentées par cet écouteur.
Code de classe de servlet pour gérer la connexion de l'utilisateur:
package com.web.servlet; Importer java.io.ioException; import java.io.printwriter; Importer java.util.list; Importer javax.servlet.servletException; import javax.servlet.http.httpservlet; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; // Gestion des servlets Login de connexion Public Class LoginServlet étend HttpServlet {public void doGet (HttpServLetRequest Request, HttpServletResponse Response) lève Servlexception, ioException {this.dopost (request, réponse); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8");//Set the corresponding content type String username= request.getParameter("username");//Get the user name in the request parameter//Adding attributes to the session will trigger the Méthode attributionadded dans la httSessessionAtTributEListERner if (username! = null &&! username.equals ("")) {request.getSession (). setAttribute ("username", nom d'utilisateur); } // 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 ("<html>"); out.println ("<adread> <ititle> Liste d'utilisateurs </TITAL> </A-HEAD>"); out.println ("<porce>"); 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 =" / "mce_href =" / "" "+ réponse.encodeurl (" logout ") +" / "> Logout </a>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }} Code de classe pour gérer la connexion des utilisateurs à servlet
package com.web.servlet; importer java.io. *; Importer java.util.list; Importer javax.servlet.servletException; import javax.servlet.http. *; // Servlet qui gère la session de connexion utilisateur LogoServlet étend HttpServlet {public void doGet (httpservletRequest request, httpservletResponse réponse) lève Servlexception, ioException {this.dopost (request, réponse); } public void doPost (request httpServLetRequest, httpsservletResponse réponse) lève ServletException, ioException {request.SetcharAtterencoding ("utf-8"); // Détruisez la session, la méthode SessionDestRoyed dans le SessionLinstener sera déclenchée. // 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 ("<html>"); out.println ("<adread> <ititle> Liste d'utilisateurs </TITAL> </A-HEAD>"); out.println ("<porce>"); 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 =" / "mce_href =" / "" index.html / "> home </a>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }} Créez ensuite un fichier index.html pour que les utilisateurs puissent se connecter, le code est le suivant:
<! Doctype html public "- // w3c // dtd html 4.01 transitional // en"> <html> <adread> <meta http-equiv = "contenu-type" contenu = "text / html; charset = utf-8"> <itle> index.html </ title> </read> Nom d'utilisateur: <input type = "text" name = "username" /> <input type = "soumi" value = "login" /> <br/> <br/> </ form> </body> </html>
Déployez le web dans Tomcat Container Total et Démarrez. Ouvrez le navigateur pour accéder
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.