Servlets - Compteur de coups
Compteur d'accès pour une page Web
Plusieurs fois, vous seriez intéressé à connaître le nombre total de visites sur une page particulière de votre site Web. Il est très simple de compter ces hits à l'aide d'un servlet car le cycle de vie d'un servlet est contrôlé par le conteneur dans lequel il s'exécute.
Voici les étapes à suivre pour implémenter un compteur d'accès de page simple basé sur le cycle de vie du servlet -
Initialisez une variable globale dans la méthode init ().
Augmentez la variable globale chaque fois que la méthode doGet () ou doPost () est appelée.
Si nécessaire, vous pouvez utiliser une table de base de données pour stocker la valeur de la variable globale dans la méthode destroy (). Cette valeur peut être lue dans la méthode init () lors de la prochaine initialisation du servlet. Cette étape est facultative.
Si vous souhaitez ne compter que les accès de page uniques dans une session, vous pouvez utiliser la méthode isNew () pour vérifier si la même page a déjà été atteinte dans cette session. Cette étape est facultative.
Vous pouvez afficher la valeur du compteur global pour afficher le nombre total de visites sur votre site Web. Cette étape est également facultative.
Ici, je suppose que le conteneur Web ne sera pas redémarré. S'il est redémarré ou si le servlet est détruit, le compteur d'accès sera réinitialisé.
Exemple
Cet exemple montre comment implémenter un compteur d'accès de page simple -
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.
}
}
Maintenant, compilons le servlet ci-dessus et créons les entrées suivantes dans 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>
....
Appelez maintenant ce servlet en utilisant l'URL http: // localhost: 8080 / PageHitCounter. Cela augmenterait le compteur de un à chaque fois que cette page est actualisée et afficherait le résultat suivant -
Total Number of Hits
6
Hit Counter for a Website:
Plusieurs fois, vous seriez intéressé de connaître le nombre total de visites sur l'ensemble de votre site Web. C'est également très simple dans Servlet et nous pouvons y parvenir en utilisant des filtres.
Voici les étapes à suivre pour mettre en œuvre un simple compteur de visites de site Web basé sur le cycle de vie du filtre -
Initialise une variable globale dans la méthode init () d'un filtre.
Augmentez la variable globale chaque fois que la méthode doFilter est appelée.
Si nécessaire, vous pouvez utiliser une table de base de données pour stocker la valeur de la variable globale dans la méthode destroy () du filtre. Cette valeur peut être lue dans la méthode init () lorsque le filtre sera initialisé la prochaine fois. Cette étape est facultative.
Ici, je suppose que le conteneur Web ne sera pas redémarré. S'il est redémarré ou si le servlet est détruit, le compteur d'accès sera réinitialisé.
Exemple
Cet exemple montre comment implémenter un simple compteur d'accès à un site Web -
// 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.
}
}
Maintenant, compilons le servlet ci-dessus et créons les entrées suivantes dans 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>
....
Maintenant, appelez n'importe quelle URL comme URL http: // localhost: 8080 /. Cela augmenterait le compteur de un à chaque fois qu'une page obtient un hit et afficherait le message suivant dans le journal -
Site visits count : 1
Site visits count : 2
Site visits count : 3
Site visits count : 4
Site visits count : 5
..................