Heim Java javaLernprogramm Beispiel für die Verwendung von Listener zur Implementierung globaler Statistiken auf der Website

Beispiel für die Verwendung von Listener zur Implementierung globaler Statistiken auf der Website

Jun 27, 2017 am 10:19 AM
listener 利用 实现 网站

1. Globale statistische Variablenklasse der Website, nur globale Variablen definieren

 1 package com.lt.listener; 2  3 import java.util.Date; 4 import java.util.HashMap; 5 import java.util.Map; 6  7 import javax.servlet.http.HttpSession; 8 /** 9  * 网站全局变量类10  * @author LIUTIE11  *12  */13 public abstract class ApplicationConstants {14     15     /**16      * 用户登录session名称17      */18     public static final String LOGIN_SESSION_NAME = "userInfo";19 20     /**21      * 索引所有的session  
22      * 用于单一登录23      */24     public static Map<String,HttpSession> SESSION_MAP = new HashMap<>();25     26     /**27      * 当前在线用户数28      */29     public static int CURRENT_LOGIN_COUNT = 0;30     31     /**32      * 历史访客总数33      */34     public static int TOTAL_HISTORY_COUNT = 0;35     36     /**37      * 最高同时在线人数38      */39     public static int MAX_ONLINE_COUNT = 0;40     41     /**42      * 服务器启动时间43      */44     public static Date SERVER_START_DATE = new Date();45     46     /**47      * 最高在线人数时间48      */49     public static Date MAX_ONLINE_COUNT_DATE = new Date();50     51     52     53 }
Nach dem Login kopieren
Code anzeigen

2. Implementieren Sie die ServletContext-Überwachung zum Aufzeichnen von Serverinformationen

 1 package com.lt.listener; 2  3 import java.util.Date; 4  5 import javax.servlet.ServletContextEvent; 6 import javax.servlet.ServletContextListener; 7  8 /** 9  * servletContext监听10  * 记录服务器信息 启动关闭时间等11  * @author LIUTIE12  *13  */14 public class MyContextListener implements ServletContextListener {15 16     /**17      * 服务器启动时被调用18      */19     @Override20     public void contextDestroyed(ServletContextEvent arg0) {21         //记录启动时间22         ApplicationConstants.SERVER_START_DATE = new Date();23     }24 25     /**26      * 服务器关闭时被调用27      */28     @Override29     public void contextInitialized(ServletContextEvent arg0) {30         //保存数据到硬盘31         // TODO Auto-generated method stub32     }33 34 }
Nach dem Login kopieren
Code anzeigen

3. Implementieren Sie die HttpSessionListener- und HttpSessionAttributeListener-Überwachung, die zum Aufzeichnen von Anmeldeinformationen, der Gesamtzahl der Besucher, der Anzahl der Online-Personen und der Realisierung einer Einzelanmeldung usw. verwendet wird.

  1 package com.lt.listener;  2   3 import java.util.Date;  4   5 import javax.servlet.http.HttpSession;  6 import javax.servlet.http.HttpSessionAttributeListener;  7 import javax.servlet.http.HttpSessionBindingEvent;  8 import javax.servlet.http.HttpSessionEvent;  9 import javax.servlet.http.HttpSessionListener; 10  11 /** 12  * session监听 13  * 记录登录信息 访问总人数 在线人数等 14  * 实现单一登录 15  * @author LIUTIE 16  * 17  */ 18 public class MySessionListener implements HttpSessionListener, HttpSessionAttributeListener { 19  20     /** 21      * session创建时被调用 22      */ 23     @Override 24     public void sessionCreated(HttpSessionEvent sessionEvent) { 25         // 获取创建的session 26         HttpSession session = sessionEvent.getSession(); 27         // 添加到map 28         ApplicationConstants.SESSION_MAP.put(session.getId(), session); 29         // 访问总人数++ 30         ApplicationConstants.TOTAL_HISTORY_COUNT++; 31         // 如果map总数大于最高同时在线人数则更新最高在线人数及时间 32         if (ApplicationConstants.MAX_ONLINE_COUNT < ApplicationConstants.SESSION_MAP.size()) { 33             ApplicationConstants.MAX_ONLINE_COUNT = ApplicationConstants.SESSION_MAP.size(); 34             ApplicationConstants.MAX_ONLINE_COUNT_DATE = new Date(); 35         } 36  37     } 38  39     /** 40      * session销毁时被调用 41      */ 42     @Override 43     public void sessionDestroyed(HttpSessionEvent sessionEvent) { 44         // 获取即将被销毁的session 45         HttpSession session = sessionEvent.getSession(); 46         // 在map中根据key移除 47         ApplicationConstants.SESSION_MAP.remove(session.getId()); 48     } 49  50     /** 51      * 添加session属性时被调用 52      */ 53     @Override 54     public void attributeAdded(HttpSessionBindingEvent event) { 55         // 判断是否添加的用户登录信息session 56         if (event.getName().equals(ApplicationConstants.LOGIN_SESSION_NAME)) { 57             // 当前登录用户数++ 58             ApplicationConstants.CURRENT_LOGIN_COUNT++; 59             // 是否在其他机器登录处理 60             isLoginInOtherPlace(event); 61         } 62     } 63  64     /** 65      * 移除session属性时被调用 66      */ 67     @Override 68     public void attributeRemoved(HttpSessionBindingEvent event) { 69         // 判断是否移除的用户登录信息session 70         if (event.getName().equals(ApplicationConstants.LOGIN_SESSION_NAME)) { 71             // 当前登录用户数-- 72             ApplicationConstants.CURRENT_LOGIN_COUNT--; 73             // 是否在其他机器登录处理 74             isLoginInOtherPlace(event); 75         } 76     } 77  78     /** 79      * 修改session属性时被调用 80      */ 81     @Override 82     public void attributeReplaced(HttpSessionBindingEvent event) { 83  84         // 判断是否修改的用户登录信息session 85         if (event.getName().equals(ApplicationConstants.LOGIN_SESSION_NAME)) { 86             // 是否在其他机器登录处理 87             isLoginInOtherPlace(event); 88         } 89     } 90  91     /** 92      * 是否在其他机器登录处理 93      * 
 94      * @param event 95      */ 96     private void isLoginInOtherPlace(HttpSessionBindingEvent event) { 97         // 获取添加的session 98         HttpSession session = event.getSession(); 99         // 遍历查找此用户是否登录100         for (HttpSession s : ApplicationConstants.SESSION_MAP.values()) {101             // 如果已经在其他机器登录则使其失效102             if (event.getValue().equals(s.getAttribute(ApplicationConstants.LOGIN_SESSION_NAME))103                     && session.getId() != s.getId()) {104                 // 使session失效105                 session.invalidate();106                 break;107             }108         }109     }110 }
Nach dem Login kopieren
Code anzeigen

4. Implementieren Sie die Anforderungsüberwachung, die zum Aufzeichnen von Kundeninformationen wie IP, URL usw. verwendet wird.

 1 package com.lt.listener; 2  3 import javax.servlet.ServletRequestEvent; 4 import javax.servlet.ServletRequestListener; 5 import javax.servlet.http.HttpServletRequest; 6  7 /** 8  * request监听 用于记录客户信息 ip、url等 9  * 
10  * @author LIUTIE11  *12  */13 public class MyRequestListener implements ServletRequestListener {14 15     /**16      * request销毁时调用17      */18     @Override19     public void requestDestroyed(ServletRequestEvent event) {20         // TODO Auto-generated method stub21 22     }23 24     /**25      * request创建时调用26      */27     @Override28     public void requestInitialized(ServletRequestEvent event) {29         HttpServletRequest request = (HttpServletRequest) event;30         // 客户端ip31         String ip = request.getRemoteAddr();32         // 访问的URL地址33         String url = request.getRequestURI();34         // 只做简单后台打印35         System.out.println("The client ip is " + ip);36         System.out.println("The address url is " + url);37     }38 39 }
Nach dem Login kopieren
Code anzeigen

5. Konfigurieren Sie eine Listenerzeile in web.xml

        <listener><listener-class>com.lt.listener.MyContextListener</listener-class></listener><listener><listener-class>com.lt.listener.MySessionListener</listener-class></listener><listener><listener-class>com.lt.listener.MyRequestListener</listener-class></listener>
Nach dem Login kopieren
Code anzeigen

Listener-Typ:

1. Listener, der die Erstellung und Zerstörung von Objekten überwacht:

HttpSessionListener: sessionCreated(HttpSessionEvent sessionEvent) , sessionDestroyed(HttpSessionEvent sessionEvent)

ServletRequestListener: requestInitialized(ServletRequestEvent event), requestDestroyed(ServletRequestEvent event)

ServletContextListener: contextInitialized(ServletContextEvent event), contextDestroyed(ServletContextEvent event)

2. Auf Änderungen in den Eigenschaften des Objekts achten. Listener:

HttpSessionAttributeListener: (wird beim Hinzufügen, Aktualisieren oder Entfernen einer Sitzung ausgelöst)

attributeAdded(HttpSessionBindingEvent event), attributeReplaced(HttpSessionBindingEvent event) , attributeRemoved(HttpSessionBindingEvent event)

ServletContextAttributeListener: (wird ausgelöst, wenn Kontext hinzugefügt, aktualisiert oder entfernt wird)

attributeAdded(ServletContextAttributeEvent event), attributeReplaced(ServletContextAttributeEvent event), attributeRemoved(ServletContextAttributeEvent event)

ServletRequestAttributeListener: (Hinzufügen, Aktualisieren, Verschieben wird ausgelöst, wenn keine Anforderung vorliegt)

attributeAdded(ServletRequestAttributeEvent event), attributeReplaced(ServletRequestAttributeEvent event), attributeRemoved(ServletRequestAttributeEvent event)

 3. Hören Sie zu zu den Objekten in der Sitzung

HttpSessionBindingListener: ( Wird ausgelöst, wenn das Objekt in die Sitzung eingefügt und aus der Sitzung entfernt wird)

ValueBound(HttpSessionBindingEvent event), valueUnbound(HttpSessionBindingEvent event)

HttpSessionActivationListener: (Das Objekt in der Sitzung wird passiviert und das Objekt wird reaktiviert. Auslösen von ps beim Laden: Der Vorgang des Speicherns des Inhalts in der Sitzung auf der Festplatte wird als Passivierung bezeichnet. Die Passivierung muss die Serialisierbare Serialisierung implementieren Schnittstelle)

sessionWillPassivate(HttpSessionEvent-Ereignis), sessionDidActivate(HttpSessionEvent-Ereignis)

Das obige ist der detaillierte Inhalt vonBeispiel für die Verwendung von Listener zur Implementierung globaler Statistiken auf der Website. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie implementiert man die doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen? Wie implementiert man die doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen? Mar 24, 2024 am 11:27 AM

Wie implementiert man die doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen? Mit dem Aufkommen der sozialen Medien ist WeChat zu einem unverzichtbaren Kommunikationsmittel im täglichen Leben der Menschen geworden. Viele Menschen können jedoch auf ein Problem stoßen: Sie können sich gleichzeitig auf demselben Mobiltelefon bei mehreren WeChat-Konten anmelden. Für Huawei-Mobiltelefonbenutzer ist es nicht schwierig, eine doppelte WeChat-Anmeldung zu erreichen. In diesem Artikel wird erläutert, wie eine doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen erreicht wird. Erstens bietet das EMUI-System, das mit Huawei-Mobiltelefonen geliefert wird, eine sehr praktische Funktion – das doppelte Öffnen von Anwendungen. Durch die doppelte Öffnungsfunktion der Anwendung können Benutzer gleichzeitig

PHP-Programmierhandbuch: Methoden zur Implementierung der Fibonacci-Folge PHP-Programmierhandbuch: Methoden zur Implementierung der Fibonacci-Folge Mar 20, 2024 pm 04:54 PM

Die Programmiersprache PHP ist ein leistungsstarkes Werkzeug für die Webentwicklung, das eine Vielzahl unterschiedlicher Programmierlogiken und Algorithmen unterstützen kann. Unter diesen ist die Implementierung der Fibonacci-Folge ein häufiges und klassisches Programmierproblem. In diesem Artikel stellen wir vor, wie Sie die Fibonacci-Folge mit der Programmiersprache PHP implementieren, und fügen spezifische Codebeispiele bei. Die Fibonacci-Folge ist eine mathematische Folge, die wie folgt definiert ist: Das erste und das zweite Element der Folge sind 1, und ab dem dritten Element ist der Wert jedes Elements gleich der Summe der beiden vorherigen Elemente. Die ersten paar Elemente der Sequenz

So implementieren Sie die WeChat-Klonfunktion auf Huawei-Mobiltelefonen So implementieren Sie die WeChat-Klonfunktion auf Huawei-Mobiltelefonen Mar 24, 2024 pm 06:03 PM

So implementieren Sie die WeChat-Klonfunktion auf Huawei-Mobiltelefonen Mit der Popularität sozialer Software und der zunehmenden Bedeutung von Datenschutz und Sicherheit rückt die WeChat-Klonfunktion allmählich in den Mittelpunkt der Aufmerksamkeit der Menschen. Die WeChat-Klonfunktion kann Benutzern helfen, sich gleichzeitig bei mehreren WeChat-Konten auf demselben Mobiltelefon anzumelden, was die Verwaltung und Nutzung erleichtert. Es ist nicht schwierig, die WeChat-Klonfunktion auf Huawei-Mobiltelefonen zu implementieren. Sie müssen lediglich die folgenden Schritte ausführen. Schritt 1: Stellen Sie sicher, dass die Version Ihres Mobiltelefonsystems und die WeChat-Version den Anforderungen entsprechen. Stellen Sie zunächst sicher, dass die Version Ihres Huawei-Mobiltelefonsystems sowie die WeChat-App auf die neueste Version aktualisiert wurden.

Meistern Sie, wie Golang Möglichkeiten für die Spieleentwicklung eröffnet Meistern Sie, wie Golang Möglichkeiten für die Spieleentwicklung eröffnet Mar 16, 2024 pm 12:57 PM

Im heutigen Bereich der Softwareentwicklung wird Golang (Go-Sprache) als effiziente, prägnante und hochgradig parallele Programmiersprache von Entwicklern zunehmend bevorzugt. Seine umfangreiche Standardbibliothek und die effizienten Parallelitätsfunktionen machen es zu einer hochkarätigen Wahl im Bereich der Spieleentwicklung. In diesem Artikel wird untersucht, wie man Golang für die Spieleentwicklung verwendet, und seine leistungsstarken Möglichkeiten anhand spezifischer Codebeispiele demonstriert. 1. Golangs Vorteile bei der Spieleentwicklung: Als statisch typisierte Sprache wird Golang beim Aufbau großer Spielsysteme verwendet.

So implementieren Sie eine exakte Divisionsoperation in Golang So implementieren Sie eine exakte Divisionsoperation in Golang Feb 20, 2024 pm 10:51 PM

Die Implementierung exakter Divisionsoperationen in Golang ist ein häufiger Bedarf, insbesondere in Szenarien mit Finanzberechnungen oder anderen Szenarien, die hochpräzise Berechnungen erfordern. Der in Golang integrierte Divisionsoperator „/“ wird für Gleitkommazahlen berechnet, und manchmal besteht das Problem eines Präzisionsverlusts. Um dieses Problem zu lösen, können wir Bibliotheken von Drittanbietern oder benutzerdefinierte Funktionen verwenden, um exakte Divisionsoperationen zu implementieren. Ein gängiger Ansatz ist die Verwendung des Rat-Typs aus dem Paket math/big, der eine Darstellung von Brüchen bereitstellt und zur Implementierung exakter Divisionsoperationen verwendet werden kann.

Implementierungshandbuch für PHP-Spielanforderungen Implementierungshandbuch für PHP-Spielanforderungen Mar 11, 2024 am 08:45 AM

Implementierungsleitfaden für PHP-Spielanforderungen Mit der Popularität und Entwicklung des Internets erfreut sich der Markt für Webspiele immer größerer Beliebtheit. Viele Entwickler hoffen, die PHP-Sprache zur Entwicklung ihrer eigenen Webspiele nutzen zu können, und die Umsetzung der Spielanforderungen ist ein wichtiger Schritt. In diesem Artikel wird erläutert, wie Sie mithilfe der PHP-Sprache allgemeine Spielanforderungen implementieren und spezifische Codebeispiele bereitstellen. 1. Spielfiguren erstellen In Webspielen sind Spielfiguren ein sehr wichtiges Element. Wir müssen die Attribute des Spielcharakters wie Name, Level, Erfahrungswert usw. definieren und Methoden für deren Bedienung bereitstellen

Was bedeutet das von Douyin empfohlene Video? Wie verwende ich Douyin, um Videos zu empfehlen? Was bedeutet das von Douyin empfohlene Video? Wie verwende ich Douyin, um Videos zu empfehlen? Mar 27, 2024 pm 03:01 PM

Als weltbekannte soziale Plattform für Kurzvideos hat Douyin mit seinem einzigartigen personalisierten Empfehlungsalgorithmus die Gunst einer großen Anzahl von Nutzern gewonnen. Dieser Artikel befasst sich mit dem Wert und den Prinzipien der Douyin-Videoempfehlung, um den Lesern zu helfen, diese Funktion besser zu verstehen und optimal zu nutzen. 1. Was ist das von Douyin empfohlene Video? Das von Douyin empfohlene Video verwendet intelligente Empfehlungsalgorithmen, um personalisierte Videoinhalte basierend auf ihren Interessen und Verhaltensgewohnheiten zu filtern und an sie weiterzugeben. Die Douyin-Plattform analysiert den Sehverlauf der Nutzer, ihr Like- und Kommentarverhalten, teilt Aufzeichnungen und andere Daten, um aus einer riesigen Videobibliothek Videos auszuwählen und zu empfehlen, die den Vorlieben der Nutzer am besten entsprechen. Dieses personalisierte Empfehlungssystem verbessert nicht nur das Benutzererlebnis, sondern hilft Benutzern auch dabei, mehr Videoinhalte zu entdecken, die ihren Vorlieben entsprechen, und erhöht so die Benutzerbindung und -bindungsrate. bei diesem

Verwendung von PHP zur Implementierung von SaaS: eine umfassende Analyse Verwendung von PHP zur Implementierung von SaaS: eine umfassende Analyse Mar 07, 2024 pm 10:18 PM

Es tut mir wirklich leid, dass ich keine Echtzeit-Programmieranleitung geben kann, aber ich kann Ihnen ein Codebeispiel zur Verfügung stellen, um Ihnen ein besseres Verständnis dafür zu vermitteln, wie Sie PHP zur Implementierung von SaaS verwenden. Es folgt ein Artikel mit 1.500 Wörtern und dem Titel „Verwendung von PHP zur Implementierung von SaaS: Eine umfassende Analyse“. Im heutigen Informationszeitalter ist SaaS (Software as a Service) zur gängigen Art der Softwarenutzung für Unternehmen und Privatpersonen geworden. Es bietet eine flexiblere und bequemere Möglichkeit, auf Software zuzugreifen. Mit SaaS müssen Benutzer nicht vor Ort sein

See all articles