>>分享Java Web开发技术,并且对孙卫琴的《Tomcat与Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 28628 个阅读者 刷新本主题
 * 贴子主题:  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中使用JavaBean(Ⅱ)
  JSP与Hibernate开发-->映射组成关系
  Java网络编程-->对象的序列化与反序列化
  精通Spring-->
  Vue3开发-->Vue组件开发高级技术
  JSP 点击量统计范例
  JSP HTTP 状态码
  JSP 语法
  一文看懂web服务器、应用服务器、web容器、反向代理服务器区...
  海量数据如何分页
  tomcat+nginx域名配置方法
  解决HttpServletRequest的输入流只能读取一次的问题
  JSP自定义标签的用法
  JSP 到数据库查询的数据 分页显示
  JSP中访问JavaBean
  如何用Servlet动态生成验证码
  HTTP协议和相应的RFC文档的更新
  在Tomcat9中配置HTTP/2
  Apache Ant 1.9.12 和 1.10.4 发布,解压安全修复
  深度介绍响应式编程
  更多...
 IPIP: 已设置保密
楼主      
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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