リスナーは、特定のインターフェイスを実装する通常の Java プログラムです。このプログラムは、別の Java オブジェクトを監視するために特別に使用されます。メソッド呼び出しや属性変更など、監視対象オブジェクト上で上記のイベントが発生すると、即座にリスナーのメソッドが実行されます。
WEB、アプリケーションの起動および破棄イベントをリッスンするために使用されます
public void contextInitialized( ServletContextEvent sce):Webアプリケーションの初期化時に実行
public void contextDestroyed(ServletContextEvent sce) {}:Webアプリケーションの破棄時に実行
を使用監視Session オブジェクトの作成と破棄
public void sessionCreated(HttpSessionEvent se) {}: セッションの作成時に実行されます
public void sessionDestroyed(HttpSessionEvent se) {}: セッションの作成時に実行されますdestroy
Requset オブジェクトの作成と破棄を監視するために使用されます
public void requsetCreated(HttpSessionEvent se) {}:requset の作成時に実行されます
public void requestDestroyed(HttpSessionEvent se) {}: requset が破棄されたときに実行されます
は、以下を含む WEB スコープ属性の変更を監視するために使用されます。属性の削除 属性、属性の変更
attributeAdded(ServletContextEvent sce): ServletContext に属性を追加するときに実行されます
attributeAdded(ServletContextRemoved sce): ServletContext から属性を削除するときに実行されます
attributeReplaced( ServletContextRemoved sce): ServletContext の属性を変更するときに実行されます
は、属性の追加、属性の削除、属性の変更など、セッション スコープの属性の変更を監視するために使用されます
は、属性の追加、属性の削除、属性の変更など、Requset スコープの属性の変更を監視するために使用されます。
が使用されますセッションでのオブジェクトのシリアル化と逆シリアル化
(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(); } }
要件: 平均アクセス時間、同時オンラインの平均人数
(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 サイトの他の関連記事を参照してください。