English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Счетчик кликов Servlet

Контент страницы с计数чиком кликов

Часто вы можете быть заинтересованы в знании общего количества кликов на определенной странице сайта. Использование Servlet для расчета этих кликов очень просто, так как жизненный цикл Servlet контролируется контейнером, в котором он работает.

Вот шаги, которые необходимо выполнить для реализации простого веб-страницы с计数чиком кликов на основе жизненного цикла Servlet:

  • В методе init() инициализируется глобальная переменная.

  • Каждый раз при вызове метода doGet() или doPost() увеличивается глобальная переменная.

  • Если необходимо, вы можете использовать таблицу базы данных для хранения значения глобальной переменной в методе destroy(). При следующей инициализации Servlet это значение можно прочитать в методе init(). Этот шаг является опциональным.

  • Если вы хотите подсчитать количество кликов на странице только для одного сеанса сессии, пожалуйста, используйте метод isNew() для проверки, был ли сеанс уже кликнут на эту страницу. Этот шаг является опциональным.

  • Вы можете показать значение глобального счетчика на сайте, чтобы показать общее количество кликов на странице. Этот шаг является опциональным.

Здесь мы предполагаем, что веб-контейнер не сможет перезапуститься. Если будет перезапуск или уничтожение Servlet, счетчик будет сброшен.

Online example

Этот пример демонстрирует, как реализовать простую веб-страницу с计数чиком кликов:

package com.w3codebox.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;
/**
 * Класс реализации сервлета PageHitCounter
 */
@WebServlet("/PageHitCounter")
public class PageHitCounter extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private int hitCount; 
    
    public void init() 
    { 
        // Reset click counter
        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.w3codebox.test.PageHitCounter</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>PageHitCounter</servlet-name>
    <url-pattern>/TomcatTest/PageHitCounter</url-pattern>
  </servlet-mapping>
</web-app>

Now call this Servlet by accessing http://localhost:8080/TomcatTest/PageHitCounter. This will increase the counter value by 1 each time the page is refreshed, as shown below:

Total number of hits

6

Website hit counter

Many times, you may be interested in knowing the total number of hits on the entire website. In Servlet, this is also very simple, we can achieve this with a filter.

The following steps are required to implement a simple website hit counter based on the filter lifecycle:

  • Initialize a global variable in the init() method of the filter.

  • The global variable is incremented each time the doFilter method is called.

  • If necessary, you can use a database table in the destroy() method of the filter to store the value of the global variable. This value can be read in the init() method when the filter is initialized next, this step is optional.

In this case, we assume that the Web container will not be restarted. If it is restarted or the Servlet is destroyed, the hit counter will be reset.

Online example

This example demonstrates how to implement a simple website hit counter:

// Import necessary 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 click counter
     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
..................