Rumah  >  Artikel  >  Java  >  Bagaimana untuk melaksanakan fungsi mengira orang dalam talian di Jawa

Bagaimana untuk melaksanakan fungsi mengira orang dalam talian di Jawa

WBOY
WBOYke hadapan
2023-04-19 09:13:021788semak imbas

    1. Pengenalan kepada pendengar

    Pendengar ialah program java biasa yang melaksanakan antara muka tertentu Program ini digunakan khas untuk memantau objek java yang lain . Panggilan kaedah atau perubahan atribut, apabila peristiwa di atas berlaku dalam objek yang dipantau, kaedah pendengar akan dilaksanakan serta-merta.

    2. Jenis pendengar Java

    (1)ServletContextListener

    Digunakan untuk mendengar WEB, acara permulaan dan pemusnahan

    konteks kekosongan awam yang dimulakan(ServletContexts sce): Dilaksanakan apabila memulakan aplikasi web

    public void contextDestroyed(ServletContextEvent sce) {}: Dilaksanakan apabila memusnahkan aplikasi web

    (2)HttpSessionListener

    digunakan Monitor penciptaan dan pemusnahan objek Sesi

    public void sessionCreated(HttpSessionEvent se) {}: dilaksanakan apabila sesi dicipta

    public void sessionDestroyed(HttpSessionEvent se) {}: dilaksanakan apabila sesi sedang musnah

    (3)ServletRequestListener

    digunakan untuk memantau penciptaan dan pemusnahan objek Requset

    public void requsetCreated(HttpSessionEvent se) {}: Dilaksanakan

    permintaan kekosongan awamDestroyed(HttpSessionEvent se) {}: Dilaksanakan apabila requset dimusnahkan

    (4)ServletContextAttributeListener

    digunakan untuk memantau perubahan dalam atribut skop WEB, termasuk: atribut penambahan skop WEB , memadamkan atribut Atribut, atribut yang diubah suai

    attributeAdded(ServletContextEvent sce): Dilaksanakan apabila menambah atribut pada ServletContext

    attributeAdded(ServletContextRemoved sce): Dilaksanakan daripada🎜Deleting attribute (ServletContextRemoved sce): Dilaksanakan apabila mengubah suai atribut dalam ServletContext

    (5)HttpSessionAttributeListener

    digunakan untuk memantau perubahan dalam atribut skop Sesi, termasuk: menambah atribut, memadamkan atribut(6)ServletRequestAttributeListener

    digunakan untuk mendengar perubahan dalam atribut skop Requset, termasuk: menambah atribut, memadamkan atribut, mengubah suai atribut

    (7)HttpSessionActivationListener

    digunakan untuk mendengar Pensirian dan penyahserikatan objek dalam Sesi

    3 Listener melaksanakan fungsi mengira orang

    (1) Mula-mula buat pendengar pakej pendengar dan kemudian buat kelas OnlineListener baharu<.>

    (2) Buat antara muka untuk servlet pendengar

    4. Redis melaksanakan fungsi mengira orang

    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);
        }
    }
    Keperluan: purata masa akses, purata nombor. orang dalam talian pada masa yang sama, bilangan maksimum orang dalam talian pada masa yang sama Bilangan orang dalam talian

    (1) Mula-mula reka jadual data:
    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();
        }
    }

    Mula mengakses masa halaman, tinggalkan jadual halaman: (id, tempat, ip, user_id, user_name, begin_time, end_time, env, info ,len_min)

    Jadual statistik: purata tempoh lawatan, purata bilangan orang dalam talian pada masa yang sama, bilangan maksimum orang dalam talian pada masa yang sama (id, hari, umur_len_visit_min, acu, pcu)

    Jadual rekod statistik: pada masa yang sama seminit Bilangan orang dalam talian. (id, min_time, num)

    (2) Gunakan redis untuk menyimpan pengguna dalam talian semasa Setiap panggilan boleh dianggap sebagai menyemak imbas selama satu minit (ia boleh diperhalusi lagi mengikut perniagaan, dan hanya yang dijadualkan. tugasan perlu merekodkan minit terakhir) dan pengguna dalam minit semasa, anda boleh mengira kekerapan pengguna melawat halaman tertentu

    (3) Pada masa yang sama, rekod masa pengguna mula melawati. halaman dan masa apabila dia meninggalkan halaman, dan anda boleh menganalisis susulan 🎜>

    (4) Untuk memudahkan pemprosesan data, anda boleh merekodkan bilangan lawatan ke setiap halaman setiap minit > (5) redis, simpan 2 cincang:

    mulakan, pemasa set cincang yang disimpan merekodkan maklumat terperinci

    sekarang, set akses pengguna diluluskan oleh antara muka, merekodkan masa muat semula

    dan mengemas kini dan menyegarkan operasi melalui pemasa

    ps: Kekunci individu dalam cincang tidak boleh ditetapkan secara automatik untuk tamat tempoh, atau anda boleh menggunakan pemantauan redis dan menggunakan kekunci jenis String , dan anda hanya boleh memproses apa yang anda perlukan untuk memproses

    Atas ialah kandungan terperinci Bagaimana untuk melaksanakan fungsi mengira orang dalam talian di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam