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.
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
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
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 ServletContextattributeAdded(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)ServletRequestAttributeListenerdigunakan untuk mendengar perubahan dalam atribut skop Requset, termasuk: menambah atribut, memadamkan atribut, mengubah suai atribut
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); } }
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(); } }
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 semuladan 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!