>>分享Java Web开发技术,并且对孙卫琴的《Tomcat与Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 21467 个阅读者 刷新本主题
 * 贴子主题:  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与Hibernate开发-->Java应用分层架构及软件模型
  Java网络编程-->用Spring整合CXF发布Web服务
  精通Spring-->绑定CSS样式
  Vue3开发-->通过Vuex进行状态管理
  HTTP 状态代码所对应的消息
  HTTP 基本工作原理
  JSP 表达式语言
  JSP 标准标签库(JSTL) 概览
  JSP 生命周期
  keepalived+nginx+docker实现负载均衡高可用服务
  在Java Web应用中如何判断客户请求来自移动端访问还是PC端访...
  java生成图片验证码--封装生成图片验证码的工具类
  好消息《Tomcat与JavaWeb开发技术详解》第3版出版,业界大咖...
  JSP自定义标签的用法
  web.xml中配置出错页面,处理异常
  web.xml文件中jsp-config元素的用法
  Java表达式EL语言介绍
  JSP中访问JavaBean
  理解JavaWeb应用中的绝对URI和相对URI
  更多...
 IPIP: 已设置保密
楼主      
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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