Inhaltsverzeichnis
Probleme mit der Anforderungsweiterleitung und dem Anforderungsumleitungspfad
-
Weiterleitung anfordern
Anfrageweiterleitung : Der Client sendet eine Anfrage und leitet nach der Verarbeitung durch den Server eine Front-End-Webseite oder ein anderes Servlet weiter, das im Wesentlichen dieselbe Anfrage ist und die Daten in der Anfragedomäne teilt.
Merkmale:
- Die Adressleiste des Browsers ändert sich nicht
- Egal wie oft sie weitergeleitet wurde, es ist die gleiche Anfrage
- Sie teilen Daten in der Anforderungsdomäne
- Kann an das WEB-INF-Verzeichnis weitergeleitet werden
- Kein direkter Zugriff auf externe Dateien
Die Standardadresse im Servlet des Tomcat-Servers: http://ip:8080/Projektname
Der Pfad beginnt mit einem Schrägstrich, um einen absoluten Pfad darzustellen, andernfalls handelt es sich um einen relativen Pfad
Der erste Schrägstrich im Pfad steht für: http://ip:8080/Projektname
Fall:
html:
<!DOCTYPE html> <html lang="de"> <head> <meta charset="UTF-8"> <title>Titel</title> </head> <body> <form action="/web02/servlet1 " method="get"> 账号: <input type="text" name="username"><br> 密码: <input type="password" name="password"><br> 兴趣爱好<input type=" radio" name="hobby" value="美女">美女<input type="radio" name="hobby" value="帅哥">帅哥<br> <input type="submit"> </form> < / Körper> </html>
Servlet:
public class servlet1 erweitert HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //Angeforderten Parameter abrufen String username = req.getParameter("username"); String password = req.get Parameter(" Kennwort "); System.out.println(Benutzername+"\t"+Kennwort); //Stempelanforderung 1 (globale Variablen setzen) req.setAttribute("key","complete"); //Anforderungsweiterleitung: kann nicht abgeschlossen werden Externer Sprung, Sie können auf interne Ressourcen zugreifen, //req.getRequestDispatcher("/servlet2").forward(req,resp); req.getRequestDispatcher("http://www.baidu.com").forward(req,resp ); // Umleitung anfordern. Externe Sprünge können implementiert werden. //bzw. sendRedirect("http://www. baidu.com"); } }
Fehler bei der Anfrageweiterleitung zum Zugriff auf externe Ressourcen:
HTTP-Status 404 - /web02/http://www.baidu.com
Geben Sie Statusbericht ein
Nachricht /web02/http://www.baidu.com
Beschreibung Die angeforderte Ressource ist nicht verfügbar.
Apache Tomcat/8.0.50
-
Umleitung anfordern
Anforderungsumleitung: Der Client sendet eine Anforderung an den Server, und der Server gibt dann eine neue Adresse an den Client zurück, um die neue Adresse anzufordern. Im Wesentlichen zwei verschiedene Anfragen.
Merkmale:
- Die Adressleiste des Browsers ändert sich
- Im Wesentlichen zwei verschiedene Anfragen
- Teilen Sie keine Daten in Anfragefeldern
- Zugriff auf Ressourcen unter WEB-INF nicht möglich
- Kann auf Ressourcen außerhalb des Projekts zugreifen
Fall:
Der Front-End-Code ist derselbe wie der vorherige
öffentliche Klasse servlet1 erweitert HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); 8"); / /Angeforderten Parameter abrufen String username = req.getParameter("username"); String password = req.getParameter("password"); System.out.println(username+"\t"+password); //Stempelanforderung 1 ( globale Variable setzen) req.setAttribute("key","complete"); //springe zu servlet2 // req.getRequestDispatcher("WEB-INF/form.jsp").forward(req,resp); // req.getRequestDispatcher("http://www.baidu.com").forward(req,resp); // resp.sendRedirect("WEB-INF/table.jsp"); resp.sendRedirect("http://www.baidu.com"); } }
Der Zugriff auf WEB-INF meldet einen Fehler und der Zugriff auf die Baidu-Website kann erfolgreich sein.
-
Probleme mit der Anforderungsweiterleitung und dem Anforderungsumleitungspfad
- Absoluter Pfad: Beginnen Sie mit /
Das / der Anforderungsumleitung bedeutet: http://server ip:port/
response.sendRedirect("/servlet2");
die Adresse lautet: http://localhost:8080/servlet2
Das / für die Anfrageweiterleitung bedeutet: http://server ip:port/project name
request.getRequestDispatcher("/servlet2").forward(request, response);
die Adresse lautet: http://localhost:8080/project name/ Dienst2
relativer Pfad:
Anfrageumleitung: response.sendRedirect("servlet2")
Generieren Sie einen relativen Pfad: http://localhost:8080/Projektname/servlet2
Weiterleitung anfordern: Die Generierung einer vollständigen URL bei einem relativen Pfad entspricht einer Weiterleitung