有时候,我们可能需要统计Web站点上的一个特定页面的访问次数,考虑这样一个场景,你为了宣传一个产品,在某个门户网站花钱做了一个链接,你希望知道产品页面每天的访问量,借此了解广告的效果。要完成上述功能,可以使用ServletContext对象来保存访问的次数。我们知道一个Web应用程序只有一个ServletContext对象,而且该对象可以被Web应用程序中的所有Servlet所访问,因此使用ServletContext对象来保存一些需要在Web应用程序中共享的信息是再合适不过了。

要在ServletContext对象中保存共享信息,可以调用该对象的setAttribute()方法,要获取共享信息,可以调用该对象的getAttribute()方法。针对本例,我们可以调用setAttribute()方法将访问计数保存到上下文对象中,新增一次访问时,调用getAttribute()方法从上下文对象中取出访问计数加1,然后再调用setAttribute()方法保存回上下文对象中。这个实例的开发主要有下列步骤。

Step1:编写CounterServlet类

在%CATALINA_HOME%\webapps\ch12\src目录下新建CounterServlet.java,代码如例12-14所示。

例12-14 CounterServlet.java

Java代码

package org.sunxin.ch12.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class CounterServletextends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException

{

ServletContext context = getServletContext();

Integer count = null;

synchronized(context)

{

count = (Integer) context.getAttribute("counter");

if (null == count)

{

count = new Integer(1);

}

else

{

count = new Integer(count.intValue() + 1);

}

context.setAttribute("counter", count);

}

resp.setContentType("text/html;charset=gb2312");

PrintWriter out = resp.getWriter();

out.println("

");

out.println("

页面访问统计");

out.println("

");

out.println("该页面已被访问了" + "" + count +"" +"次");

out.println("");

out.close();

}

}

package org.sunxin.ch12.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class CounterServlet extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException

{

ServletContext context = getServletContext();

Integer count = null;

synchronized(context)

{

count = (Integer) context.getAttribute("counter");

if (null == count)

{

count = new Integer(1);

}

else

{

count = new Integer(count.intValue() + 1);

}

context.setAttribute("counter", count);

}

resp.setContentType("text/html;charset=gb2312");

PrintWriter out = resp.getWriter();

out.println("

");

out.println("

页面访问统计");

out.println("

");

out.println("该页面已被访问了" + "" + count + "" + "次");

out.println("");

out.close();

}

}

在程序代码的第17行,调用getServletContext()方法(从GenericServlet类间接继承而来)得到Web应用程序的上下文对象。为了避免线程安全的问题,我们在第19行使用synchronized关键字对context对象进行同步。第21行,调用上下文对象的getAttribute()方法获取counter属性的值。第21~29行,判断count是否为null,如果为null,则将它的初始值设为1。当这个Servlet第一次被访问的时候,在上下文对象中还没有保存counter属性,所以获取该属性的值将返回null。如果count不为null,则将count加1。第30行,将count作为counter属性的值保存到ServletContext对象中。当下一次访问这个Servlet时,调用getAttribute()方法取出counter属性的值不为null,于是执行第28行的代码,将count加1,此时count为2,表明页面被访问了两次。

第39行,输出count,显示该页面的访问次数。

Step2:编译CounterServlet.java

打开命令提示符,进入%CATALINA_HOME%\webapps\ch12\src目录,然后执行:

javac -d ..\WEB-INF\classes CounterServlet.java

在WEB-INF\classes\org\sunxin\ch12\servlet目录中生成类文件CounterServlet.class。

Step3:部署CounterServlet

编辑WEB-INF目录下的web.xml文件,添加对本例中的Servlet的配置,如例12-15所示。

例12-15 web.xml

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

...

CounterServlet

org.sunxin.ch12.servlet.CounterServlet

CounterServlet

/product.html

新增加的内容以粗体显示,请读者注意,在Servlet映射中,我们为本例的Servlet指定的URL是/product.html,对用户来说,以为访问的是一个静态页面,利用部署描述符,可以向客户端屏蔽服务器端的实现细节。

Step4:访问CounterServlet

启动Tomcat服务器,打开IE浏览器,在地址栏中输入http://localhost:8080/ch12/product.html,你将看到如图12-17所示的页面。

刷新页面,你会看到访问的次数变为2。再打开一个浏览器,输入http://localhost: 8080/ch12/product.html,你会看到第二个浏览器中显示的访问次数是3。交替刷新两个浏览器中的页面,可以看到访问次数也在交替增长,说明利用ServletContext保存属性,可以在多个客户端之间共享属性。但要注意的是,不同的Web应用程序具有不同的Servlet上下文,所以在不同的Web应用程序之间不能利用ServletContext来共享属性。另外需要注意的是,访问次数在重启Tomcat服务器后,将重新从1开始,为了永久保存访问次数,可以将这个值保存到文件或数据库中。

页面访问量统计java_java实现页面访问量统计的实例相关推荐

  1. 网站页面浏览次数代码mysql_php统计网站/html页面浏览访问次数程序

    本文章来给大这介绍了php自己写的一些常用的网站统计代码写法,用无数据库的与使用数据库及html静态页面浏览资次数统计代码,大家可进入参考. 实例1 直接使用txt文件进行统计的代码 代码如下 复制代 ...

  2. 如何统计网站各页面一天内的 PV 和 UV?

    大数据开发最常统计的需求可能就是 PV.UV.PV 全拼 PageView,即页面访问量,用户每次对网站的访问均被记录,按照访问量进行累计,假如用户对同一页面访问了 5 次,那该页面的 PV 就应该加 ...

  3. 使用statcounter统计Hexo博客访问量

    title: 使用statcounter统计Hexo博客访问量 date: 2019-05-30 20:55:29 tags: 配置 --- 介绍 statcounter是一个提供网站访问统计服务的网 ...

  4. hive sql系列(二)——统计每个人每个月访问量和累计月访问量

    每天分享一个sql,帮助大家找到sql的快乐 需求:统计每个人每个月访问量和累计月访问量 建表语句 CREATE TABLE visit( userId string, visitDate strin ...

  5. 如何快速统计网站所有页面的文本字数

    文章目录 前言 一.WinHTTrack Website Copier是什么? 二.WinHTTrack Website Copier使用步骤 三.什么是Python? 四.Python实现的功能 前 ...

  6. 如何精确统计用户在页面的停留时长?

    作者:今日头条技术 链接:https://techblog.toutiao.com/2018/06/05/ru-he-jing-que-tong-ji-ye-mian-ting-liu-shi-cha ...

  7. 如何利用页面点击图做网站页面优化

    有时候我们需要了解网站页面中各链接的点击情况,尤其是网站的首页和一些中间页,这对网站的内容编排.用户体验优化都能起到很好的指导作用. 页面点击图是流量统计里面的一项统计工具,大多数站长用过百度统计和C ...

  8. 在页脚里显示本页统计数据_外卖营业统计里的数据您能看懂吗?

    自己的外卖店铺在商圈里是处于什么水平?这周的营业额相对上周下滑很多,是哪里出现问题?无效订单这么多,到底是哪个环节没做好?这些问题在"营业统计"的数据分析里统统可以得到解答. &q ...

  9. 网站用户行为数据统计与分析—埋点统计

    背景:现如今,销售预测在提高企业经济效益及决策支持水平的方面占有重要的地位.随着企业信息化技术水平的提高,企业销售数据日益丰富,管理者对其中隐藏的销售预测信息的渴求愈来愈强烈.用传统的方法来分析这些海 ...

  10. oracle 查看统计情报,Oracle 查看收集统计信息

    -- Start 统计信息相当于情报,对 Oracle 至关重要,如果统计信息不准确,Oracle 就会做出错误的判断.那如何查看统计信息呢?试一试下面的 SQL 吧. -- 查看表统计信息 sele ...

最新文章

  1. Android 8.0 中如何读取内部和外部存储以及外置SDcard
  2. 如何实现文章中文字的打字效果
  3. Google开源框架AutoFlip 实现视频智能剪裁
  4. javaweb(三十八)——mysql事务和锁InnoDB(扩展)
  5. linux用户操作的日志,linux 用户操作记录并录入日志
  6. 沉痛哀悼雷霄骅博士!
  7. Spring中IoC创建对象方式(构造器注入)
  8. 使用SQL Server数据工具进行SQL单元测试
  9. 计算机课用什么做课件,电脑做ppt用什么软件
  10. cuda安装(cuda安装教程)
  11. JSP购物车案例精简版-适合小白学习
  12. 专利进阶(一):软件专利工程师浅谈如何针对计算机软件类专利申请进行技术挖掘
  13. Merged Manifest官方文档
  14. 计算机为什么不能装win7,i5 8400 cpu能装win7吗?为什么安装不了win7
  15. Hibernate缓存集成IMDG
  16. linux的gromacs模拟分子运动,动力学模拟gromacs(绝对详细).ppt
  17. VM虚拟机安装使用OBS直播录屏软件图文教程及注意事项
  18. -webkit-tap-highlight-color
  19. CodeM资格赛D 送外卖 题解
  20. [转载]互联网Offer选择恐惧症

热门文章

  1. python倒计时器-带图像
  2. 服务器网卡游戏性能,关于服务器网卡的选择 有同学虚拟盘速度慢 进游戏速度慢的请看 - 系统+虚拟盘 - 顺网科......
  3. 数据库知识总结:sqlserver中事务总结:begin tran,rollback tran,commit tran +IndexDB总结...
  4. 康托尔连续统假设正确吗?
  5. win10打开视频显示服务器运行失败,apache启动失败,详细教您快速解决Win10系统apache启动失败...
  6. 游戏开发中的数学基础
  7. 火车票软件哪个好用_买火车票哪个软件好用 哪个软件买火车票便宜
  8. 《商业银行会计》--概述
  9. GPS时钟装置(时钟同步设备)在华能某水电公司应用方案
  10. html和js制作个人所得税表格,用JS编写个人所得税计算器