検索
ホームページJava&#&チュートリアルJavaでオンライン人数をカウントする機能を実装する方法

    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 サイトの他の関連記事を参照してください。

    声明
    この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

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

    ホットツール

    DVWA

    DVWA

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

    PhpStorm Mac バージョン

    PhpStorm Mac バージョン

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

    SublimeText3 英語版

    SublimeText3 英語版

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

    SecLists

    SecLists

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

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強力な PHP 統合開発環境