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

🎯 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 dieipVisitMapin denServletContextzu erstellen und zu speichern. - Wie du die
MyFilter-Klasse implementierst, um die Anzahl der Besuche für jede IP-Adresse zu zählen und dieipVisitMapzu aktualisieren.
🏆 Errungenschaften
Nach Abschluss dieses Projekts wirst du in der Lage sein:
- Eine einfache Webanwendung mit Java Servlet und JSP zu bauen.
- Den
ServletContextverwenden, um anwendungsübergreifende Daten zu speichern und abzurufen. - Ein
Filterverwenden, 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.
Öffne die
index.jsp-Datei im Verzeichnis/home/labex/project/IpProject/src/main/webapp.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.
Öffne die
MyListener.java-Datei im Verzeichnis/home/labex/project/IpProject/src/main/java/org/labex/listener.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.
Öffne die
MyFilter.java-Datei im Verzeichnis/home/labex/project/IpProject/src/main/java/org/labex/filter.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
Öffne ein Terminal und navigiere zum Verzeichnis
/home/labex/project/IpProject.Starte den Tomcat-Server, indem du folgenden Befehl ausführst:
mvn tomcat7:run
Ö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.Aktualisiere die Seite mehrmals, um die Besuchszahlen zu erhöhen.

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



