Contar el número de accesos por IP

JavaBeginner
Practicar Ahora

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

vista previa del proyecto

🎯 Tareas

En este proyecto, aprenderá:

  • Cómo implementar el archivo index.jsp para mostrar las direcciones IP y sus conteos de visitas.
  • Cómo implementar la clase MyListener para crear y almacenar el ipVisitMap en el ServletContext.
  • Cómo implementar la clase MyFilter para contar el número de visitas para cada dirección IP y actualizar el ipVisitMap.

🏆 Logros

Después de completar este proyecto, podrá:

  • Construir una aplicación web simple utilizando Java Servlet y JSP.
  • Utilizar el ServletContext para almacenar y recuperar datos a nivel de aplicación.
  • Utilizar un Filter para 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.

  1. Abra el archivo index.jsp ubicado en el directorio /home/labex/project/IpProject/src/main/webapp.

  2. 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.

  1. Abra el archivo MyListener.java ubicado en el directorio /home/labex/project/IpProject/src/main/java/org/labex/listener.

  2. 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.

  1. Abra el archivo MyFilter.java ubicado en el directorio /home/labex/project/IpProject/src/main/java/org/labex/filter.

  2. 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

  1. Abra una terminal y vaya al directorio /home/labex/project/IpProject.

  2. Inicie el servidor Tomcat ejecutando el siguiente comando:

mvn tomcat7:run
  1. 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.

  2. Actualice la página varias veces para ver que los conteos de visitas aumenten.

resultado del proyecto

Resumen

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

✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar