Introducción
En este proyecto, aprenderá a construir una aplicación simple de seguimiento de visitantes IP utilizando Java Servlet y JSP. La aplicación llevará un registro de las direcciones IP de los visitantes que acceden al sitio web y el número de veces que cada dirección IP ha visitado.
Vista previa

🎯 Tareas
En este proyecto, aprenderá:
- Cómo implementar el archivo
index.jsppara mostrar las direcciones IP y sus conteos de visitas. - Cómo implementar la clase
MyListenerpara crear y almacenar elipVisitMapen elServletContext. - Cómo implementar la clase
MyFilterpara contar el número de visitas para cada dirección IP y actualizar elipVisitMap.
🏆 Logros
Después de completar este proyecto, podrá:
- Construir una aplicación web simple utilizando Java Servlet y JSP.
- Utilizar el
ServletContextpara almacenar y recuperar datos a nivel de aplicación. - Utilizar un
Filterpara interceptar y procesar solicitudes entrantes. - Utilizar la sincronización para garantizar un acceso seguro para los hilos a los recursos compartidos.
Implementar el archivo index.jsp
En este paso, aprenderá a implementar el archivo index.jsp para mostrar las direcciones IP y sus conteos de visitas.
Abra el archivo
index.jspubicado en el directorio/home/labex/project/IpProject/src/main/webapp.Agregue el siguiente código al archivo
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>IP Address</th>
<th>Visit Count</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>
Este código recupera el ipVisitMap del ServletContext y muestra las direcciones IP y sus conteos de visitas en una tabla.
Implementar la clase MyListener
En este paso, aprenderá a implementar la clase MyListener para crear y almacenar el ipVisitMap en el ServletContext.
Abra el archivo
MyListener.javaubicado en el directorio/home/labex/project/IpProject/src/main/java/org/labex/listener.Agregue el siguiente código a la clase
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) {
// Código de limpieza si es necesario
}
}
Este código crea un nuevo HashMap llamado ipVisitMap para almacenar las direcciones IP y sus conteos de visitas, y luego lo establece como un atributo del ServletContext.
Implementar la clase MyFilter
En este paso, aprenderá a implementar la clase MyFilter para contar el número de visitas para cada dirección IP y actualizar el ipVisitMap.
Abra el archivo
MyFilter.javaubicado en el directorio/home/labex/project/IpProject/src/main/java/org/labex/filter.Agregue el siguiente código a la clase
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 {
// Código de inicialización si es necesario
}
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() {
// Código de limpieza si es necesario
}
}
Este código recupera el ipVisitMap del ServletContext, obtiene la dirección IP del cliente actual y luego actualiza el ipVisitMap en consecuencia. El bloque synchronized garantiza que las actualizaciones al ipVisitMap sean seguras para los hilos.
Probar la aplicación
Abra una terminal y vaya al directorio
/home/labex/project/IpProject.Inicie el servidor Tomcat ejecutando el siguiente comando:
mvn tomcat7:run
Abra un navegador web y vaya a
http://127.0.0.1:8080. Debería ver la página IP Visitor Tracker con las direcciones IP y sus conteos de visitas.Actualice la página varias veces para ver que los conteos de visitas aumenten.

Resumen
¡Felicidades! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.



