Este artigo apresenta principalmente um exemplo de uso dos ouvintes para Java para contar o número de pessoas on -line em um site. Tem certo valor de referência. Amigos necessitados podem aprender sobre isso.
(1) Crie uma classe de implementação do ouvinte
Para contar aproximadamente o número de pessoas on -line em um site, primeiro, você pode ouvir através do ServletContextListener. Quando o contexto do aplicativo da Web for iniciado, adicione uma lista no ServletContext para preparar o nome de usuário armazenado no online; Em seguida, você pode ouvir o httpSessionAttributelistener. Quando o usuário efetua login, define o nome de usuário com sucesso para a sessão, o nome de usuário é armazenado na lista da lista no ServletContext ao mesmo tempo; Finalmente, ouça através do HttpSessionListener. Quando o usuário registra a sessão, o nome de usuário é excluído da lista da lista no contexto do aplicativo.
Portanto, escreva a classe OnLineListener para implementar as interfaces ServletContextListener, HTTPSessionAttributelistener e HttpSessionListener. O código específico é o seguinte:
pacote com.web.servlet; importar java.util.LinkedList; importar java.util.list; importar javax.servlet.servletContext; importar javax.servlet.servletContextevent; importar javax.servlet.servletContextListener; importar javax.servlet.http.httpSessionAttributelistener; importar javax.servlet.http.httpSessionBindingEvent; importar javax.servlet.http.httpSessionEvent; importar javax.servlet.http.httpSessionListener; // Classe de implementação do ouvinte de estatísticas de usuário on -line OnLineListener implementa servletContextListener, httpSessionAttributelistener, httpSessionListener {private servletContext aplicativo = null; public void contextDestroyed (servletContextevent arg0) {// TODO Método Auto-Gerado Stub} public void contextinitialized (servletContextevent arg0) {// inicialize um objeto de aplicativo this.application = arg0.getServletContext (); // Defina um atributo de lista para salvar o nome de usuário this.application.setattribute ("online", new LinkedList <String> ()); } // Método que será retorno ao adicionar atributos à sessão public void atribuiDedded (httpSessionBindingEvent arg0) {// Obtenha a lista de nome de usuário <String> online = (list <string>) this.application .getAttribute ("online"); if ("nome de usuário" .equals (arg0.getName ())) {// Adicione o nome de usuário atual à lista online.add ((string) arg0.getValue ()); } // Redefina a lista adicionada ao atributo do aplicativo. } public void atributeRemoved (httpSessionBindingEvent arg0) {// TODO Método Auto-Gerado Stub} public void atributeReplaced (httpSessionBindingEvent arg0) {// TODO Método Auto-Gerado} Public Void SessionCreated (httpsdoEvent arg0) {Method Auto-GONENATED} Void PublicCreated (HttpsdoEvent arg0) {AUTO-GOERATED} Quando a sessão é destruída pública void sessionDestroyed (httpsessionEvent arg0) {// Obtenha a lista de nome de usuário <String> online = (list <string>) this.Application .getAttribute ("online"); // Obtenha o nome de usuário atual Nome de usuário = (String) arg0.getSession (). GetAttribute ("nome de usuário"); // exclua este nome de usuário da lista online.Remove (nome de usuário); // Redefina a lista excluída na propriedade do aplicativo this.application.setattribute ("online", online); }} (2) Registre o ouvinte em web.xml
Depois que o ouvinte é implementado, ele também precisa se registrar no arquivo web.xml para funcionar. Você só precisa adicionar elementos no web.xml da seguinte maneira.
<!-Registre um ouvinte-> <i ouvinte> <!-Especifique o nome totalmente qualificado da classe de implementação do ouvinte-> </ouvinte-class> com.web.servlet.onlinelistener
Finalmente, criamos vários servlets para testar a funcionalidade implementada por esse ouvinte.
Código de classe do servlet para lidar com o login de usuários:
pacote com.web.servlet; importar java.io.ioException; importar java.io.printwriter; importar java.util.list; importar javax.servlet.servletexception; importar javax.servlet.http.httpServlet; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; // Servlet Handling Login do usuário da classe public LogInservlet estende httpServlet {public void Doget (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {this.DoPost (request, resposta); } public void DoPost (solicitação HTTPServletRequest, resposta HttpServletResponse) lança servletexception, ioexception {request.setcharacterencoding ("utf-8"); // defina o tipo de conteúdo correspondente o nome da string = o request. Método atribuiDedded no httpSessionAttributElistener if (nome de usuário! = null &&! userName.equals ("" ")) {request.getSession (). setAttribute (" nome de usuário ", nome de usuário); } // 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 ("<html>"); out.println ("<head> <title> Lista de usuários </title> </head>"); out.println ("<body>"); out.println ("O 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 ="/"mce_href ="/"" " + Response.encodeurl (" logout ") +"/"> logout </a>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.Close (); }} Código de classe para lidar com o login de usuários no servlet
pacote com.web.servlet; importar java.io.*; importar java.util.list; importar javax.servlet.servletexception; importar javax.servlet.http.*; // servlet que lida com a sessão de logout de usuário public classe logoutServlet estende HttpServlet {public void Doget (solicitação httpServletReQuest, httpServletResponse resposta) lança servletexception, iooxception {this.doPost (solicitação, resposta); } public void DoPost (solicitação httpServletRequest, httpServletResponse Response) lança servletexception, ioexception {request.setcharacterencoding ("utf-8"); // Destruir a sessão, o método sessionDestroyed no SessionLasener será acionado solicitando.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 ("<html>"); out.println ("<head> <title> Lista de usuários </title> </head>"); out.println ("<body>"); 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 ="/"mce_href ="/"" index.html/"> home </a>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.Close (); }} Em seguida, crie um arquivo index.html para os usuários efetuarem login, o código é o seguinte:
<! Doctype html public "-// w3c // dtd html 4.01 transitória // pt"> <html> <head> <meta http-equiv = "content-type" content = "text/html; chars = utf-8"> <title> <tempe " Nome de usuário: <input type = "text" name = "nome de usuário"/> <input type = "submit" value = "login"/> <br/> <br/> </morm> </body> </html>
Implante o total de contêineres da Web no Tomcat. Abra o navegador para acessar
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.