“Servlet 点击计数器”的版本间差异

本页内容
(创建页面,内容为“{{DISPLAYTITLE:Servlet 点击计数器}}18 = Servlet 点击计数器 = == 网页点击计数器 == 很多时候,您可能有兴趣知道网站的某个特定页面上的总点击量。使用 Servlet 来计算这些点击量是非常简单的,因为一个 Servlet 的生命周期是由它运行所在的容器控制的。 以下是实现一个简单的基于 Servlet 生命周期的网页点击计数器需要采取的步骤: *…”)
 
Neo讨论 | 贡献
无编辑摘要
 
第18行: 第18行:
本实例演示了如何实现一个简单的网页点击计数器:
本实例演示了如何实现一个简单的网页点击计数器:


<pre>
<sample title="" desc="" lang="java" hererun="1">
package com.xiaobai.test;
package com.xiaobai.test;


第33行: 第33行:
  * Servlet implementation class PageHitCounter
  * Servlet implementation class PageHitCounter
  */
  */
@WebServlet(&quot;/PageHitCounter&quot;)
@WebServlet("/PageHitCounter")
public class PageHitCounter extends HttpServlet {
public class PageHitCounter extends HttpServlet {
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
第46行: 第46行:
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


         response.setContentType(&quot;text/html;charset=UTF-8&quot;);
         response.setContentType("text/html;charset=UTF-8");
         // 增加 hitCount
         // 增加 hitCount
         hitCount++;
         hitCount++;
         PrintWriter out = response.getWriter();
         PrintWriter out = response.getWriter();
         String title = &quot;总点击量&quot;;
         String title = "总点击量";
         String docType = &quot;&lt;!DOCTYPE html&gt; \n&quot;;
         String docType = "<!DOCTYPE html> \n";
         out.println(docType +
         out.println(docType +
             &quot;&lt;html&gt;\n&quot; +
             "<html>\n" +
             &quot;&lt;head&gt;&lt;title&gt;&quot; + title + &quot;&lt;/title&gt;&lt;/head&gt;\n&quot; +
             "<head><title>" + title + "</title></head>\n" +
             &quot;&lt;body bgcolor=\&quot;#f0f0f0\&quot;&gt;\n&quot; +
             "<body bgcolor=\"#f0f0f0\">\n" +
             &quot;&lt;h1 align=\&quot;center\&quot;&gt;&quot; + title + &quot;&lt;/h1&gt;\n&quot; +
             "<h1 align=\"center\">" + title + "</h1>\n" +
             &quot;&lt;h2 align=\&quot;center\&quot;&gt;&quot; + hitCount + &quot;&lt;/h2&gt;\n&quot; +
             "<h2 align=\"center\">" + hitCount + "</h2>\n" +
             &quot;&lt;/body&gt;&lt;/html&gt;&quot;);
             "</body></html>");
     }
     }
      
      
第67行: 第67行:


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


<pre>
<sample title="" desc="" lang="java" hererun="1">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
<?xml version="1.0" encoding="UTF-8"?>
&lt;web-app&gt;
<web-app>
   &lt;servlet&gt;
   <servlet>
     &lt;servlet-name&gt;PageHitCounter&lt;/servlet-name&gt;
     <servlet-name>PageHitCounter</servlet-name>
     &lt;servlet-class&gt;com.xiaobai.test.PageHitCounter&lt;/servlet-class&gt;
     <servlet-class>com.xiaobai.test.PageHitCounter</servlet-class>
   &lt;/servlet&gt;
   </servlet>
   &lt;servlet-mapping&gt;
   <servlet-mapping>
     &lt;servlet-name&gt;PageHitCounter&lt;/servlet-name&gt;
     <servlet-name>PageHitCounter</servlet-name>
     &lt;url-pattern&gt;/TomcatTest/PageHitCounter&lt;/url-pattern&gt;
     <url-pattern>/TomcatTest/PageHitCounter</url-pattern>
   &lt;/servlet-mapping&gt;
   </servlet-mapping>
&lt;/web-app&gt;
</web-app>
</pre>
</sample>
现在通过访问 http://localhost:8080/TomcatTest/PageHitCounter 来调用这个 Servlet。这将会在每次页面刷新时,把计数器的值增加 1,结果如下所示:
现在通过访问 http://localhost:8080/TomcatTest/PageHitCounter 来调用这个 Servlet。这将会在每次页面刷新时,把计数器的值增加 1,结果如下所示:


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


<pre>
<sample title="" desc="" lang="java" hererun="1">
// 导入必需的 java 库
// 导入必需的 java 库
import java.io.*;
import java.io.*;
第132行: 第132行:


       // 输出计数器
       // 输出计数器
       System.out.println(&quot;网站访问统计:&quot;+ hitCount );
       System.out.println("网站访问统计:"+ hitCount );


       // 把请求传回到过滤器链
       // 把请求传回到过滤器链
第141行: 第141行:
       // 这一步是可选的,但是如果需要,您可以把 hitCount 的值写入到数据库
       // 这一步是可选的,但是如果需要,您可以把 hitCount 的值写入到数据库
   }
   }
}  
}
</pre>
</sample>
现在让我们来编译上面的 Servlet,并在 web.xml 文件中创建以下条目:
现在让我们来编译上面的 Servlet,并在 web.xml 文件中创建以下条目:


<pre>
<sample title="" desc="" lang="java" hererun="1">
....
....
&lt;filter&gt;
<filter>
   &lt;filter-name&gt;SiteHitCounter&lt;/filter-name&gt;
   <filter-name>SiteHitCounter</filter-name>
   &lt;filter-class&gt;SiteHitCounter&lt;/filter-class&gt;
   <filter-class>SiteHitCounter</filter-class>
&lt;/filter&gt;
</filter>


&lt;filter-mapping&gt;
<filter-mapping>
   &lt;filter-name&gt;SiteHitCounter&lt;/filter-name&gt;
   <filter-name>SiteHitCounter</filter-name>
   &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
   <url-pattern>/*</url-pattern>
&lt;/filter-mapping&gt;
</filter-mapping>


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


<pre>
<sample title="" desc="" lang="java" hererun="1">
网站访问统计: 1
网站访问统计: 1
网站访问统计: 2
网站访问统计: 2
第168行: 第168行:
网站访问统计: 5
网站访问统计: 5
..................
..................
</pre>
</sample>

2022年8月17日 (三) 20:27的最新版本

Servlet 点击计数器

网页点击计数器

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

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

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

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

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


示例

package com.xiaobai.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> \n";
        out.println(docType +
            "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor=\"#f0f0f0\">\n" +
            "<h1 align=\"center\">" + title + "</h1>\n" +
            "<h2 align=\"center\">" + hitCount + "</h2>\n" +
            "</body></html>");
    }
    
    public void destroy()
    {
        // 这一步是可选的,但是如果需要,您可以把 hitCount 的值写入到数据库
    }

}

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


示例

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <servlet>
    <servlet-name>PageHitCounter</servlet-name>
    <servlet-class>com.xiaobai.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 被销毁,点击计数器将被重置。

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


示例

// 导入必需的 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
..................
此页面最后编辑于2022年8月17日 (星期三) 20:27。