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

Contador de Clique Servlet

Contador de cliques na página

Muitas vezes, você pode estar interessado em saber o total de cliques em uma página específica do site. Usar Servlet para calcular esses cliques é muito simples, pois o ciclo de vida de um Servlet é controlado pelo contêiner em que ele está executando.

Aqui estão os passos a serem seguidos para implementar um simples contador de cliques na página baseado no ciclo de vida do Servlet:

  • Inicialize uma variável global no método init().

  • A cada chamada do método doGet() ou doPost(), aumente a variável global.

  • Se necessário, você pode usar uma tabela de banco de dados para armazenar o valor da variável global em destroy(). O valor pode ser lido no método init() na próxima inicialização do Servlet. Este passo é opcional.

  • Se você quiser contar o clique na página de uma sessão específica apenas uma vez, use o método isNew() para verificar se a sessão já clicou na mesma página. Este passo é opcional.

  • Você pode exibir o valor do contador global na página do site para mostrar o total de cliques na página. Este passo é opcional.

Aqui, supomos que o container web não possa ser reiniciado. Se houver reinicialização ou o Servlet for destruído, o contador será resetado.

Exemplo online

Este exemplo demonstra como implementar um simples contador de cliques em uma página web:

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;
/**
 * Classe de implementação do Servlet PageHitCounter
 */
@WebServlet("/PageHitCounter")
public class PageHitCounter extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private int hitCount; 
    
    public void init() 
    { 
        // redefinir o contador de cliques
        hitCount = 0;
    } 
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        // aumentar 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() 
    { 
        // Este passo é opcional, mas se necessário, você pode gravar o valor de hitCount no banco de dados
    } 
}

Agora vamos compilar o Servlet acima e criar a seguinte entrada no arquivo 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-mpping>
    <servlet-name>PageHitCounter</servlet-name>
    <url-pattern>/TomcatTest/PageHitCounter</url-pattern>
  </servlet-mpping>
</web-app>

Agora, acesse http://localhost:8080/TomcatTest/PageHitCounter para chamar este Servlet. Isso aumentará o valor do contador a cada atualização da página 1os resultados são exibidos a seguir:

Total de cliques

6

Contador de cliques do site

Muitas vezes, você pode estar interessado em saber o total de cliques do site. Isso é muito simples no Servlet, podemos fazer isso com um filtro.

Aqui estão os passos a serem seguidos para implementar um simples contador de cliques de site baseado no ciclo de vida do filtro:

  • Inicializa uma variável global no método init() do filtro

  • Aumenta a variável global cada vez que o método doFilter é chamado

  • Se necessário, você pode usar uma tabela de banco de dados no método destroy() do filtro para armazenar os valores das variáveis globais. Essa valor pode ser lido no método init() ao inicializar o filtro novamente, isso é opcional.

Aqui, suponhamos que o contêiner web não será capaz de reiniciar. Se reiniciar ou o Servlet for destruído, o contador de cliques será redefinido.

Exemplo online

Este exemplo demonstra como implementar um simples contador de cliques de site:

// importar bibliotecas java necessárias
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{
     // redefinir o contador de cliques
     hitCount = 0;
  }
  public void doFilter(ServletRequest request, 
              ServletResponse response,
              FilterChain chain) 
              throws java.io.IOException, ServletException {
      // Aumenta o valor do contador 1
      hitCount++;
      // Saída do Contador
      System.out.println("Estatísticas de Acesso ao Site:")+ hitCount);
      // Passa a solicitação de volta para a cadeia de filtros
      chain.doFilter(request,response);
  }
  public void destroy() 
  { 
      // Este passo é opcional, mas se necessário, você pode gravar o valor de hitCount no banco de dados
  } 
}

Agora vamos compilar o Servlet acima e criar a seguinte entrada no arquivo web.xml:

....
<filter>
   <filter-name>SiteHitCounter</filter-name>
   <filter-class>SiteHitCounter</filter-class>
</filter>
<filter-mpping>
   <filter-name>SiteHitCounter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mpping>
....

Agora acesse qualquer página do site, por exemplo http://localhost:8080/Isso aumentará o valor do contador a cada vez que qualquer página for clicada 1Ela exibirá a seguinte mensagem no log:

Estatísticas de Acesso ao Site: 1
Estatísticas de Acesso ao Site: 2
Estatísticas de Acesso ao Site: 3
Estatísticas de Acesso ao Site: 4
Estatísticas de Acesso ao Site: 5
..................