当前位置:首页 » Servlets » Servlet点击计数器

Servlet点击计数器

Servlets点击计数器实例代码在线教程 - 这是非常简单的使用servlet来计算这些点击,因为一个servlet的生命周期是由容器在它运行的。

网页点击计数器

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

以下是实现一个简单的页面计数器采取的步骤,这是基于Servlet的生命周期:

  • 在init()方法中初始化的全局变量

  • 无论是doGet()或doPost()方法被每次调用都增加全局变量。

  • 如果需要,您可以使用一个数据库表来存储全局变量的值在destroy()。在init()方法里可以被读取当servlet在下一次初始化,一步是可选的。

  • 如果你想在一个会话中只有唯一的页面点击数,那么你可以使用isNew()方法来检查,如果同一个页面在该会话已经被点击,一步是可选的。

  • 您可以在网站上,显示值的全局计数器显示的总点击量。此步骤也是可选的。

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

例子:

这个例子展示了如何实现一个简单的页面计数器:

import java.io.*;
import java.sql.Date;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class PageHitCounter 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 - by www.gitbook.net
      hitCount++; 
      PrintWriter out = response.getWriter();
      String title = "Total Number of Hits";
      String docType =
      "<!doctype html public \"-//w3c//dtd html 4.0 " +
      "transitional//en\">\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() 
  { 
      // This is optional step but if you like you
      // can write hitCount value in your database.
  } 
} 

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

....
 <servlet>
     <servlet-name>PageHitCounter</servlet-name>
     <servlet-class>PageHitCounter</servlet-class>
 </servlet>

 <servlet-mapping>
     <servlet-name>PageHitCounter</servlet-name>
     <url-pattern>/PageHitCounter</url-pattern>
 </servlet-mapping>
....

现在调用该servlet,使用URL http://localhost:8080/PageHitCounter的。这将增加一个计数器,每次这个页面被刷新,它会显示下面的结果:

Total Number of Hits

6

网站计数器:

很多时候,你有兴趣知道在你的整个网站的总点击次数。在Servlet,这也是很简单的,我们可以使用过滤器做到这一点。

以下是应采取的步骤,以实现一个简单的网站计数器,这是基于过滤器的生命周期:

  • 在init()方法的过滤器初始化的全局变量。

  • 每一次doFilter方法被调用增加全局变量

  • 如果需要,您可以使用一个数据库表来存储全局变量的值在destroy()方法的过滤器。这个值可以读取里面init() 方法时,过滤器将被初始化的时间。这一步是可选的。 

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

例子:

这个例子展示了如何实现一个简单的网站计数器:

// Import required java libraries
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{
     // 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("Site visits count :"+ hitCount );

      // Pass request back down the filter chain
      chain.doFilter(request,response);
  }
  public void destroy() 
  { 
      // This is optional step but if you like you
      // can write hitCount value in your database.
  } 
} 

现在让我们来编译上面的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>

....

现在,调用任何URL,如URL输入http://localhost:8080/。这会增加一个计数器每次任何页面被点击,它会在日志中显示以下消息:

Site visits count : 1
Site visits count : 2
Site visits count : 3
Site visits count : 4
Site visits count : 5
..................