`

java实现页面访问量统计的实例

阅读更多

有时候,我们可能需要统计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

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("<html><head>");
         out.println("<title>页面访问统计</title>");
         out.println("</head><body>");
         out.println("该页面已被访问了" + "<b>" + count + "</b>" + "次");
         out.println("</body></html>");
         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

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0"
    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">
 
  
 
    ...
 
    <servlet>
        <servlet-name>CounterServlet</servlet-name>
        <servlet-class>
             org.sunxin.ch12.servlet.CounterServlet </servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>CounterServlet</servlet-name>
        <url-pattern>/product.html</url-pattern>
    </servlet-mapping>
 

</web-app>
  

新增加的内容以粗体显示,请读者注意,在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开始,为了永久保存访问次数,可以将这个值保存到文件或数据库中。

分享到:
评论

相关推荐

    J2EE页面访问量统计实例

    页面访问量统计实例通过利用`ServletContext`的`setAttribute()`和`getAttribute()`方法来实现对页面访问次数的记录与更新。当页面被首次访问时,会在`ServletContext`中设置一个名为"counter"的属性,其初始值为1;...

    基于Java+JSP的教师工作量统计系统毕业设计实现+源码毕业设计实现+源码.rar

    《基于Java+JSP的教师工作量统计系统》是一个典型的Web应用开发实例,它整合了Java后端技术和JSP前端技术,旨在实现高效、准确的教师工作量计算和管理。这个系统不仅对于学习Java和JSP的学生具有重要的实践价值,也...

    Java ssm+mysql教师工作量统计系统

    【Java SSM+MySQL教师工作量统计系统】是一个基于Java技术栈和MySQL数据库开发的Web应用程序,主要用于管理和统计教育机构中教师的工作量。这个系统涵盖了软件工程中的前端、后端以及数据库设计等多个方面,是学习和...

    网站访问量统计

    网站访问量统计是衡量一个网站受欢迎程度...综上所述,网站访问量统计涉及了数据收集、处理、存储、展示等多个环节,需要结合后端技术(如Java Bean)、数据库操作、前端展示以及数据分析工具来实现全面而准确的统计。

    JAVA-JSP流量统计系统

    这个系统利用JSP技术来构建动态网页,通过收集、处理和展示数据,提供关于网站用户行为、访问量、页面浏览情况等关键指标的详细报告。 ### 一、JSP基础 1. **JSP概述**:JSP是Java平台上的服务器端脚本语言,用于...

    java里多中分页(java、jsp、SSH等)实例

    在Java开发中,分页是常见的功能,尤其是在处理大数据量时,为了提高用户体验,避免一次性加载所有数据导致页面响应慢。本实例集涵盖了多种分页实现方式,包括使用纯Java、JSP以及SSH(Struts1、Spring、Hibernate)...

    JAVA上百实例源码以及开源项目源代码

    Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP   Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的...

    java 仓库管理系统(完整实例)

    Java 仓库管理系统是一个基于Java技术和JSP(Java Server Pages)的Web应用程序,结合了EasyUI框架来实现用户界面的交互。这个系统提供了完整的仓库管理功能,旨在帮助企业和组织高效地管理和追踪库存,确保业务流程...

    java 实例log分析

    本文将深入探讨如何使用Java实现一个日志分析的实例,以"AccessLogAdmin"为例,来理解其背后的原理和技术要点。 首先,"AccessLogAdmin"可能是一个用于处理HTTP访问日志的管理工具。HTTP访问日志通常记录了服务器...

    java web开发实例

    ##### 例 2: 统计网站访问量 **Example2_1.jsp** ```jsp ;charset=GB2312" %&gt; &lt;BODY BGCOLOR=cyan&gt;&lt;FONT size=4&gt; ! int i = 0; %&gt; i++; %&gt; 您是第 &lt;%= i %&gt; 个访问本站的客户。 ``` - **分析**:这段代码通过...

    六祎:使用Serlvet做的访问量统计!

    本案例中,"六祎"分享了使用Servlet实现访问量统计的方法。这个简单的实践可以帮助开发者了解如何利用ServletContext来记录和展示网站的访问量。 首先,让我们深入理解ServletContext的概念。ServletContext是...

    Kafka模拟网页浏览实时统计

    每当收到新的事件,就进行实时统计,例如计算每分钟的页面访问量、用户活跃度等。 3. **结果存储与展示**:统计结果可实时写入数据库或内存缓存,再通过前端界面展示给用户。也可以使用其他流处理框架(如Spark ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 6.6.4 sendredirect()和forward()方法的区别 238 6.7 小结 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 6.6.4 sendredirect()和forward()方法的区别 238 6.7 小结 ...

    jsp网站完整实例

    这个实例适用于已经掌握了一些基础的Java Web开发者,旨在通过实际操作来提升他们的技能,特别是对新闻发布、用户留言以及访问量统计等功能的实现。 JSP是Java平台上的动态网页技术,它允许开发人员在HTML代码中...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 6.6.4 sendredirect()和forward()方法的区别 238 6.7 小结 ...

    完全基于jsp的在线统计系统

    本系统完全基于JSP(JavaServer Pages)技术,提供了一系列核心功能,包括网站计数器、用户停留时间统计、实时在线人数统计以及网站访问量统计。本文将深入探讨这些功能的实现原理及应用价值。 首先,网站计数器是...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 6.6.4 sendredirect()和forward()方法的区别 238 6.7 小结 ...

Global site tag (gtag.js) - Google Analytics