Servlets - contador de acessos
Hit Counter para uma página da web
Muitas vezes você estaria interessado em saber o número total de acessos em uma página específica do seu site. É muito simples contar essas ocorrências usando um servlet porque o ciclo de vida de um servlet é controlado pelo contêiner no qual ele é executado.
A seguir estão as etapas a serem seguidas para implementar um contador de visitas de página simples que é baseado no Ciclo de Vida do Servlet -
Inicialize uma variável global no método init ().
Aumente a variável global sempre que o método doGet () ou doPost () for chamado.
Se necessário, você pode usar uma tabela de banco de dados para armazenar o valor da variável global no método destroy (). Este valor pode ser lido dentro do método init () quando o servlet for inicializado na próxima vez. Esta etapa é opcional.
Se você deseja contar apenas hits de página únicos em uma sessão, você pode usar o método isNew () para verificar se a mesma página já foi atingida nessa sessão. Esta etapa é opcional.
Você pode exibir o valor do contador global para mostrar o número total de acessos em seu site. Esta etapa também é opcional.
Aqui, estou assumindo que o contêiner da web não será reiniciado. Se ele for reiniciado ou o servlet destruído, o contador de visitas será zerado.
Exemplo
Este exemplo mostra como implementar um contador de visitas de página simples -
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
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.
}
}
Agora vamos compilar o servlet acima e criar as seguintes entradas em 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>
....
Agora chame esse servlet usando o URL http: // localhost: 8080 / PageHitCounter. Isso aumentaria o contador em um cada vez que esta página fosse atualizada e exibia o seguinte resultado -
Total Number of Hits
6
Hit Counter for a Website:
Muitas vezes você estaria interessado em saber o número total de acessos em todo o seu site. Isso também é muito simples no Servlet e podemos fazer isso usando filtros.
A seguir estão as etapas a serem seguidas para implementar um contador de visitas simples de um site baseado no Ciclo de Vida do Filtro
Inicialize uma variável global no método init () de um filtro.
Aumente a variável global sempre que o método doFilter for chamado.
Se necessário, você pode usar uma tabela de banco de dados para armazenar o valor da variável global no método de filtro destroy (). Este valor pode ser lido dentro do método init () quando o filtro for inicializado na próxima vez. Esta etapa é opcional.
Aqui, estou assumindo que o contêiner da web não será reiniciado. Se ele for reiniciado ou o servlet destruído, o contador de visitas será zerado.
Exemplo
Este exemplo mostra como implementar um contador de visitas de site simples -
// 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.
}
}
Agora vamos compilar o servlet acima e criar as seguintes entradas em 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>
....
Agora chame qualquer URL como http: // localhost: 8080 /. Isso aumentaria o contador em um cada vez que qualquer página fosse acessada e seria exibida a seguinte mensagem no log -
Site visits count : 1
Site visits count : 2
Site visits count : 3
Site visits count : 4
Site visits count : 5
..................