一、Web页面的点击计数器
很多时候,可能有兴趣知道网站的某个特定页面上的总点击量。使用Servlet来计算这些点击量是非常简单的,因为一个Servlet的生命周期是由它运行的容器控制的。
以下是基于Servlet生命周期实现一个简单的页面点击计数器需要的步骤:
- 在init()方法中初始化一个全局变量。
- 每次调用doGet()或doPost()方法时,增加全局变量。
- 如果需要,可以使用一个数据库表来存储destroy()方法中的全局变量。在下次初始化Servlet时,这个值可以在init()方法内被读取。这一步是可选的。
- 如果想计算一个会话内一个页面的点量击,那么可以使用isNew()方法来查看该会话内是否已点击过相同的页面。这一步是可选的。
- 可以显示全局计数器的值来显示网站中的总点击量。这一步是可选的。
在这里我假设Web容器不会被重新启动。如果Web容器被重新启动或Servlet被销毁,计数器将被重置。
实例:
这个例子演示了如何实现一个简单的页面点击计数器:
- importjava.io.*;
- importjava.sql.Date;
- importjava.util.*;
- importjavax.servlet.*;
- importjavax.servlet.http.*;
- publicclassPageHitCounterextendsHttpServlet{
- privateinthitCount;
- publicvoidinit()
- {
- //Resethitcounter.
- hitCount=0;
- }
- publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException
- {
- //Setresponsecontenttype
- response.setContentType("text/html");
- //Thismethodexecuteswhenevertheservletishit
- //incrementhitCount
- hitCount++;
- PrintWriterout=response.getWriter();
- Stringtitle="TotalNumberofHits";
- StringdocType=
- "<!doctypehtmlpublic"–//w3c//dtdhtml4.0"+
- "transitional//en">";
- out.println(docType+
- "<html>"+
- "<head><title>"+title+"</title></head>"+
- "<bodybgcolor="#f0f0f0">"+
- "<h1align="center">"+title+"</h1>"+
- "<h2align="center">"+hitCount+"</h2>"+
- "</body></html>");
- }
- publicvoiddestroy()
- {
- //Thisisoptionalstepbutifyoulikeyou
- //canwritehitCountvalueinyourdatabase.
- }
- }
现在编译上述Servlet并在web.xml文件中创建以下条目:
|
1
2
3
4
5
6
7
8
9
10
|
....
<servlet>
<servlet-name>PageHitCounter</servlet-name>
<servlet-class>PageHitCounter</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PageHitCounter</servlet-name>
<url-pattern>/PageHitCounter</url-pattern>
</servlet-mapping>
....
|
现在使用URL http://localhost:8080/PageHitCounter来调用这个Servlet。每次页面刷新时,计数器的值都会加1,这将产生如下所示的结果:
二、网站点击计数器
很多时候,可能有兴趣知道整个网站的总点击量。在Servlet中,这也是非常简单的,可以使用过滤器实现这一点。
以下是实现一个基于过滤器生命周期的简单的网站点击计数器需要的步骤:
- 在过滤器的init()方法中初始化一个全局变量。
- 每次调用doFilter方法时,增加全局变量。
- 如果需要,可以使用一个数据库表来存储过滤器的destroy()方法中的全局变量的值。在下次初始化过滤器时,该值可以在init()方法内被读取。这一步是可选的。
在这里我假设Web容器不会被重新启动。如果Web容器被重新启动或Servlet被销毁,点击计数器将被重置。
实例:
这个例子演示了如何实现一个简单的网站点击计数器:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class SiteHitCounter implements Filter{
private int hitCount;
public void init(FilterConfig config) throws ServletException{
// Reset hit counter.
hitCount = 0;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException {
// increase counter by one
hitCount++;
// Print the counter.
System.out.println("Site visits count :"+ hitCount );
// Pass request back down the filter chain
chain.doFilter(request,response);
}
public void destroy()
{
// This is optional step but if you like you
// can write hitCount value in your database.
}
}
|
现在来编译上述Servlet并在web.xml文件中创建以下条目:
|
1
2
3
4
5
6
7
8
9
10
|
....
<filter>
<filter-name>SiteHitCounter</filter-name>
<filter-class>SiteHitCounter</filter-class>
</filter>
<filter-mapping>
<filter-name>SiteHitCounter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
....
|
现在调用任意URL如URL:http://localhost:8080/。每次任意页面被点击时,计数器的值都会加1并且会在日志中显示如下所示的消息:
测试工程:https://github.com/easonjim/5_java_example/tree/master/servletbasics/test14
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。
原文链接:http://www.cnblogs.com/EasonJim/p/6980568.html
相关文章
- 64M VPS建站:能否支持高流量网站运行? 2025-06-10
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
- 64M VPS建站:怎样优化以提高网站加载速度? 2025-06-10
- 64M VPS建站:是否适合初学者操作和管理? 2025-06-10
- ASP.NET自助建站系统中的用户注册和登录功能定制方法 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-05-25 80
-
2025-05-29 62
-
2025-05-29 67
-
2025-05-25 99
-
2025-05-29 33



