Contagem de Acessos por IP

JavaBeginner
Pratique Agora

Introdução

Neste projeto, você aprenderá como construir uma aplicação simples de rastreamento de visitantes IP usando Java Servlet e JSP. A aplicação irá monitorar os endereços IP dos visitantes que acessam o site e o número de vezes que cada endereço IP visitou.

Visualização

project preview

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como implementar o arquivo index.jsp para exibir os endereços IP e suas contagens de visitas.
  • Como implementar a classe MyListener para criar e armazenar o ipVisitMap no ServletContext.
  • Como implementar a classe MyFilter para contar o número de visitas para cada endereço IP e atualizar o ipVisitMap.

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Construir uma aplicação web simples usando Java Servlet e JSP.
  • Usar o ServletContext para armazenar e recuperar dados em nível de aplicação.
  • Usar um Filter para interceptar e processar requisições recebidas.
  • Usar sincronização para garantir acesso thread-safe a recursos compartilhados.

Implementar o arquivo index.jsp

Nesta etapa, você aprenderá como implementar o arquivo index.jsp para exibir os endereços IP e suas contagens de visitas.

  1. Abra o arquivo index.jsp localizado no diretório /home/labex/project/IpProject/src/main/webapp.

  2. Adicione o seguinte código ao arquivo 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 o ipVisitMap do ServletContext e exibe os endereços IP e suas contagens de visitas em uma tabela.

Implementar a classe MyListener

Nesta etapa, você aprenderá como implementar a classe MyListener para criar e armazenar o ipVisitMap no ServletContext.

  1. Abra o arquivo MyListener.java localizado no diretório /home/labex/project/IpProject/src/main/java/org/labex/listener.

  2. Adicione o seguinte código à 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) {
        // Cleanup code if needed
    }
}

Este código cria um novo HashMap chamado ipVisitMap para armazenar os endereços IP e suas contagens de visitas, e então o define como um atributo do ServletContext.

Implementar a classe MyFilter

Nesta etapa, você aprenderá como implementar a classe MyFilter para contar o número de visitas para cada endereço IP e atualizar o ipVisitMap.

  1. Abra o arquivo MyFilter.java localizado no diretório /home/labex/project/IpProject/src/main/java/org/labex/filter.

  2. Adicione o seguinte código à 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 {
        // Initialization code if needed
    }

    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() {
        // Cleanup code if needed
    }
}

Este código recupera o ipVisitMap do ServletContext, obtém o endereço IP do cliente atual e, em seguida, atualiza o ipVisitMap de acordo. O bloco synchronized garante que as atualizações no ipVisitMap sejam thread-safe.

Testar a aplicação

  1. Abra um terminal e navegue até o diretório /home/labex/project/IpProject.

  2. Inicie o servidor Tomcat executando o seguinte comando:

mvn tomcat7:run
  1. Abra um navegador web e navegue até http://127.0.0.1:8080. Você deverá ver a página IP Visitor Tracker com os endereços IP e suas contagens de visitas.

  2. Atualize a página várias vezes para ver as contagens de visitas aumentarem.

project result

Resumo

Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.

✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar