1. リスナーの概要
リスナーは、特定のインターフェイスを実装する通常の Java プログラムです。このプログラムは、別の Java オブジェクトを監視するために特別に使用されます。メソッド呼び出しや属性変更など、監視対象オブジェクト上で上記のイベントが発生すると、即座にリスナーのメソッドが実行されます。
2. Java リスナーの種類
(1)ServletContextListener
WEB、アプリケーションの起動および破棄イベントをリッスンするために使用されます
public void contextInitialized( ServletContextEvent sce):Webアプリケーションの初期化時に実行
public void contextDestroyed(ServletContextEvent sce) {}:Webアプリケーションの破棄時に実行
(2)HttpSessionListener
を使用監視Session オブジェクトの作成と破棄
public void sessionCreated(HttpSessionEvent se) {}: セッションの作成時に実行されます
public void sessionDestroyed(HttpSessionEvent se) {}: セッションの作成時に実行されますdestroy
(3)ServletRequestListener
Requset オブジェクトの作成と破棄を監視するために使用されます
public void requsetCreated(HttpSessionEvent se) {}:requset の作成時に実行されます
public void requestDestroyed(HttpSessionEvent se) {}: requset が破棄されたときに実行されます
(4)ServletContextAttributeListener
は、以下を含む WEB スコープ属性の変更を監視するために使用されます。属性の削除 属性、属性の変更
attributeAdded(ServletContextEvent sce): ServletContext に属性を追加するときに実行されます
attributeAdded(ServletContextRemoved sce): ServletContext から属性を削除するときに実行されます
attributeReplaced( ServletContextRemoved sce): ServletContext の属性を変更するときに実行されます
(5)HttpSessionAttributeListener
は、属性の追加、属性の削除、属性の変更など、セッション スコープの属性の変更を監視するために使用されます
(6)ServletRequestAttributeListener
は、属性の追加、属性の削除、属性の変更など、Requset スコープの属性の変更を監視するために使用されます。
(7)HttpSessionActivationListener
が使用されますセッションでのオブジェクトのシリアル化と逆シリアル化
3. リスナーは人数をカウントする機能を実装します
(1) まずリスナー パッケージのリスナーを作成し、次に新しい OnlineListener クラスを作成します
package listener; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import javax.servlet.http.HttpSessionBindingEvent; @WebListener() public class OnlineListener implements ServletContextListener,HttpSessionListener, HttpSessionAttributeListener { private static int count=0; public OnlineListener() {//构造函数 } // ServletContextListener的实现方法,在初始化web应用时执行,你可以在此处初始化server上下文相关数据 public void contextInitialized(ServletContextEvent sce) {//应用初始化完成 } // ServletContextListener的实现方法,在web应用关闭时执行 public void contextDestroyed(ServletContextEvent sce) { } // HttpSessionListener的实现方法,session被创建的时候执行 public void sessionCreated(HttpSessionEvent se) {//创建 count++; ServletContext app = se.getSession().getServletContext(); app.setAttribute("count",count); } // HttpSessionListener的实现方法,session被销毁的时候执行 public void sessionDestroyed(HttpSessionEvent se) { count--; ServletContext app = se.getSession().getServletContext(); app.setAttribute("count",count); } }
(2) リスナー サーブレットのインターフェイスを作成します
import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet(name = "OnlineServlet",urlPatterns = "/online") public class OnlineServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String op=request.getParameter("op"); String result=""; switch (op){ case "login": //request.getSession()触发监听器的sessionCreated ServletContext app=request.getSession().getServletContext(); int count= (int) app.getAttribute("count"); result=String.format("当前%d人在线",count); break; case "logout": //销毁session,触发监听器的sessionDestroy request.getSession().invalidate();//销毁session result="您已经退出了!"; } response.setContentType("text/html;charset=utf-8"); PrintWriter out=response.getWriter(); out.write(result); out.close(); } }
4.Redis は人数をカウントする機能を実装します
要件: 平均アクセス時間、同時オンラインの平均人数
(1) 最初にデータ テーブルを設計します:
ページ時間へのアクセスを開始し、ページのタイムテーブルを終了します: (id、place、 ip, user_id, user_name, begin_time, end_time, env, info, len_min)
統計テーブル: 平均訪問時間、平均同時オンライン人数、最大同時オンライン人数 (id) 、day、age_len_visit_min、acu、pcu)
統計記録テーブル: 1 分あたり同時にオンラインになった人の数。 (id, min_time, num)
(2) redis を使用して現在のオンライン ユーザーを保存します。各呼び出しは 1 分間の閲覧とみなされます (ビジネスに応じてさらに絞り込むことができ、スケジュールされたユーザーのみが参照されます)タスクは最後の 1 分を記録する必要がある) と現在の 1 分間のユーザーを記録する必要があるため、ユーザーが特定のページにアクセスする頻度を計算できます。
(3) 同時に、ユーザーがページにアクセスし始めた時刻も記録します。
(4) データ処理を容易にするために、1 分あたりのページごとの訪問数を記録できます。
(5) redis、2 つのハッシュを保存します:
begin、タイマー 保存されたハッシュ セットには詳細情報が記録されます
now、インターフェイスによって渡されたユーザー アクセス セット、および更新時刻が記録されます
更新およびリフレッシュ操作はタイマーを通じて実行されます。
ps: ハッシュ内の個々のキーの有効期限を自動的に設定することはできません。または、Redis モニタリングを使用して文字列タイプのキーを使用できます。モニタリングはフィルタリングです。マッチング後に処理すべきものを処理します。
以上がJavaでオンライン人数をカウントする機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
