В этой статье описывается метод реализации онлайн -функции мониторинга пользователей онлайн на основе слушателя сервиса. Поделитесь этим для вашей ссылки, следующим образом:
1. Анализ:
Чтобы сделать онлайн -номер на веб -сайте, вы можете прослушать через ServletContextListener. Когда контекст веб -приложения запускается, добавьте список в ServletContext. Используйте его, чтобы подготовить имя пользователя, хранящееся в Интернете, а затем послушайте через httpsessionAttributeListener. Когда пользователь успешно входит в систему, установите имя пользователя на сеанс. В то же время метод имени пользователя помещается в список ServletContext и, наконец, прослушал через httpsessionListener. Когда пользователь выходит из сеанса, имя пользователя удаляется из списка в списке в области контекста приложения.
2. Что следует отметить
Во время тестирования вам нужно начать различные браузеры, чтобы войти в систему для разных пользователей. Только нажав кнопку «Выход», вы можете уменьшить онлайн -пользователей. Закрыть браузер не может уменьшить онлайн -пользователей.
3. Исходный код проекта
(1) код Java
OnlineListener Class
пакет com.smalle.listener; import java.util.linkedlist; import java.util.list; импорт javax.servlet.servletcontext; import javax.servlet.servletcontextevent; import javax.servlet.servletcontextreder; импорт javax.servlet.httt javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;public class OnlineListener implements ServletContextListener, HttpSessionAttributeListener, HttpSessionListener { private ServletContext application = null; // Методы, которые обращены в начало контекста приложения @Override public void contextInitialized (ServletContexTexTent e) {// Инициализировать приложение Application Object = e.getServletContext (); // Установить атрибут списка для сохранения онлайн -имя пользователя this.application.setattribute ("Online", новый LinkedList <string> ()); } // Метод обратного вызова при добавлении атрибутов в сеанс @Override public void attributeAdded (httpsessionBindingevent e) {// Получить список имен имен пользователя if ("имя пользователя" .equals (e.getName ())) {onlines.add ((string) e.getValue ()); } // Сбросить свойство приложения столбца добавленного списка. this.application.setattribute ("Online", Onlines); } // Методы, которые обращены, когда сеанс уничтожен @override public void sessionDestroyed (httpsessionEvent e) {// Получить список имен имен <String> onlines = (list <string>) this.Application.getAttribute ("online"); // Получить текущее имя пользователя string username = (string) e.getsession (). Getattribute ("username"); // удалить этого пользователя из списка onlines.remove (имя пользователя); // сбросить удаленный список в свойство приложения. this.application.setattribute ("Online", Onlines); } public void sessionCreated (httpsessionEvent e) {} public void attributerEmoved (httpsessionBindingevent e) {} public void attributeRed (httpsessionBindingevent e) {}}LoginServlet Class
пакет 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.httpservelcevelt; javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletresponse; открытый логический класс Extens httpservlet {private Static Long Long Serialversionuid = 1L; public void Doget (httpservletrequest, httpservletresponse response) бросает Servletexception, ioexception {this.dopost (запрос, ответ); } public void Dopost (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {request.setcharacterencoding ("utf-8"); // Установить тип содержимого ответа string username = request.getParameter ("username"); // Получить имя пользователя в параметре запроса // Добавить атрибуты в сеанс запустит метод атрибута в httpsessionAttributeListener if (username! = Null &&! Username.equals ("")) {request.getSession (). Setattribute ("usermanme", useranme); } // Получить список пользователей онлайн из списка контекста приложения <string> онлайн = (list <string>) getServletContext (). GetAttribute ("Online"); System.out.println ("LoginServlet" + Online); response.setContentType ("text/html; charset = utf-8"); Printwriter Out = response.getWriter (); out.println ("" "); out.println ("<Telect> List пользователей </title>"); out.println ("" "); out.println («Текущий пользователь:» + имя пользователя); out.print ("<hr> <h3> Список пользователей онлайн </h3>"); int size = online == null? 0: онлайн.size (); for (int i = 0; i <size; i ++) {if (i> 0) {out.println ("<br>"); } out.println (i + 1 + "." + Online.get (i)); } // ПРИМЕЧАНИЕ. Чтобы автоматически переписать URL -адрес ссылки Out.println ("<hr/> <a href =/" " + response.encodeurl (" logoutListener ") +"/"> logout </a>"); out.println ("); out.println (" "); out.flush (); out.close ();}}LogoutServlet Class
пакет 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.httpservelcevelt; javax.servlet.http.httpservletresponse; public class LogoutServlet расширяет httpservlet {public void Doget (httpservlectrequest, httpservletresponse response) throws servletexception, ioexception {this.dopost (запрос, ответ); } public void Dopost (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {request.setcharacterencoding ("utf-8"); // Установить тип содержимого ответа // Уничтожение сеанса, метод сеанса, разработанный в SessionLinstener, будет запускается для request.getSession (). Invalidate (); // Получить онлайн -список пользователей из списка контекста приложения <string> онлайн = (list <string>) getServletContext (). GetAttribute ("Online"); response.setContentType ("text/html; charset = utf-8"); Printwriter Out = response.getWriter (); out.println ("" "); out.println ("<Telect> List пользователей </title>"); out.println ("" "); out.println ("" "); out.print ("<h3> Список пользователей онлайн </h3>"); int size = online == null? 0: онлайн.size (); for (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) Код 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" = "webapp" = "webapp" = "webapp_dapp_3_0.0. <display-name>testServlet</display-name> <listener> <listener-class>com.smalle.listener.OnlineListener</listener-class> </listener> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.smalle.listener.LoginServlet</servlet-class> </servlet> <servlet-mapping> <Servlet-name> logInservlet </servlet-name> <url-pattern>/loginlistener </url-pattern> </servlet> <servlet> <servlet-name> logoutservlet </servlet-name> <servlet-class> com.smalle.listener.logoutservlet </servlet-class> </servlet> <Servlet-Mpaping> </Servlet> <Servlet-name> logoutServlet </servlet-name> <url-pattern>/logoutListener </url-pattern> </servlet-mapping> <selcopport-file-list> <welcely-file> index.jsp </werveding-file> </werveding-file-list> </web-app>
(3) Код уровня презентации
<! Doctype html> <html> <head> <title> index.html </title> <meta name = "content-type" content = "text/html; charset = utf-8"> </head> <body> <form action = "loginlistener" method = "post"> unseraname: <input vise = "text" use = "use =" use "use =" use "use emopmer" use = "use" use effect = "use" use "use emopmer emopmer". value = "login"> <br> <br> </form> </body> </html>
Для получения дополнительной информации об алгоритмах Java, читатели, которые заинтересованы в этом сайте, могут просмотреть темы: «Сводка навыков программирования сети Java», «Учебные пособия по структурам данных и алгоритмам Java», «Сводка навыков операции Java Dom Node», «Сводка навыков файла Java File и Directory навыки операции Java CACH
Я надеюсь, что эта статья будет полезна для всех Java Programming.