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

🎯 Tâches
Dans ce projet, vous allez apprendre :
- Comment implémenter le fichier
index.jsppour afficher les adresses IP et leurs comptes de visites. - Comment implémenter la classe
MyListenerpour créer et stocker laipVisitMapdans leServletContext. - Comment implémenter la classe
MyFilterpour compter le nombre de visites pour chaque adresse IP et mettre à jour laipVisitMap.
🏆 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
ServletContextpour stocker et récupérer des données au niveau de l'application. - Utiliser un
Filterpour 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.
Ouvrez le fichier
index.jspsitué dans le répertoire/home/labex/project/IpProject/src/main/webapp.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.
Ouvrez le fichier
MyListener.javasitué dans le répertoire/home/labex/project/IpProject/src/main/java/org/labex/listener.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.
Ouvrez le fichier
MyFilter.javasitué dans le répertoire/home/labex/project/IpProject/src/main/java/org/labex/filter.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
Ouvrez un terminal et accédez au répertoire
/home/labex/project/IpProject.Démarrez le serveur Tomcat en exécutant la commande suivante :
mvn tomcat7:run
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.Raffraîchissez la page plusieurs fois pour voir les comptes de visites augmenter.

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



