>>分享Java Web开发技术,并且对孙卫琴的《Tomcat与Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 27467 个阅读者 刷新本主题
 * 贴子主题:  Servlet 点击计数器范例 回复文章 点赞(0)  收藏  
作者:sunshine    发表时间:2019-08-12 18:38:43     消息  查看  搜索  好友  邮件  复制  引用

  

Servlet  点击计数器

网页点击计数器

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

      以下是实现一个简单的基于 Servlet 生命周期的网页点击计数器需要采取的步骤:    
  • 在 init() 方法中初始化一个全局变量。
  • 每次调用 doGet() 或 doPost() 方法时,都增加全局变量。
  • 如果需要,您可以使用一个数据库表来存储全局变量的值在 destroy() 中。在下次初始化 Servlet 时,该值可在 init() 方法内被读取。这一步是可选的。
  • 如果您只想对一个 session 会话计数一次页面点击,那么请使用 isNew() 方法来检查该 session 会话是否已点击过相同页面。这一步是可选的。
  • 您可以通过显示全局计数器的值,来在网站上展示页面的总点击量。这一步是可选的。
     在这里,我们假设 Web 容器将无法重新启动。如果是重新启动或 Servlet 被销毁,计数器将被重置。            

范例

     本范例演示了如何实现一个简单的网页点击计数器:

        package net.javathinker.test;

        import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

        /**

* Servlet implementation class PageHitCounter

*/


@WebServlet("/PageHitCounter")

public class PageHitCounter extends HttpServlet {

    private static final long serialVersionUID = 1L;

    private int hitCount;

                public void init()

    {

        // 重置点击计数器

        hitCount = 0;

    }

                protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

                response.setContentType("text/html;charset=UTF-8");

        // 增加 hitCount

        hitCount++;

        PrintWriter out = response.getWriter();

        String title = "总点击量";

        String docType = "<!DOCTYPE html>
";

        out.println(docType +

            "<html>
" +

            "<head><title>" + title + "</title></head>
" +

            "<body bgcolor=\"#f0f0f0\">
" +

            "<h1 align=\"center\">" + title + "</h1>
" +

            "<h2 align=\"center\">" + hitCount + "</h2>
" +

            "</body></html>");

    }

                public void destroy()

    {

        // 这一步是可选的,但是如果需要,您可以把 hitCount 的值写入到数据库

    }

}

[code]       现在让我们来编译上面的 Servlet,并在 web.xml 文件中创建以下条目:

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

<web-app>

  <servlet>

    <servlet-name>PageHitCounter</servlet-name>

    <servlet-class>net.javathinker.test.PageHitCounter</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>PageHitCounter</servlet-name>

    <url-pattern>/TomcatTest/PageHitCounter</url-pattern>

  </servlet-mapping>

</web-app>

     现在通过访问 http://localhost:8080/TomcatTest/PageHitCounter 来调用这个 Servlet。这将会在每次页面刷新时,把计数器的值增加 1,结果如下所示:

      

总点击量

6

            

网站点击计数器

     很多时候,您可能有兴趣知道整个网站的总点击量。在 Servlet 中,这也是非常简单的,我们可以使用过滤器做到这一点。

     以下是实现一个简单的基于过滤器生命周期的网站点击计数器需要采取的步骤:    
  • 在过滤器的 init() 方法中初始化一个全局变量。
  • 每次调用 doFilter 方法时,都增加全局变量。
  • 如果需要,您可以在过滤器的 destroy() 中使用一个数据库表来存储全局变量的值。在下次初始化过滤器时,该值可在 init() 方法内被读取, 这一步是可选的。
     在这里,我们假设 Web 容器将无法重新启动。如果是重新启动或 Servlet 被销毁,点击计数器将被重置。            

范例

     本范例演示了如何实现一个简单的网站点击计数器:

[code]// 导入必需的 java 库

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{

     // 重置点击计数器

     hitCount = 0;

  }

   public void  doFilter(ServletRequest request,

              ServletResponse response,

              FilterChain chain)

              throws java.io.IOException, ServletException {

              // 把计数器的值增加 1
  
      hitCount++;

              // 输出计数器

      System.out.println("网站访问统计:"+ hitCount );

              // 把请求传回到过滤器链

      chain.doFilter(request,response);

  }

  public void destroy()
  {

      // 这一步是可选的,但是如果需要,您可以把 hitCount 的值写入到数据库

  }
}

         现在让我们来编译上面的 Servlet,并在 web.xml 文件中创建以下条目:


....

<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>

        ....

              现在访问网站的任意页面,比如 http://localhost:8080/。这将会在每次任意页面被点击时,把计数器的值增加 1,它会在日志中显示以下消息:

网站访问统计: 1

网站访问统计: 2

网站访问统计: 3

网站访问统计: 4

网站访问统计: 5

..................








程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-02-18 22:09:52 重新编辑]
  Java面向对象编程-->流程控制
  JavaWeb开发-->JSP技术详解(Ⅱ)
  JSP与Hibernate开发-->通过JPA API检索数据
  Java网络编程-->通过JDBC API访问数据库
  精通Spring-->绑定表单
  Vue3开发-->通过Vuex进行状态管理
  做前后端分离项目前必须要知道的事
  HTTP的状态代码的含义
  JSP 页面重定向
  Apache Internal Server Error 解决方法
  在JSP中如何取得form表单中被选中的radio项的值
  设置和获取Cookie
  HTTP请求响应过程与HTTPS区别
  java生成图片验证码--封装生成图片验证码的工具类
  用信鸽来解释HTTPS协议
  JSP2和Servlet3的一些新特性
  使用异步处理机制改进Web应用性能
  Java高级——HTTP重定向实现负载均衡
  Servlet 容器 Jetty 9.4.10 发布,大量错误修复和改进
  在web应用中使用数据库连接池
  ServletConfig和ServletContext详解(转移自: 《Tomcat与Java...
  更多...
 IPIP: 已设置保密
楼主      
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。