Compter le nombre d'accès par adresse IP

JavaBeginner
Pratiquer maintenant

Introduction

Dans ce projet, vous allez apprendre à construire une application de suivi des visiteurs IP simple en utilisant Java Servlet et JSP. L'application suivra les adresses IP des visiteurs accédant au site web et le nombre de fois où chaque adresse IP est venue.

Aperçu

aperçu du projet

🎯 Tâches

Dans ce projet, vous allez apprendre :

  • Comment implémenter le fichier index.jsp pour afficher les adresses IP et leurs comptes de visites.
  • Comment implémenter la classe MyListener pour créer et stocker la ipVisitMap dans le ServletContext.
  • Comment implémenter la classe MyFilter pour compter le nombre de visites pour chaque adresse IP et mettre à jour la ipVisitMap.

🏆 Réalisations

Après avoir terminé ce projet, vous serez capable de :

  • Construire une application web simple en utilisant Java Servlet et JSP.
  • Utiliser le ServletContext pour stocker et récupérer des données au niveau de l'application.
  • Utiliser un Filter pour intercepter et traiter les requêtes entrantes.
  • Utiliser la synchronisation pour vous assurer un accès thread-safe aux ressources partagées.

Implémentez le fichier index.jsp

Dans cette étape, vous allez apprendre à implémenter le fichier index.jsp pour afficher les adresses IP et leurs comptes de visites.

  1. Ouvrez le fichier index.jsp situé dans le répertoire /home/labex/project/IpProject/src/main/webapp.

  2. Ajoutez le code suivant au fichier index.jsp :

<%@ page import="java.util.Map" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>IP Visitor Tracker</title>
</head>
<body>
<h1>IP Visitor Tracker</h1>
<table border="1">
    <tr>
        <th>Adresse IP</th>
        <th>Compte de visites</th>
    </tr>
    <%
        Map<String, Integer> ipVisitMap = (Map<String, Integer>) getServletContext().getAttribute("ipVisitMap");
        if (ipVisitMap!= null) {
            for (String ip : ipVisitMap.keySet()) {
    %>
    <tr>
        <td><%= ip %></td>
        <td><%= ipVisitMap.get(ip) %></td>
    </tr>
    <%
            }
        }
    %>
</table>
</body>
</html>

Ce code récupère la ipVisitMap à partir du ServletContext et affiche les adresses IP et leurs comptes de visites dans un tableau.

Implémentez la classe MyListener

Dans cette étape, vous allez apprendre à implémenter la classe MyListener pour créer et stocker la ipVisitMap dans le ServletContext.

  1. Ouvrez le fichier MyListener.java situé dans le répertoire /home/labex/project/IpProject/src/main/java/org/labex/listener.

  2. Ajoutez le code suivant à la classe MyListener :

package org.labex.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.util.HashMap;
import java.util.Map;

@WebListener
public class MyListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent sce) {
        ServletContext servletContext = sce.getServletContext();
        Map<String, Integer> ipVisitMap = new HashMap<>();
        servletContext.setAttribute("ipVisitMap", ipVisitMap);
    }

    public void contextDestroyed(ServletContextEvent sce) {
        // Code de nettoyage si nécessaire
    }
}

Ce code crée une nouvelle HashMap appelée ipVisitMap pour stocker les adresses IP et leurs comptes de visites, puis la définit comme un attribut du ServletContext.

Implémentez la classe MyFilter

Dans cette étape, vous allez apprendre à implémenter la classe MyFilter pour compter le nombre de visites pour chaque adresse IP et mettre à jour la ipVisitMap.

  1. Ouvrez le fichier MyFilter.java situé dans le répertoire /home/labex/project/IpProject/src/main/java/org/labex/filter.

  2. Ajoutez le code suivant à la classe MyFilter :

package org.labex.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Map;

@WebFilter("/*")
public class MyFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {
        // Code d'initialisation si nécessaire
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String ipAddress = httpRequest.getRemoteAddr();
        ServletContext servletContext = httpRequest.getServletContext();
        Map<String, Integer> ipVisitMap = (Map<String, Integer>) servletContext.getAttribute("ipVisitMap");

        synchronized (ipVisitMap) {
            if (ipVisitMap.containsKey(ipAddress)) {
                ipVisitMap.put(ipAddress, ipVisitMap.get(ipAddress) + 1);
            } else {
                ipVisitMap.put(ipAddress, 1);
            }
        }

        chain.doFilter(request, response);
    }

    public void destroy() {
        // Code de nettoyage si nécessaire
    }
}

Ce code récupère la ipVisitMap à partir du ServletContext, obtient l'adresse IP du client actuel, puis met à jour la ipVisitMap en conséquence. Le bloc synchronized assure que les mises à jour de la ipVisitMap sont sécurisées pour les threads.

Testez l'application

  1. Ouvrez un terminal et accédez au répertoire /home/labex/project/IpProject.

  2. Démarrez le serveur Tomcat en exécutant la commande suivante :

mvn tomcat7:run
  1. Ouvrez un navigateur web et accédez à http://127.0.0.1:8080. Vous devriez voir la page IP Visitor Tracker avec les adresses IP et leurs comptes de visites.

  2. Raffraîchissez la page plusieurs fois pour voir les comptes de visites augmenter.

résultat du projet

Résumé

Félicitations ! Vous avez terminé ce projet. Vous pouvez pratiquer plus de laboratoires sur LabEx pour améliorer vos compétences.

✨ Vérifier la solution et pratiquer✨ Vérifier la solution et pratiquer✨ Vérifier la solution et pratiquer✨ Vérifier la solution et pratiquer