📜  Servlet – 点击计数器

📅  最后修改于: 2022-05-13 01:54:47.170000             🧑  作者: Mango

Servlet – 点击计数器

有时,您会想知道您网站上特定页面的访问者总数。因为 servlet 的生命周期由运行它的容器控制,所以使用 servlet 计算这些命中非常简单。以下步骤基于基本 Servlet 生命周期页面命中计数器的实现:

  1. 在 init()函数中,创建一个全局变量。
  2. 每次使用 doGet() 或 doPost() 方法时,都会增加全局变量。
  3. 如有必要,您可以利用数据库表在 destroy() 方法中保存全局变量的值。当 servlet 下一次初始化时,这个值可以从 init()函数中读取。此步骤是可选的。
  4. 如果您只想计算会话中的唯一页面点击次数,则可以使用 isNew()函数来验证该会话中是否已经点击了同一页面。这是一个可选步骤。
  5. 全局计数器的值可能会显示为代表您网站上的总点击次数。这也是一个可选步骤。

我们假设在这种情况下无法重新启动 Web 容器。如果您重新启动或删除 Servlet,计数器将被重置。

例子

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

Java
import java.io.*;
import java.sql.Date;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
  
public class GfgServletExample extends HttpServlet {
    private int hitCount;
  
    public void init()
    {
        // Reset hit counter.
        hitCount = 0;
    }
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException
    {
        // Set response content type
        response.setContentType("text/html");
  
        // This method executes whenever the servlet is hit 
        // increment hitCount
        hitCount++;
        PrintWriter out = response.getWriter();
        String title = "Count of total number of hits";
        String docType
            = "\n";
  
        out.println(
            docType + "\n"
            + "" + title + "\n"
            + "\n"
            + "

" + title + "

\n"             + "

" + hitCount             + "

\n"             + ""             + "");     }        public void destroy()     {         // This is an optional step,         // however you may store the hitCount value in your         // database if you like.     } }


XML


  HitCounter

   GfgServletExample
   GfgServletExample

  

   GfgServletExample
   /GfgServletExample



Java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
  
public class GfgServletExample 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("Visits count is :" + hitCount);
  
        // Pass request back down the filter chain
        chain.doFilter(request, response);
    }
  
    public void destroy()
    {
        // This is an optional step,
        // however you may store the hitCount value in your
        // database if you like.
    }
}


XML
...

   GfgServletExample
   GfgServletExample

  

   GfgServletExample
   /GfgServletExample

...


现在编译上面的 Servlet 并将以下项目添加到web.xml文件中:

XML



  HitCounter

   GfgServletExample
   GfgServletExample

  

   GfgServletExample
   /GfgServletExample


现在通过访问http:来调用Servlet localhost:8080/HitCounter/GfgServletExample。这样每次都会刷新页面,增加计数器1的值,结果如下:

网站点击计数器

您可能有兴趣在很多情况下了解整个网站的总点击次数。在 Servlet 中,这也很简单,我们可以通过使用过滤器来做到这一点。因此,概述了基于过滤器生命周期创建基本网站点击计数器的方法。

  • 在过滤器的 init() 方法中,设置一个全局变量。
  • 每次运行 doFilter 方法时,都会增加全局变量。
  • 如有必要,您可以利用数据库表将全局变量的值保存在过滤器的 destroy()函数中。当过滤器在接下来的时间被初始化时,这个值可以从 init()函数中读取。这是一个可选步骤。

我们假设此时 Web 容器不会重新启动。如果重新启动或 servlet 被破坏,命中计数器将被重置。

Java

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
  
public class GfgServletExample 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("Visits count is :" + hitCount);
  
        // Pass request back down the filter chain
        chain.doFilter(request, response);
    }
  
    public void destroy()
    {
        // This is an optional step,
        // however you may store the hitCount value in your
        // database if you like.
    }
}

现在编译上面的 Servlet 并将以下项目添加到 web.xml 文件中:

XML

...

   GfgServletExample
   GfgServletExample

  

   GfgServletExample
   /GfgServletExample

...

现在通过访问http:来调用Servlet localhost:8080/HitCounter/GfgServletExample。这样每次都会刷新页面,增加计数器1的值,结果如下:

Visits count is : 1
Visits count is : 2
Visits count is : 3
Visits count is : 4
Visits count is : 5
...........