简言之,如果不用第三方提供的接口
那最好的解决方案应该是当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
Java 代码实现了一个access方法,用于判断 limitKey 是否超过了最大访问频次,并提供了一个unlimit方法,用于执行redis decr操作,在某些业务场景可以回退访问频次统计。 二、防止恶意IP攻击 防止恶意IP攻击是非常...
"Springboot过滤器禁止ip频繁访问功能实现" Springboot过滤器禁止ip频繁访问功能实现是指在Springboot项目中,通过编写一个过滤器来限制ip频繁访问的功能实现。这项功能可以防止恶意ip的访问,保护服务器的安全。 ...
5. **地理定位**:通过IP地址识别访问者的地理位置,分析全球用户分布。 ### 四、系统实现技术 1. **Servlet技术**:虽然JSP主要负责视图层,但后台处理逻辑通常由Servlet完成。Servlet处理请求,更新数据库,并将...
4. **IP和地理位置信息**:记录访问者的IP地址,并根据IP获取其大概的地理位置信息。 5. **浏览器和设备分析**:统计不同浏览器、操作系统和设备的访问情况,以适应各种用户环境。 6. **异常检测**:监控异常访问...
《潇湘IP来源地址统计 v1.0》是一款专门用于统计网站访问来源的软件,它具备高效、精准的特性,能够帮助网站管理员深入了解用户访问行为,优化网站服务。这款工具的核心在于其内置的IP数据库,包含了约240,000条数据...
在这个项目中,我们使用Java语言来完成这一任务,结合Servlet技术实现后台数据的查询和处理,旨在创建一个类似网站统计的应用,能够记录和分析网站的PV(页面浏览量)和UV(独立访客数)等核心指标。 首先,让我们...
5. **IpStat.aspx**: IP统计页面可能用来跟踪和分析独立IP地址,提供关于不同地理位置的访问者的信息,这对于了解网站的地理分布和潜在目标市场很有帮助。 6. **regionStat.aspx**: 区域统计页面可能显示按国家或...
2:综合统计,最近访问,地区分析,地址分析,屏幕大小,来访页面,访问次数,操作系统,当前在线,IP地址,浏览器,年报表,月报表,周报表,历史报表,日报表等 3:可以精确的跟踪统计每一位来访者的IP与在线时间-同一IP在线每隔...
2. **访问量统计**:系统能实时或定期统计独立访客数、页面浏览量(PV)、访问次数(UV)等关键指标,帮助评估网站的吸引力和影响力。 3. **来源分析**:分析流量来源,包括直接访问、搜索引擎、社交媒体等,有助于...
6. **统计工具**:除了自建系统外,还有许多现成的网站统计工具,如Matomo(Piwik)、AWStats等,它们提供了详细的报告,包括访问者数量、IP地址、访问路径等。 7. **分布式系统**:在大型网站或分布式环境中,可能...
这个计数器主要用于跟踪网站或特定页面的访问者数量,通过收集并统计用户IP地址来实现。下面将详细介绍这个主题,包括计数器的工作原理、IP地址的概念、JavaWeb和JSP在其中的作用,以及如何实现这样的功能。 首先,...
《Java开发--JSP+SQL网站流量统计管理系统》是一套基于Java技术和SQL数据库实现的Web应用系统,旨在帮助网站管理员实时监控和分析网站流量。该系统由源代码和相关论文组成,提供了完整的开发实例,有助于Java初学者...
SQL版》是一款专用于网站流量监测和分析的工具,它能够帮助网站管理员了解网站的日常运营情况,包括每日的页面读取次数和独立IP的访问次数,通过内置的点击计数器功能,可以直观地查看统计信息。这款工具的核心是...
"星光统计系统"是一款专为网站流量分析设计的软件,其主要功能包括统计站点的总访问量、在线人数以及用户使用的操作系统类型,并且能够精确获取访问者的IP地址。这款统计系统的一大亮点在于它采用了防刷新技术,从而...
1. **访问量统计**:记录每个页面的访问次数,分析哪些页面最受欢迎。 2. **独立访客统计**:通过Cookie或其他方式识别不同用户,计算独立访问者数量。 3. **用户行为分析**:跟踪用户在网站上的活动路径,了解用户...
- 统计一天的访问人数通常涉及计算独立访客数(UV,Unique Visitors),可以通过IP地址、Cookie或用户代理等标识来区分不同的访问者。 - 总访问数(PV,Page Views)则是统计所有页面被查看的次数,每个页面的每次...
### Java关键字详解 #### Abstract `abstract` 是Java中的一个关键字,用于定义抽象类或抽象方法。抽象类是不能被实例化的类,主要用于提供子类一个基础模板,并强制子类去实现某些特定的方法。抽象方法是没有实现...
1. **出现次数最多的数**:该问题使用ArrayList存储输入的整数,通过正则表达式去除空格,然后统计每个数出现的次数,最后找出出现次数最多且数值最小的数。这个例子涉及到数据结构、字符串处理和循环。 2. **直方...
6. **重复过程**:为了得到更准确的统计,可以多次发送请求并收集响应,然后输出平均往返时间。 项目的源代码可能包含了以下关键类或方法: - `PingSender`:负责构造和发送ICMP报文。 - `PacketListener`:处理...