Jadual Kandungan
1. Pengenalan kepada pendengar
2. Jenis pendengar Java
(1)ServletContextListener
(2)HttpSessionListener
(3)ServletRequestListener
(7)HttpSessionActivationListener
Mula mengakses masa halaman, tinggalkan jadual halaman: (id, tempat, ip, user_id, user_name, begin_time, end_time, env, info ,len_min)
Rumah Java javaTutorial Bagaimana untuk melaksanakan fungsi mengira orang dalam talian di Jawa

Bagaimana untuk melaksanakan fungsi mengira orang dalam talian di Jawa

Apr 19, 2023 am 09:13 AM
java

    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);
        }
    }
    Salin selepas log masuk
    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();
        }
    }
    Salin selepas log masuk

    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 Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    AI Hentai Generator

    AI Hentai Generator

    Menjana ai hentai secara percuma.

    Artikel Panas

    R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
    2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Repo: Cara menghidupkan semula rakan sepasukan
    4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    Akar Kuasa Dua di Jawa Akar Kuasa Dua di Jawa Aug 30, 2024 pm 04:26 PM

    Panduan untuk Square Root di Java. Di sini kita membincangkan cara Square Root berfungsi di Java dengan contoh dan pelaksanaan kodnya masing-masing.

    Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

    Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

    Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

    Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

    Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

    Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

    Nombor Armstrong di Jawa Nombor Armstrong di Jawa Aug 30, 2024 pm 04:26 PM

    Panduan untuk Nombor Armstrong di Jawa. Di sini kita membincangkan pengenalan kepada nombor Armstrong di java bersama-sama dengan beberapa kod.

    Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

    Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

    Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

    Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

    Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

    Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

    See all articles