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

🎯 Tarefas
Neste projeto, você aprenderá:
- Como implementar o arquivo
index.jsppara exibir os endereços IP e suas contagens de visitas. - Como implementar a classe
MyListenerpara criar e armazenar oipVisitMapnoServletContext. - Como implementar a classe
MyFilterpara contar o número de visitas para cada endereço IP e atualizar oipVisitMap.
🏆 Conquistas
Após concluir este projeto, você será capaz de:
- Construir uma aplicação web simples usando Java Servlet e JSP.
- Usar o
ServletContextpara armazenar e recuperar dados em nível de aplicação. - Usar um
Filterpara 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.
Abra o arquivo
index.jsplocalizado no diretório/home/labex/project/IpProject/src/main/webapp.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.
Abra o arquivo
MyListener.javalocalizado no diretório/home/labex/project/IpProject/src/main/java/org/labex/listener.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.
Abra o arquivo
MyFilter.javalocalizado no diretório/home/labex/project/IpProject/src/main/java/org/labex/filter.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
Abra um terminal e navegue até o diretório
/home/labex/project/IpProject.Inicie o servidor Tomcat executando o seguinte comando:
mvn tomcat7:run
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.Atualize a página várias vezes para ver as contagens de visitas aumentarem.

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



