Введение
В этом проекте вы научитесь создавать простое приложение для отслеживания IP-адресов посетителей с использованием Java Servlet и JSP. Приложение будет отслеживать IP-адреса посетителей, доступа к веб-сайту, и количество раз, которое каждый IP-адрес был посещён.
Предварительный просмотр

🎯 Задачи
В этом проекте вы научитесь:
- Как реализовать файл
index.jspдля отображения IP-адресов и количества их посещений. - Как реализовать класс
MyListenerдля создания и храненияipVisitMapвServletContext. - Как реализовать класс
MyFilterдля подсчёта количества посещений для каждого IP-адреса и обновленияipVisitMap.
🏆 Достижения
После завершения этого проекта вы сможете:
- Создать простое веб-приложение с использованием Java Servlet и JSP.
- Использовать
ServletContextдля хранения и извлечения данных на уровне приложения. - Использовать
Filterдля перехвата и обработки входящих запросов. - Использовать синхронизацию для обеспечения потокобезопасного доступа к общими ресурсам.
Реализовать файл index.jsp
В этом шаге вы научитесь реализовать файл index.jsp для отображения IP-адресов и количества их посещений.
Откройте файл
index.jsp, расположенный в директории/home/labex/project/IpProject/src/main/webapp.Добавьте следующий код в файл
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>
Этот код извлекает ipVisitMap из ServletContext и отображает IP-адреса и количество их посещений в таблице.
Реализовать класс MyListener
В этом шаге вы научитесь реализовать класс MyListener для создания и хранения ipVisitMap в ServletContext.
Откройте файл
MyListener.java, расположенный в директории/home/labex/project/IpProject/src/main/java/org/labex/listener.Добавьте следующий код в класс
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
}
}
Этот код создает новую HashMap под названием ipVisitMap для хранения IP-адресов и количества их посещений, а затем устанавливает ее в качестве атрибута ServletContext.
Реализовать класс MyFilter
В этом шаге вы научитесь реализовать класс MyFilter для подсчета количества посещений для каждого IP-адреса и обновления ipVisitMap.
Откройте файл
MyFilter.java, расположенный в директории/home/labex/project/IpProject/src/main/java/org/labex/filter.Добавьте следующий код в класс
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
}
}
Этот код извлекает ipVisitMap из ServletContext, получает IP-адрес текущего клиента, а затем обновляет ipVisitMap соответственно. Блок synchronized гарантирует, что обновления ipVisitMap являются потокобезопасными.
Тестировать приложение
Откройте терминал и перейдите в директорию
/home/labex/project/IpProject.Запустите сервер Tomcat, выполнив следующую команду:
mvn tomcat7:run
Откройте веб-браузер и перейдите по адресу
http://127.0.0.1:8080. Вы должны увидеть страницу IP Visitor Tracker с IP-адресами и количеством их посещений.Обновите страницу несколько раз, чтобы увидеть увеличение количества посещений.

Резюме
Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.



