Подсчет количества доступов по IP

JavaBeginner
Практиковаться сейчас

Введение

В этом проекте вы научитесь создавать простое приложение для отслеживания 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-адресов и количества их посещений.

  1. Откройте файл index.jsp, расположенный в директории /home/labex/project/IpProject/src/main/webapp.

  2. Добавьте следующий код в файл 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.

  1. Откройте файл MyListener.java, расположенный в директории /home/labex/project/IpProject/src/main/java/org/labex/listener.

  2. Добавьте следующий код в класс 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.

  1. Откройте файл MyFilter.java, расположенный в директории /home/labex/project/IpProject/src/main/java/org/labex/filter.

  2. Добавьте следующий код в класс 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 являются потокобезопасными.

Тестировать приложение

  1. Откройте терминал и перейдите в директорию /home/labex/project/IpProject.

  2. Запустите сервер Tomcat, выполнив следующую команду:

mvn tomcat7:run
  1. Откройте веб-браузер и перейдите по адресу http://127.0.0.1:8080. Вы должны увидеть страницу IP Visitor Tracker с IP-адресами и количеством их посещений.

  2. Обновите страницу несколько раз, чтобы увидеть увеличение количества посещений.

результат проекта

Резюме

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

✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться