In der Webentwicklung gibt es einen großen Unterschied zwischen Weiterleitung und Umleitung.
Intuitiv ändert die Weiterleitung die URL-Adresse nicht, aber die Umleitung ändert die URL.
Dies ist nur ein Schein. Das Anforderungsobjekt und das Antwortobjekt in HttpServlet werden vom Server gekapselt und basierend auf den Parametern generiert, die vom Browser übergeben werden, wenn der Benutzer eine Webseite anfordert. Sobald die Anfrage vom Browser gestellt wird und der Server antwortet, haben die Anfrage und die Antwort das Ende ihrer Lebensdauer erreicht .
Bei Verwendung der Weiterleitung fordert der Browser nur einmal an, beim Server kann es jedoch zu mehreren Sprüngen kommen. Wenn die Weiterleitung während der serverseitigen Ausführung erfolgt, stoppt der Server die Ausführung der Aufgabe und gibt an, dass die Aufgabe die angegebene Adresse weiterleiten soll.
Wenn die Umleitung verwendet wird, stellt der Browser mehrere Anfragen an den Server. Wenn der Code auf der Serverseite ausgeführt wird und eine Umleitung erfolgt, wird der Browser benachrichtigt, auf eine andere URL zuzugreifen. Der Browser fordert die Ressource über die gesendete URL an.
Sehen Sie sich ein Stück Code an:
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>login</title></head><body> <form action="myServlet" method="post"> name :<input type="text" name="username"/><br/> <input type="submit" value="submit"/> </form></body></html>
Dies ist ein Stück JSP-Code. Wenn Sie auf „Senden“ klicken, wird das Formular an myServlet gesendet.
Die Schnittstelle sieht so aus:
public class MyServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = (String)request.getParameter("username"); request.setAttribute("welcome", "welcome!!!"); RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp"); rd.forward(request,response); } }
Das ist MySerlet. Wenn der Benutzer auf das Formular klickt, ruft der Server doPost auf In dieser Methode erfolgt die Seitenweiterleitung.
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>welcome</title></head><body> <%=request.getParameter("username")%> <br/> <%=request.getAttribute("welcome") %></body></html>
Dies ist der Code für Welcome.jsp.
Das Einreichungsergebnis ist:
Nachdem wir auf die Schaltfläche „Senden“ geklickt haben, können wir uns den Netzwerkanfrageprozess ansehen.
Es kann festgestellt werden, dass der Browser nur eine Anfrage an den Server gesendet hat.
Als nächstes schauen wir uns Weiterleitungen an.
Wenn Sie den Code von MyServlet ändern.
public class MyServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = (String)request.getParameter("username"); request.setAttribute("welcome", "welcome!!!");// RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp");// rd.forward(request,response); response.sendRedirect("welcome.jsp"); } }
Sie können sehen, dass das Ergebnis ist:
Und der Browser-Item-Server hat zwei Anfragen gesendet:
von oben Das Ergebnis ist, dass nach der Umleitung alle Inhalte der Willkommensseite null sind, da eine weitere Anfrage initiiert wird. Da es sich bei der Weiterleitung um dasselbe Anforderungsobjekt und Antwortobjekt handelt, können nicht nur die vom Browser angeforderten Parameter, sondern auch die in die Anforderung eingegebenen Attributwerte abgerufen werden.
Tatsächlich ist aus dem Code ersichtlich, dass die sendRedirect()-Methode die Antwortmethode des HttpServletResponse-Objekts ist. Da die Methode des Antwortobjekts aufgerufen wird, zeigt dies an, dass die gesamte Anforderung beendet ist. und der serverseitige Elementclient gibt das Ausführungsergebnis zurück. Die getRequestDispatcher-Methode ist eine Methode des Anforderungsobjekts, die angibt, dass die Anforderung noch gestellt wird, sodass das Ergebnis nicht sofort an den Browser zurückgegeben wird, sondern weiterhin seine Weiterleitungsaufgaben ausführt.
Eines muss erklärt werden Ob es sich um die in der Weiterleitungsmethode oder der sendRedirect-Methode übergebene URL handelt, müssen Sie darauf achten bedeutet, dass diese URL eine Anfrage für das Stammverzeichnis des Servlet-Containers ist, also localhost:8080. Wenn sie nicht mit „“ beginnt, bedeutet dies, dass die Anfrageadresse relativ zur aktuellen Anfrage-URL adressiert ist.
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>login</title></head><body> <!--这里改成了绝对地址 --> <form action="/myServlet" method="post"> name :<input type="text" name="username"/><br/> <input type="submit" value="submit"/> </form></body></html>
Wenn ich erneut auf „Senden“ klicke:
Die Anfrageadresse, die nicht mit „“ beginnt, lautet:
Weiterleiten Das Modell ist:
Das Umleitungsmodell ist:
In diesem Artikel wird die Weiterleitung und Umleitung von Webseiten erläutert Für den Inhalt besuchen Sie bitte die chinesische Website „Follow php“.
Verwandte Empfehlungen:
Einfache PHP+MySQL-Paging-Klasse
Zwei Baumarray-Konstruktoren ohne Rekursion
HTML in Excel konvertieren und Druck- und Downloadfunktionen realisieren
Das obige ist der detaillierte Inhalt vonWeiterleitung und Umleitung von Webseiten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!