Este artigo descreve o método da função de monitoramento de usuários on -line Java com base no ouvinte do servlet. Compartilhe -o para sua referência, como segue:
1. Análise:
Para fazer o número de pessoas on -line de um site, você pode ouvir o ServletContextListener. Quando o contexto do aplicativo da Web for iniciado, adicione uma lista no ServletContext. Use -o para preparar o nome de usuário armazenado on -line e, em seguida, ouça o httpSessionAttributelistener. Quando o usuário efetuar login com sucesso, defina o nome de usuário para a sessão. Ao mesmo tempo, o método de nome do usuário é colocado na lista de servletContext e, finalmente, ouvido através do httpSessionListener. Quando o usuário registra a sessão, o nome do usuário é excluído da lista da lista no escopo do contexto do aplicativo.
2. Coisas para observar
Durante os testes, você precisa iniciar diferentes navegadores para fazer login em diferentes usuários. Somente clicando no botão de logout, você pode reduzir os usuários on -line. Fechar o navegador não pode reduzir os usuários on -line.
3. Código -fonte do projeto
(1) Código Java
Classe OnlineListener
pacote com.smalle.Listener; importar java.util.LinkedList; importar java.util.list; importar javax.servlet.servletContext; importestlestlet.servlet.sertletContevent; importação javax.servlet.ervletLextlet.tenTener; 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 chamam retornos de chamada no início do contexto do aplicativo @Override public void contextinitialized (servletContextevent e) {// inicialize um aplicativo aplicativo aplicativo = e.getServletContext (); // Defina um atributo de lista para salvar o nome de usuário on -line this.application.setattribute ("online", new LinkedList <String> ()); } // Método de retorno de chamada ao adicionar atributos à sessão @Override public void atribuiDedded (httpSessionBindingEvent e) {// Obtenha a lista de nome de usuário <String> onLines = (list <string>) this.application.getAttribute ("online"); if ("nome de usuário" .equals (e.getName ())) {onlines.add ((string) e.getValue ()); } // Redefina a propriedade Aplicativo da coluna da lista adicionada. this.Application.SetAttribute ("Online", onLines); } // métodos que chamam retornos de chamada quando a sessão é destruída @Override public void sessionDestroyed (httpSessionEvent e) {// Obtenha a lista de nome de usuário <String> onLines = (list <string>) this.application.getAttribute ("online"); // Obtenha o nome de usuário atual Nome de usuário = (string) e.getSession (). GetAttribute ("nome de usuário"); // exclua este usuário da lista onLines.remove (nome de usuário); // Redefina a lista excluída na propriedade do aplicativo. this.Application.SetAttribute ("Online", onLines); } public void sessionCreated (httpSessionEvent e) {} public void atributeRemoved (httpSessionBindingEvent e) {} public void atribuiReplaced (httpSessionBindingEvent e) {}}Classe de 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.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; classe pública Loginservlet estende httpServlet {private estático final long longVersionUiduid = 1L; Public void Doget (solicitação httpServletRequest, httpServletResponse Response) lança servletexception, ioexception {this.doPost (solicitação, resposta); } public void DoPost (solicitação httpServletRequest, httpServletResponse Response) lança servletexception, ioexception {request.setcharacterencoding ("utf-8"); // Defina o tipo de resposta Tipo de conteúdo string userName = request.getParameter ("nome de usuário"); // Obtenha o nome de usuário no parâmetro de solicitação // Adicionar atributos à sessão acionará o método atribuído no httpSessionAttributelistener if (nome de usuário! = Null &&! Username.equals ("" ")) {request.getSession (). SetAtTrribute (" username ", userr); } // Obtenha a lista de nome de usuário on -line da lista de contexto de aplicativos <String> online = (list <string>) getServletContext (). GetAttribute ("online"); System.out.println ("LogInservlet" + online); Response.setContentType ("Texto/html; charset = utf-8"); PrintWriter out = Response.getWriter (); out.println (""); out.println ("<title> Lista de usuários </ititle>"); out.println (""); out.println ("Usuário atual é:" + nome de usuário); out.print ("<HR> <H3> Lista de usuários on -line </h3>"); int size = online == nulo? 0: online.size (); for (int i = 0; i <tamanho; i ++) {if (i> 0) {out.println ("<br>"); } out.println (i + 1 + "." + online.get (i)); } // Nota: Para reescrever automaticamente o URL do link out.println ("<hr/> <a href =/" " + Response.Encodeurl (" LogoutListener ") +"/"> logout </a>"); out.println ("); out.println (" "); out.flush (); out.close ();}}Classe de logoutServlet
package 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; classe pública LogoutServlet estende httpServlet {public void Doget (httpServletRequest Solicy, httpSertletResponse resposta) lança servleTexception, ioexception {this.DOPOST (request, resposta); } public void DoPost (solicitação httpServletRequest, httpServletResponse Response) lança servletexception, ioexception {request.setcharacterencoding ("utf-8"); // Defina o tipo de conteúdo de resposta // Destrua a sessão, o método sessionDestroyed no SessionLasener será acionado para request.getSession (). Invalidate (); // Obtenha a lista de nome de usuário on -line da lista de contexto de aplicativos <String> online = (list <string>) getServletContext (). GetAttribute ("online"); Response.setContentType ("Texto/html; charset = utf-8"); PrintWriter out = Response.getWriter (); out.println (""); out.println ("<title> Lista de usuários </ititle>"); out.println (""); out.println (""); out.print ("<H3> Lista de usuários on -line </h3>"); int size = online == nulo? 0: online.size (); for (int i = 0; i <tamanho; 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) código 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/xmls/javaee/web-web-web-web-web--/java.sun.com/xmls/javaeeeee/web-web-web-web-web-web-web-web-web-web-web-web-web-web-web-/java.sun.com/ <sisiber-name> testServlet </sisiber-name> <listener> <lister-class> com.smalle.listener.onlinelistener </lister-class> </ferirer> <ervlet> <ervlet-name> logInservlet </servlet> <vervlet> com.smalle.letletlet </servlet> <somer-class> com.smalle.listner.ognerslet </-name> </class> com.smalle.Listner.Grletlet </-Name> </class> com.smalle.listner.ognertlet </name> <Verlet-name> LogInservlet </servlet-name> <url-tattern>/loginListener </url-tattern> </servlet-mapping> <Vertlet> <Verlet-name> logoutServlet </servlet-name> <Verlet-class> com.salle.listener.loGoutSertlet </sertlet-cll-class> <Verlet-name> logoutServlet </servlet-name> <url-tattern>/logoutListener </url-tattern> </servlet-mapping> <lorde---
(3) Código da camada de apresentação
<! Doctype html> <html> <head> <title> index.html </title> <meta name = "content-type" content = "text/html; charset = utf-8"> </head> <body> <form> action = "LoginListener" = "post"> username: </input> <body> <form> action = "LoginListener" = "post"> username: <sput> <body> <form> = "LoginListener" = "post"> username: <sput> <body> <form> action = "LoginListener" = "post"> username: <input> <body> <form> = "LoginListener" = "post"> username: <input> <bod> value = "Login"> <br> <br> </morm> </body> </html>
Para obter mais informações sobre os algoritmos Java, os leitores interessados neste site podem visualizar os tópicos: "Resumo das habilidades de programação de rede Java", "Tutoriais sobre estruturas de dados Java e algoritmos", "Resumo de Java Operação Dom Node", "Summary of Java e Operação Operação Skills" e "Summary de Java Node Skills", "Summary Arquivos Java e Skilly Skills" e "Summar
Espero que este artigo seja útil para a programação Java de todos.