700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 页面访问量统计java_java实现页面访问量统计的实例

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

时间:2023-12-09 09:14:13

相关推荐

页面访问量统计java_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

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="/xml/ns/javaee"

xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation="/xml/ns/javaee

/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开始,为了永久保存访问次数,可以将这个值保存到文件或数据库中。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。