Servlet – 点击计数器
有时,您会想知道您网站上特定页面的访问者总数。因为 servlet 的生命周期由运行它的容器控制,所以使用 servlet 计算这些命中非常简单。以下步骤基于基本 Servlet 生命周期页面命中计数器的实现:
- 在 init()函数中,创建一个全局变量。
- 每次使用 doGet() 或 doPost() 方法时,都会增加全局变量。
- 如有必要,您可以利用数据库表在 destroy() 方法中保存全局变量的值。当 servlet 下一次初始化时,这个值可以从 init()函数中读取。此步骤是可选的。
- 如果您只想计算会话中的唯一页面点击次数,则可以使用 isNew()函数来验证该会话中是否已经点击了同一页面。这是一个可选步骤。
- 全局计数器的值可能会显示为代表您网站上的总点击次数。这也是一个可选步骤。
我们假设在这种情况下无法重新启动 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
...........