简言之,如果不用第三方提供的接口
那最好的解决方案应该是当SESSION建立时sessionCreated(),在访问总数和当前在线人数上+1
当SESSION销毁时sessionDistroyed(),在线人数-1
核心方法是利用Listener监听的各种接口
我把代码(主要部分)贴在下面
此段代码我亲自使用过,没有问题
但因为继承了接口,有些未使用的方法也要补充进去,具体方式比如在MyEclipse中可以靠点错误,ADD UNIMPLEMENTED METHOD实现
package com.eaie.system;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Enumeration;
import java.util.Set;
import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletException;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class SessionListener implements HttpSessionActivationListener,
HttpSessionListener, ServletContext, ServletRequestListener {
ServletContext context;
int onLineUserNum = 0;
int visitNum = 0;
HttpServletRequest request;
public void sessionDidActivate(HttpSessionEvent session) {
log("seesionDidActive("+session.getSession().getId()+")");
}
public void sessionWillPassivate(HttpSessionEvent session) {
log("seesionWillPassivate("+session.getSession().getId()+")");
}
public void sessionCreated(HttpSessionEvent event) {
onLineUserNum++;
visitNum ++;
String ip = request.getRemoteAddr();
log("sessionCreated('"+event.getSession().getId()+"'),-->IP:"+ip);
context.setAttribute("onLineUserNum", new Integer(onLineUserNum));
context.setAttribute("visitNum", new Integer(visitNum));
}
public void sessionDestroyed(HttpSessionEvent event) {
if (onLineUserNum>0){
onLineUserNum--;
}
String ip = request.getRemoteAddr();
log("sessionDestroyed('"+event.getSession().getId()+"'),-->IP:"+ip);
context.setAttribute("onLineUserNum", new Integer(onLineUserNum));
}
public void contextDestroyed(ServletContextEvent sce){
log("contextDestroyed-->ServletContext is destroyed");
this.context = null;
}
public void contextInitialized(ServletContextEvent sce){
this.context = sce.getServletContext();
log("contextDestroyed-->ServletContext is initialized");
}
public int getUserOnline(){
return this.onLineUserNum;
}
public void log(String message) {
PrintWriter out = null;
try{
out = new PrintWriter(new FileOutputStream("c:\\eaieLogger.txt",true));
out.println(new java.util.Date().toLocaleString()+"::From SessionListener:"+message);
out.println("Totle visit number:"+this.visitNum+" and current online num: "+onLineUserNum);
out.println("=================================");
out.close();
}catch(Exception e){
e.printStackTrace();
out.close();
}
}
public void requestInitialized(ServletRequestEvent event) {
request = (HttpServletRequest)event.getServletRequest();
}
//省略其他方法
}
这个程序需要在web.xml中配置:
<listener>
<listener-class>com.eaie.system.SessionListener</listener-class>
</listener>
需要注意的是LISTENR的位置,必须在<FILTER>的相关配置之后,在<SERVLET>的相关配置之前
分享到:
相关推荐
如何统计JAVA网站访问次数并获得访问者IP
2:综合统计,最近访问,地区分析,地址分析,屏幕大小,来访页面,访问次数,操作系统,当前在线,IP地址,浏览器,年报表,月报表,周报表,历史报表,日报表等 3:可以精确的跟踪统计每一位来访者的IP与在线时间-同一IP在线每隔...
每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 Java语言基本语法 第1章 让自己的第一个Java程序跑起来 2 教学视频:19分钟 1.1 想要用Java改变这个世界吗? 2 ...
每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 Java语言基本语法 第1章 让自己的第一个Java程序跑起来 2 教学视频:19分钟 1.1 想要用Java改变这个世界吗? 2 ...
防止刷新,速度快,适用广泛 2:综合统计,最近访问,地区分析,地址分析,屏幕大小,来访页面,访问次数,操作系统,当前在线,IP地址,浏览器,年报表,月报表,周报表,历史报表,日报表等 3:可以精确的跟踪统计每一位来访者的IP与...
2:综合统计,最近访问,地区分析,地址分析,屏幕大小,来访页面,访问次数,操作系统,当前在线,IP地址,浏览器,年报表,月报表,周报表,历史报表,日报表等 3:可以精确的跟踪统计每一位来访者的IP与在线时间-同一IP在线每...
功能介绍: 1:多用户统计系统,防止刷新,速度快,适用广泛 2:综合统计,最近访问,地区分析,地址分析,屏幕大小,来访页面,访问次数,操作系统,当前在线,IP地址,浏览器,年报表,月报表,周报表,历史报表,日报表等...
实时策略:访问者ip单位时间内访问次数,超过设定阀值的ip列入观察名单;观察名单中的访问着在下一单位时间内继续访问则要求其 填写验证码,若没有填写验证码而持续发起大量请求,则判定为爬虫,加入黑名单。 2.离线...
一般我们可以通过一些免费的访问统计网站例如 Google Analytics来或者这些信息。但不足之处是这类网站只能对页面进行分析,不包括静态文件;另外可能有很多的站长不愿意使用这类工具来暴露自己的数据,种种的这些...
2:综合统计,最近访问,地区分析,地址分析,屏幕大小,来访页面,访问次数,操作系统,当前在线,IP地址,浏览器,年报表,月报表,周报表,历史报表,日报表等 3:可以精确的跟踪统计每一位来访者的IP与在线时间-同一IP在线每隔...
: 项目基于storm的实时nginx日志监控,通过读取nginx的日志文件access.log来收集nginx服务器的状态,并在一定时间内,统计访问ip的国家地址、指定时间内所有访问次数、访问的状态码、访问的站点、访问者使用的系统、...
实时策略:访问者IP单位时间内访问次数,超过设置阀值的ip替换观察列表;观察列表中的访问着在下一单位时间内继续访问则要求其填充验证码, 2.离线策略:约会访问统计系统,对访问记录进行持久化,按分,小时,天等...
面向广大站长、软件开发者、程序爱好者、网页设计师,适用于个人站长、商业企业、政府机构、教育机构和其它各种单位组织的信息门户网站建设,是一款技术先进、安全稳定、操作友好、注重用户体验的JAVA门户管理系统,...
* 访问次数、独特访客人数, * 访问时间和上次访问, * 使用者认证、最近认证的访问, * 每周的高峰时间(页数,点击率,每小时和一周的千字节), * 域名/国家的主机访客(页数,点击率,字节,269域名/国家检测,geoip检测), * ...
预测给定IP的唯一URL访问次数 允许使用的工具(无特定顺序): Spark(任何语言,但更喜欢Scala或Java) 猪 MapReduce(仅适用于Hadoop 2.x) 联动 级联,级联或缩放 如果您需要Hadoop,我们建议使用HDP沙箱: : ...
博客用户通过前台登录后,可对自己的博客空间进行管理,包括发布自己的网络日志、收藏个人图片、和相关人员进行交流和沟通以及删除访问者发表的评论等。 因此,在具体设计实现该博客网站时,主要考虑了主流博客...
1.2.2爬⾍⼯作流程 基本情况下,爬⾍会⾸先获取⼀部分种⼦URL,将这些URL放⼊待抓取URL队列,从队列中取出待抓取URL,解析DNS得到主机IP,并将 URL对应⽹页下载储存。最后将这些URL放⼊已抓取队列中,如此循环。 ...
使用cookie记录用户访问次数? 103.使用session对象防止表单重复提交? 104.获取用户真实IP地址? 105.获取请求中的所有参数? 106.获取完整的请求URL? 107.在重新显示表单时保留用户已经输入的合法数据?...
2.4 专门指导 系统采用jdbc来访问数据库,并通过java对数据库的访问进行了封装。如果所提供的功能不满足系统的要求,可在数据库接口中添加新的方法以供整个系统调用。 2.5 支持软件 phpMyAdmin为本系统数据库提供了...
这些复杂的模式使用的正则表达式语法指定了该表达式中每个元素要重复出现的次数. 指定复制的字符总是出现在它们所作用的模式后面.由于某种复制类型相当常用.所以有一些特殊的字符专门用于表示它们.例如: +号匹配的...