Zählen der Zugangszahlen nach IP

JavaBeginner
Jetzt üben

Einführung

In diesem Projekt lernst du, wie du eine einfache IP-Besucherverfolgungsanwendung mit Java Servlet und JSP aufbaust. Die Anwendung wird die IP-Adressen der Besucher, die die Website zugreifen, und die Anzahl der Male verfolgen, wie oft jede IP-Adresse besucht wurde.

Vorschau

Vorschau des Projekts

🎯 Aufgaben

In diesem Projekt wirst du lernen:

  • Wie du die index.jsp-Datei implementierst, um die IP-Adressen und ihre Besuchszahlen anzuzeigen.
  • Wie du die MyListener-Klasse implementierst, um die ipVisitMap in den ServletContext zu erstellen und zu speichern.
  • Wie du die MyFilter-Klasse implementierst, um die Anzahl der Besuche für jede IP-Adresse zu zählen und die ipVisitMap zu aktualisieren.

🏆 Errungenschaften

Nach Abschluss dieses Projekts wirst du in der Lage sein:

  • Eine einfache Webanwendung mit Java Servlet und JSP zu bauen.
  • Den ServletContext verwenden, um anwendungsübergreifende Daten zu speichern und abzurufen.
  • Ein Filter verwenden, um eingehende Anfragen zu interceptieren und zu verarbeiten.
  • Synchronisation verwenden, um sicherzustellen, dass auf gemeinsam genutzte Ressourcen thread-sicher zugegriffen wird.

Implementiere die index.jsp-Datei

In diesem Schritt lernst du, wie du die index.jsp-Datei implementierst, um die IP-Adressen und ihre Besuchszahlen anzuzeigen.

  1. Öffne die index.jsp-Datei im Verzeichnis /home/labex/project/IpProject/src/main/webapp.

  2. Füge den folgenden Code zur index.jsp-Datei hinzu:

<%@ page import="java.util.Map" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>IP-Besucherverfolger</title>
</head>
<body>
<h1>IP-Besucherverfolger</h1>
<table border="1">
    <tr>
        <th>IP-Adresse</th>
        <th>Besuchszahl</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>

Dieser Code holt die ipVisitMap aus dem ServletContext und zeigt die IP-Adressen und ihre Besuchszahlen in einer Tabelle an.

Implementiere die MyListener-Klasse

In diesem Schritt lernst du, wie du die MyListener-Klasse implementierst, um die ipVisitMap zu erstellen und im ServletContext zu speichern.

  1. Öffne die MyListener.java-Datei im Verzeichnis /home/labex/project/IpProject/src/main/java/org/labex/listener.

  2. Füge den folgenden Code zur MyListener-Klasse hinzu:

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
    }
}

Dieser Code erstellt eine neue HashMap namens ipVisitMap, um die IP-Adressen und ihre Besuchszahlen zu speichern, und setzt sie dann als Attribut des ServletContext ein.

Implementiere die MyFilter-Klasse

In diesem Schritt lernst du, wie du die MyFilter-Klasse implementierst, um die Anzahl der Besuche für jede IP-Adresse zu zählen und die ipVisitMap zu aktualisieren.

  1. Öffne die MyFilter.java-Datei im Verzeichnis /home/labex/project/IpProject/src/main/java/org/labex/filter.

  2. Füge den folgenden Code zur MyFilter-Klasse hinzu:

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 {
        // Initialisierungscode, falls erforderlich
    }

    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() {
        // Aufräumcode, falls erforderlich
    }
}

Dieser Code holt die ipVisitMap aus dem ServletContext, erhält die IP-Adresse des aktuellen Clients und aktualisiert dann die ipVisitMap entsprechend. Der synchronized-Block stellt sicher, dass die Updates der ipVisitMap thread-sicher sind.

Teste die Anwendung

  1. Öffne ein Terminal und navigiere zum Verzeichnis /home/labex/project/IpProject.

  2. Starte den Tomcat-Server, indem du folgenden Befehl ausführst:

mvn tomcat7:run
  1. Öffne einen Webbrowser und navigiere zu http://127.0.0.1:8080. Du solltest die IP-Besucherverfolger-Seite mit den IP-Adressen und ihren Besuchszahlen sehen.

  2. Aktualisiere die Seite mehrmals, um die Besuchszahlen zu erhöhen.

Projektresultat

Zusammenfassung

Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Labore absolvieren, um deine Fähigkeiten zu verbessern.

✨ Lösung prüfen und üben✨ Lösung prüfen und üben✨ Lösung prüfen und üben✨ Lösung prüfen und üben