Schauen wir uns ein Flussdiagramm an:
Der Prozess der Serververarbeitungsanforderungen:
(1) Jedes Mal, wenn der Server eine Anfrage erhält, öffnet er einen neuen Thread für die Anforderung.
(2) Der Server verkapuliert die Anforderungsdaten des Clients in das Anforderungsobjekt und die Anforderung ist der Spediteur der Anforderungsdaten!
(3) Der Server erstellt auch ein Antwortobjekt, das mit dem Client verbunden ist und zum Senden einer Antwort an den Client verwendet werden kann.
Wie aus dem Flow -Diagramm ersichtlich ist, sind in der Anfrage und Antwort von Javaweb die beiden wichtigsten Parameter Anforderung und Antwort, die in der Methode des Service () des Servlets enthalten sind.
1. Antwortkonzept:
Die Antwort ist ein Parameter der servlet.service -Methode und vom Typ javax.servlet.http.httpServletResponse. Wenn der Client jede Anforderung stellt, erstellt der Server ein Antwortobjekt und übergibt es an die Methode von Servlet.Service (). Das Antwortobjekt wird verwendet, um auf den Client zu reagieren, was bedeutet, dass die Verwendung des Antwortobjekts in der Methode service () die Antwortarbeit an den Client vervollständigen kann.
Die Funktionen des Antwortobjekts sind in die folgenden vier Typen unterteilt:
(1) Setzen Sie Informationen zur Antwort Header
(2) Statuscode senden
(3) Setzen Sie den Antworttext
(4) Umleitung
2. Antwortantworttext
Die Antwort ist ein Antwortobjekt. Der Reaktionsfluss des Reaktionskörpers (Reaktionskörper) kann verwendet werden, um den Reaktionskörper an den Kunden auszugeben. Repsonse liefert insgesamt zwei Reaktionsablaufobjekte:
(1) Printwriter out = response.getWriter (): Charakterstrom erhalten;
(2) ServletOutputStream out = response.getOutputStream (): Holen Sie sich den Byte -Stream;
Wenn der Antwortkörperinhalt ein Zeichen ist, verwenden Sie natürlich die Antwort.getWriter (). Wenn der Antwortinhalt beispielsweise Bytes ist. Zum Beispiel können Sie beim Herunterladen reagieren.getOutputStream () verwenden.
Beachten Sie , dass in einer Anfrage beide Streams nicht gleichzeitig verwendet werden können! Das heißt, Sie verwenden entweder Reply.getWriter () oder Antwort.getOutputStream (), aber Sie können nicht beide Streams gleichzeitig verwenden. Andernfalls wird eine IllegalStateException geworfen.
3. Setzen Sie die Informationen zur Antwort Header
Sie können die Methode Setheader () des Antwortobjekts verwenden, um den Antwortheader festzulegen! Der mit dieser Methode eingestellte Antwortkopf wird schließlich an den Client -Browser gesendet!
(1) Antwort. Die Funktion dieses Headers besteht darin, dem Browser mitzuteilen, dass der Antwortinhalt HTML-Typ ist und als UTF-8 codiert wird. Gleichzeitig wird die Charakterstromcodierung der Antwort auf UTF-8 eingestellt, dh Response.setcharaceterCoding ("UTF-8");
(2) Response.setheader ("refresh", "5; url = http: //www.baidu.com"): Es wird nach 5 Sekunden automatisch auf die Homepage von Baidu springen.
4. Setzen Sie den Statuscode und andere Methoden
(1) Antwort.
(2) Antwort.
(3) Antwort.SetStatus (200): Setzen Sie den Statuscode;
(4) Antwort.
5. Redirect (****** Schlüssel *******)
5.1 Was ist Umleitung (zwei Anfragen)
Wenn Sie http://www.sun.com besuchen, werden Sie feststellen, dass die URL in der Browser -Adressleiste http://www.oracle.com/us/sun/index.htm wird, was die Umleitung ist. Die Umleitung ist, wenn der Server den Browser benachrichtigt, um auf eine andere Adresse zuzugreifen, dh eine andere Anfrage auszustellen.
5.2 Wie kann ich die Umleitung abschließen?
Antwort: Der Statuscode für die Umleitung beträgt 302. Wir verwenden das Antwortobjekt zuerst, um den Statuscode von 302 an den Browser zu senden, und setzen dann einen Speicherort, dh eine verfügbare URL, und der Browser greift auf die neue URL zu, um die Umleitung zu realisieren.
Zum Beispiel:
Die öffentliche Klasse ASERVLET erweitert HttpServlet (public void dodget (httpServletRequest Request, httpServletResponse -Antwort). response.setheader ("Ort", "http://www.baidu.com"); }}Der Zweck des obigen Code ist: Nach dem Zugriff auf das ASERVLET wird der Browser benachrichtigt, um auf die Baidu -Homepage umzuleiten. Nachdem der Client -Browser den Antwortcode von 302 analysiert hat, weiß er, dass der Server ihn umleiten lässt, sodass er sofort den Speicherort der Antwortheader erhalten und anschließend eine zweite Anfrage ausstellt.
Es gibt auch eine schnelle Umleitungsmethode, dh die Antwort der Antwort. Sendredirect () -Methode. Beispielsweise können die beiden Sätze im obigen Beispiel durch response.sendredirect ("http://www.baidu.com") ersetzt werden.
Anfrage wird alle Anforderungsdaten vom Client einkapsuliert
1. Überblick über Anfrage
Anforderung ist ein Parameter der Methode servlet.service () und vom Typ javax.servlet.http.httpServletRequest. Wenn der Client jede Anforderung stellt, erstellt der Server ein Anforderungsobjekt und umfasst die Anforderungsdaten in die Anforderung und übergibt es dann an die Methode service (), wenn die methode des servlet.service () aufgerufen wird, die zeigt, dass die Anforderungsdaten über das Anforderungsobjekt in der Service () -Methode erhalten werden können.
Wie in der Abbildung gezeigt:
Die Funktion der Anforderung kann in die folgenden Typen unterteilt werden:
(1) die Anforderungsheaderdaten zusammenfassen;
(2) Kapitulieren Sie die Anforderungstextdaten. Wenn es sich um eine Get -Anfrage handelt, gibt es keinen Text;
(3) Anforderung ist ein Domänenobjekt, das als Karte hinzugefügt und abgerufen werden kann.
(4) Anfrage bietet Anforderungswesungs- und Anforderungseinschlussfunktionen.
2. Domänenmethode anfordern
Anfrage ist ein Domain -Objekt! In Javaweb gibt es vier Domänenobjekte, unter denen ServletContext ein Domänenobjekt ist, das nur ein ServletContext -Objekt in der gesamten Anwendung erstellt. Fordern Sie eine der Anfragen an, die Daten in einer Anfrage freigeben können.
Eine Anfrage erstellt ein Anforderungsobjekt. Wenn in einer Anfrage mehrere Servlets erlebt wurden, können mehrere Servlets Anfragen zum Freigeben verwenden. Jetzt wissen wir nicht, wie wir in einer Anfrage mehrere Servlets durchgehen sollen.
Hier ist die Domänenmethode der Anfrage:
(1) void setAttribute (String -Name, Objektwert): Zum Speichern eines Objekts kann auch ein Domänenattribut gespeichert werden, z. B. ServletContext.setAttribute ("xxx", "xxx") Beachten Sie, dass der letzte Wert überschrieben wird, wenn die Methode mehrfach aufgerufen wird und der gleiche Name verwendet wird, was der Karte entspricht.
(2) Object GetAtTribute (String -Name): Wird verwendet, um die Daten in der Anforderung zu erhalten. Es muss vor dem Erhalten gespeichert werden. Zum Beispiel: String value = (String) request.getAttribute ("xxx"); um das Domänenattribut mit dem Namen XXX zu erhalten;
(3) void removeAttribute (String -Name): Wird verwendet, um das Domänenattribut in der Anforderung zu entfernen. Wenn das vom Parameternamen angegebene Domänenattribut nicht vorhanden ist, tut diese Methode nichts;
(4) Aufzählung von GetAttributenames (): Erhalten Sie die Namen aller Domänenattribute;
3. Die Parameter auf Anfrage übergeben
Es gibt zwei häufigste Möglichkeiten, Parameter für den Client zu übergeben:
(1) direkte Eingabe aus der Browser -Adressleiste: Es muss eine Get -Anfrage sein.
(2) Hyperlink: Es muss eine Get -Anfrage sein;
(3) Form: Kann erhalten oder post sein, was vom Methodenattributwert von <form> abhängt;
Der Unterschied zwischen Get -Anfrage und Postanfrage:
(1) Anfrage erhalten:
Die Anforderungsparameter werden in der Adressleiste des Browsers angezeigt, sodass sie nicht sicher ist.
Die Längengrenze des Anforderungsparameters liegt innerhalb von 1K;
Die GET -Anforderung hat keine Anforderungsbehörde, sodass die Codierung des Parameters nicht über Request.Setcharactercoding () festgelegt werden kann;
(2) Anfrage nach Post:
In den Anforderungsparametern wird die Adressleiste des Browsers nicht angezeigt, die relativ sicher ist.
Die Länge des angeforderten Parameters ist keine Begrenzung.
4. Fordern Sie die Weiterleitung und Anfrage (****** Key *******)
Unabhängig davon, ob es sich um eine Anfrage weiterleitet oder eine Anfrage aufgenommen hat, bedeutet dies, dass mehrere Servlets gemeinsam eine Anfrage verarbeiten. Zum Beispiel übernimmt Servlet1 die Anfrage und leitet sie dann Servlet1 an Servlet2 weiter, um die Anfrage fortzusetzen.
Fordern Sie die Weiterleitung und Anfrage ein, einschließlich
RequestDispatcher rd = request.getRequestDispatcher ("/myServlet"); Verwenden Sie die Anfrage, um das RequestDispatcher -Objekt abzurufen. Der Parameter der Methode ist der Servletpfad des weitergeleiteten oder enthaltenen Servlets.
Forderungsweiterung: Rd.forward (Anfrage, Antwort);
Die Anfrage enthält: rd.include (Anfrage, Antwort);
Manchmal erfordert eine Anfrage mehrere Servlets, um zusammenzuarbeiten, sodass Sie in einen Servlet zu einem anderen springen müssen!
> Eine Anfrage umfasst mehrere Servlets und erfordert Weiterleitungen und Inklusion.
> Anfrage weiterleitet: Die Antwortbehörde wird vom nächsten Servlet abgeschlossen! Das aktuelle Servlet kann den Antwortheader einstellen! (Lassen Sie den Kopf, aber nicht den Körper) dh, der entsprechende Kopf, der vom aktuellen Servlet eingestellt ist, ist gültig und der entsprechende Körper ist ungültig.
> Die Anfrage enthält: Die Antwortbehörde wird nicht von zwei Servlets abgeschlossen! (Bleiben Sie alle) Alle sind gültig.
> Egal, ob es sich um eine Anfrage weiterleitet oder eine Anfrage enthält, sie liegt im Rahmen einer Anfrage! Verwenden Sie dieselbe Anfrage und Antwort!
Forderungsweiterung und Anfrage enthalten Vergleich:
(1) Wenn die Anforderung an das BServlet im ASERVLET weitergeleitet wird, darf der Antwortkörper nicht im ASERVLET ausgegeben werden, dh der Antwort.getWriter () und Antwort.getOutputStream () kann nicht mehr an den Client ausgegeben werden. Diese Arbeit sollte vom BServlet erledigt werden; Wenn es zur Aufnahme der Anfrage verwendet wird, gibt es keine solche Einschränkung.
(2) Obwohl die Anforderungsweiterleitung den Antwortkörper nicht ausgeben kann, kann der Antwortheader immer noch festgelegt werden, z.
(3) die meisten Anfragen werden auf JSP -Seiten angewendet, um die Verschmelzung mehrerer Seiten zu vervollständigen.
(4) Die Anfrage wird hauptsächlich in Servlets angewendet, und das Weiterleitungsziel besteht hauptsächlich aus JSP -Seiten.
Wie in der Abbildung gezeigt:
Vergleich der Anfrageweiterleitung und Umleitung
(1) Die Anfrage wird eine Anfrage beträgt, während die Umleitung zwei Anfragen sind.
(2) Nach der Anfrage wird die Browseradressleiste nicht geändert, aber die Umleitung ändert sich, da die Umleitung zwei Anfragen beträgt.
(3) Das Ziel, eine Weiterleitung zu beantragen, kann nur die Ressourcen in dieser Anwendung sein, und das Ziel der Umleitung kann andere Anwendungen sein.
(4) Die Anfrage -Weiterleitungsmethode für Aservlet und Bservlet ist dieselbe, dh beide sind oder beide Beiträge sind Posts, da die Anfrage eine Anfrage ist.
(5) Die zweite Anfrage nach Umleitung muss erhalten;
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.