Use httpsessionListener to implement website online number statistics [Pick]

xiaoxiao2021-03-06  39

Use httpsessionListener to implement website online number statistics

The statistics of online number are often required in the website. The general practice of past is to combine the login and exit function, that is, the counter plus 1 when the user enters the username password to log in, and then the counter is reduced when the user clicks the exit button exits the system. This processing method has some shortcomings, for example, after the user logs in, it may forget to click the exit button, and directly turn off the browser, causing the counter minus 1 operation without timely execution; there are often some contents on the website. It can be accessed, and in this case, the above method is not available for online number statistics.

We can use the event listener defined in the servlet specification to solve this problem and achieve more accurate online number statistics. For each user who is being accessed, the J2EE application server creates a corresponding HTTPSession object. When a browser accesses the website for the first time, the J2EE application server will create a httpsession object and trigger HttpSession to create events. If you register an HttpSessionListener event listener, the HTTPSessionListener event listener will call the sessioncreated method. Conversely, when this browser accesses the end timeout, the J2EE application server destroys the corresponding httpsession object, triggers the HTTPSession destroyed event while calling the SESSIONDESTROYED method of the registered HttpSessionListener event listener.

It can be seen that corresponding to the beginning and end of a user access, the corresponding sessioncreated method and the sessionDestroyed method are executed. In this way, we only need to make the counter plus 1 in the sessionCreated method of the HTTPSessionListener implementation class. In the sessionDestroyed method, let the counter minus the counter, and easily implement the statistics of the website online.

Below is an example of using HTTPSessionListener to implement online number statistics, this example has been passed in the J2EE application server InforWeb of Masterware.

First, write a simple counter, the code is as follows:

package gongfei.cmc.articles.onlinecounter; public class OnlineCounter {private static long online = 0; public static long getOnline () {return online;} public static void raise () {online ;} public static void reduce () {online- -;}}

Then, write the HTTPSessionListener implementation class, call the RAISE method for the onlineCounter in this implementation class, call the ONLINECUNTER's Reduce method in the sessionDestroyed method, the code is as follows:

package gongfei.cmc.articles.onlinecounter; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class OnlineCounterListener implements HttpSessionListener {public void sessionCreated (HttpSessionEvent hse) {OnlineCounter.raise ();} public void SessionDestroyed (httpsessionever) {onlineCounter.Reduce ();}} then then register this httpsessionListener implementation class to the website application, that is, add the following Web.xml to the website application:

... gongfei.cmc.Articles.example.onlineCounterlistener ..... <

OK, online number statistics have been implemented, as long as the following scripts can be displayed in the JSP page, the number of online people can be displayed:

<% @ Page language = "java" PageEncoding = "GB2312"%> <% @ page import = "gongfei.cmc.Articles.onlineCounter.onlineCounter"%> on line counert </ title > </ head> <body bgcolor = "# fff"> on line: <% = OnlineCounter.getonline ()%> </ body> </ html></p></div><div class="text-center mt-3 text-grey"> 转载请注明原文地址:https://www.9cbs.com/read-57914.html</div><div class="plugin d-flex justify-content-center mt-3"></div><hr><div class="row"><div class="col-lg-12 text-muted mt-2"><i class="icon-tags mr-2"></i><span class="badge border border-secondary mr-2"><h2 class="h6 mb-0 small"><a class="text-secondary" href="tag-2.html">9cbs</a></h2></span></div></div></div></div><div class="card card-postlist border-white shadow"><div class="card-body"><div class="card-title"><div class="d-flex justify-content-between"><div><b>New Post</b>(<span class="posts">0</span>) </div><div></div></div></div><ul class="postlist list-unstyled"> </ul></div></div><div class="d-none threadlist"><input type="checkbox" name="modtid" value="57914" checked /></div></div></div></div></div><footer class="text-muted small bg-dark py-4 mt-3" id="footer"><div class="container"><div class="row"><div class="col">CopyRight © 2020 All Rights Reserved </div><div class="col text-right">Processed: <b>0.041</b>, SQL: <b>9</b></div></div></div></footer><script src="./lang/en-us/lang.js?2.2.0"></script><script src="view/js/jquery.min.js?2.2.0"></script><script src="view/js/popper.min.js?2.2.0"></script><script src="view/js/bootstrap.min.js?2.2.0"></script><script src="view/js/xiuno.js?2.2.0"></script><script src="view/js/bootstrap-plugin.js?2.2.0"></script><script src="view/js/async.min.js?2.2.0"></script><script src="view/js/form.js?2.2.0"></script><script> var debug = DEBUG = 0; var url_rewrite_on = 1; var url_path = './'; var forumarr = {"1":"Tech"}; var fid = 1; var uid = 0; var gid = 0; xn.options.water_image_url = 'view/img/water-small.png'; </script><script src="view/js/wellcms.js?2.2.0"></script><a class="scroll-to-top rounded" href="javascript:void(0);"><i class="icon-angle-up"></i></a><a class="scroll-to-bottom rounded" href="javascript:void(0);" style="display: inline;"><i class="icon-angle-down"></i></a></body></html><script> var forum_url = 'list-1.html'; var safe_token = '9qtvA_2BddFqCwf3Z4hqLHCzV_2FUxGx44wzGQ2AljhJFyMmy6BP3cmaeAD4GZjb72VengQkerQecaNu_2FZl6t3KT9g_3D_3D'; var body = $('body'); body.on('submit', '#form', function() { var jthis = $(this); var jsubmit = jthis.find('#submit'); jthis.reset(); jsubmit.button('loading'); var postdata = jthis.serializeObject(); $.xpost(jthis.attr('action'), postdata, function(code, message) { if(code == 0) { location.reload(); } else { $.alert(message); jsubmit.button('reset'); } }); return false; }); function resize_image() { var jmessagelist = $('div.message'); var first_width = jmessagelist.width(); jmessagelist.each(function() { var jdiv = $(this); var maxwidth = jdiv.attr('isfirst') ? first_width : jdiv.width(); var jmessage_width = Math.min(jdiv.width(), maxwidth); jdiv.find('img, embed, iframe, video').each(function() { var jimg = $(this); var img_width = this.org_width; var img_height = this.org_height; if(!img_width) { var img_width = jimg.attr('width'); var img_height = jimg.attr('height'); this.org_width = img_width; this.org_height = img_height; } if(img_width > jmessage_width) { if(this.tagName == 'IMG') { jimg.width(jmessage_width); jimg.css('height', 'auto'); jimg.css('cursor', 'pointer'); jimg.on('click', function() { }); } else { jimg.width(jmessage_width); var height = (img_height / img_width) * jimg.width(); jimg.height(height); } } }); }); } function resize_table() { $('div.message').each(function() { var jdiv = $(this); jdiv.find('table').addClass('table').wrap('<div class="table-responsive"></div>'); }); } $(function() { resize_image(); resize_table(); $(window).on('resize', resize_image); }); var jmessage = $('#message'); jmessage.on('focus', function() {if(jmessage.t) { clearTimeout(jmessage.t); jmessage.t = null; } jmessage.css('height', '6rem'); }); jmessage.on('blur', function() {jmessage.t = setTimeout(function() { jmessage.css('height', '2.5rem');}, 1000); }); $('#nav li[data-active="fid-1"]').addClass('active'); </script>