Servlet实现点击计数器的方法

2025-05-29 0 26

一、Web页面的点击计数器

很多时候,可能有兴趣知道网站的某个特定页面上的总点击量。使用Servlet来计算这些点击量是非常简单的,因为一个Servlet的生命周期是由它运行的容器控制的。

以下是基于Servlet生命周期实现一个简单的页面点击计数器需要的步骤:

  • 在init()方法中初始化一个全局变量。
  • 每次调用doGet()或doPost()方法时,增加全局变量。
  • 如果需要,可以使用一个数据库表来存储destroy()方法中的全局变量。在下次初始化Servlet时,这个值可以在init()方法内被读取。这一步是可选的。
  • 如果想计算一个会话内一个页面的点量击,那么可以使用isNew()方法来查看该会话内是否已点击过相同的页面。这一步是可选的。
  • 可以显示全局计数器的值来显示网站中的总点击量。这一步是可选的。

在这里我假设Web容器不会被重新启动。如果Web容器被重新启动或Servlet被销毁,计数器将被重置。

实例:

这个例子演示了如何实现一个简单的页面点击计数器

  1. importjava.io.*;
  2. importjava.sql.Date;
  3. importjava.util.*;
  4. importjavax.servlet.*;
  5. importjavax.servlet.http.*;
  6. publicclassPageHitCounterextendsHttpServlet{
  7. privateinthitCount;
  8. publicvoidinit()
  9. {
  10. //Resethitcounter.
  11. hitCount=0;
  12. }
  13. publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException
  14. {
  15. //Setresponsecontenttype
  16. response.setContentType("text/html");
  17. //Thismethodexecuteswhenevertheservletishit
  18. //incrementhitCount
  19. hitCount++;
  20. PrintWriterout=response.getWriter();
  21. Stringtitle="TotalNumberofHits";
  22. StringdocType=
  23. "<!doctypehtmlpublic"//w3c//dtdhtml4.0"+
  24. "transitional//en">";
  25. out.println(docType+
  26. "<html>"+
  27. "<head><title>"+title+"</title></head>"+
  28. "<bodybgcolor="#f0f0f0">"+
  29. "<h1align="center">"+title+"</h1>"+
  30. "<h2align="center">"+hitCount+"</h2>"+
  31. "</body></html>");
  32. }
  33. publicvoiddestroy()
  34. {
  35. //Thisisoptionalstepbutifyoulikeyou
  36. //canwritehitCountvalueinyourdatabase.
  37. }
  38. }

现在编译上述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实现点击计数器的方法

二、网站点击计数器

很多时候,可能有兴趣知道整个网站的总点击量。在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并且会在日志中显示如下所示的消息:

Servlet实现点击计数器的方法

测试工程:https://github.com/easonjim/5_java_example/tree/master/servletbasics/test14

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:http://www.cnblogs.com/EasonJim/p/6980568.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Servlet实现点击计数器的方法 https://www.kuaiidc.com/115361.html

相关文章

发表评论
暂无评论