chen888的gravatar头像
chen888 2017-09-22 15:25:04

Java web实现统计网站的IP访问次数几种例子

因为一个网站可能有多个页面,无论哪个页面被访问,都要统计访问次数,所以使用过滤器最为方便。

因为需要分IP统计,所以可以在过滤器中创建一个Map,使用IP为key,访问次数为value。当有用户访问时,获取请求的IP,如果IP在Map中存在,说明以前访问过,那么在访问次数上加1,即可;IP在Map中不存在,那么设置次数为1。

把这个Map存放到ServletContext中!

部分代码:

Java web实现统计网站的IP访问次数几种例子

效果图:

Java web实现统计网站的IP访问次数几种例子

注意:

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。

如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为http://www.xxx.com/ 的URL时,用request.getRemoteAddr() 方法获取的IP地址是:127.0.0.1 或 192.168.1.110 ,而并不是客户端的真实IP。

经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问http://www.xxx.com/index.jsp/ 时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问http://192.168.1.110:2046/index.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getRemoteAddr() 的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。于是可得出获得客户端真实IP地址的方法如下:

public String getIpAddr(HttpServletRequest request)  {
        String ip  =  request.getHeader( " x-forwarded-for " );
         if (ip  ==   null   ||  ip.length()  ==   0   ||   " unknown " .equalsIgnoreCase(ip))  {
            ip  =  request.getHeader( " Proxy-Client-IP " );
        } 
         if (ip  ==   null   ||  ip.length()  ==   0   ||   " unknown " .equalsIgnoreCase(ip))  {
            ip  =  request.getHeader( " WL-Proxy-Client-IP " );
        } 
         if (ip  ==   null   ||  ip.length()  ==   0   ||   " unknown " .equalsIgnoreCase(ip))  {
           ip  =  request.getRemoteAddr();
       } 
        return  ip;
   }

另外一种直接通过页面统计访问次数:

效果图:

Java web实现统计网站的IP访问次数几种例子

代码:

Java web实现统计网站的IP访问次数几种例子

这个是当客户访问网站时就去读这个文件,将服务器重新启动前的计数读入,并在此基础上增加1,然后将新的计数写入到文件中。 

 

整体效果图:

 

Java web实现统计网站的IP访问次数几种例子


打赏

已有2人打赏

最代码客服的gravatar头像 最代码官方的gravatar头像

文件名:pageview.zip,文件大小:370.278K 下载
  • /
      • /pageview
        • /pageview/.classpath
        • /pageview/.project
          • /pageview/.settings
            • /pageview/.settings/.jsdtscope
            • /pageview/.settings/org.eclipse.jdt.core.prefs
            • /pageview/.settings/org.eclipse.wst.common.component
            • /pageview/.settings/org.eclipse.wst.common.project.facet.core.xml
            • /pageview/.settings/org.eclipse.wst.jsdt.ui.superType.container
            • /pageview/.settings/org.eclipse.wst.jsdt.ui.superType.name
最代码最近下载分享源代码列表最近下载
天马行空  LV3 2021年12月5日
何松林  LV7 2021年10月22日
Limiun  LV6 2020年3月25日
jfjiayou  LV1 2020年3月25日
易拉环  LV3 2019年12月10日
yy921210  LV1 2019年10月11日
chang223  LV11 2019年6月18日
碼丐0077  LV9 2018年11月6日
zhangzzw  LV8 2018年3月22日
OwenLeon  LV9 2017年10月11日
最代码最近浏览分享源代码列表最近浏览
胖嘟嘟2580  LV3 2022年6月8日
sjh0224 2022年5月1日
暂无贡献等级
dorient 2022年2月27日
暂无贡献等级
Irene777  LV1 2022年2月24日
学习指南  LV5 2022年1月3日
silencecfx  LV1 2021年12月26日
天马行空  LV3 2021年12月5日
hwhrr123  LV3 2021年11月20日
桜の舞  LV1 2021年11月14日
何松林  LV7 2021年10月22日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友