Die Hauptfunktion von Servlet besteht darin, Kundenanfragen zu verarbeiten und zu antworten. Aus diesem Grund erstellt der Webcontainer für jede Anfrage zwei Objekte, bevor er Service () aufruft, nämlich httpServletRequest und httpServletResponse. Wenn HttpServletRequest HTTP -Anforderungsnachrichten verkauft, verkauft HttpServletResponse HTTP -Antwortmeldungen. Es ist zu beachten, dass während des Betriebs des Webservers jedes Servlet nur ein Instanzobjekt erstellt. Jede Anforderung ruft jedoch die Methode der Servlet -Instanz auf (ServletRequest REQ, ServletResponse Res). Hier ist HttpServletRequest eine Unterklasse von ServletRequest, und HttpServletResponse ist eine Unterklasse von ServletResponse.
Das Vererbungsbeziehungsdiagramm der HttpServletRequest- und HttpServletResponse -Schnittstelle lautet wie folgt:
1. HttpServletResponse
Die HttpServletResponse -Schnittstelle erbt von der ServletResponse -Schnittstelle. Da HTTP -Antwortmeldungen in drei Teile unterteilt sind: Statuszeile, Antwortmeldung und Meldungsgremium, definiert die HTTPServletResponse -Schnittstelle eine Methode zum Senden eines Antwortstatuscode, der Antwortmeldung und der Antwortmeldung an den Client. Obwohl es in der HTTPServletResponse -Schnittstelle viele Methoden gibt, verwenden wir nur einige häufig verwendete. Wenn Sie andere Methoden verwenden, können Sie den Quellcode oder verwandte Informationen der Antwort lesen.
Senden Sie Statuscode -zubezogene Funktionen
Methode Beschreibung Public void setStatus (int sc) Legt den Statuscode für die Antwortmeldung fest. Der Webserver generiert standardmäßig eine Statuszeile mit einem Statuscode von 200. Public void sendError (int sC) sendet einen Statuscode, der die Fehlermeldung angibt. Die zweite Methode fügt außerdem eine Textnachricht hinzu, um die Beschreibung aufzufordern.öffentlicher Leere SendError (int Sc, String msg)
Antwort Meldung Header Senden Sie zu Verwandten Funktionen
Methode Beschreibung public void addheader (Zeichenfolge Name, Zeichenfolgewert) Legt das Feld HTTP -Antwortheader fest, der Name gibt den Feldnamen an und Wert gibt den Feldwert an. addHeader can add the response header field with the same name, setHeader will override the header field with the same name public void setHeader(String name, String value) public void setContentLength(int len) sets the size of the entity content of the response message, in bytes, that is, sets the value of the Content-Length field public void setContentType(String type) sets the MIME type of the Servlet output content, that IS, legt den Wert des Feldtyps-Feldes Beachten Public Void SetCharacactercoding (String charSet) fest , das die Ausgangsinhaltszeichen-Codierung festlegt, dh den Wert des Feldes vom Inhaltstyp. Sie , dass die Priorität dieser Methode höher ist
Senden Sie Antwortnachrichten mit den Funktionen der Begründung der Begründung
| Verfahren | veranschaulichen |
| öffentliches ServletoutputStream GetOutputStream () | Holen Sie sich den Byte -Ausgangsstrom des HttpServletResponse -ServletOutputstram -Typs |
| öffentlicher Pressewriter GetWriter () | Holen Sie sich den Character Output -Stream -Servletwriter -Typ von httpServletResponse |
Chinesische Ausgabe verstümmelt Problem
Daten in Computern werden in binärer Form gespeichert. Wenn der Text übertragen wird, tritt eine Umwandlung zwischen Bytes von Zeichen auf. Die Konvertierung zwischen Zeichen und Bytes wird über eine Code -Such -Tabelle abgeschlossen. Der Prozess des Konvertierens von Zeichen in Bytes wird als Codierung bezeichnet, und der Prozess des Konvertierens von Bytes in Zeichen wird als Dekodierung bezeichnet. Wenn die für die Codierung und Dekodierung verwendeten Codetabellen unterschiedlich sind, treten Probleme mit verstümmelten Code auf.
HINWEIS: Bei der Codierung des Zeichenausgangsstroms des HttpServletResponse-Objekts ist der Standard-Codieren der Standardeinstellung ISO 8859-1. Diese Codierungsmethode ist mit Chinesen unvereinbar. Zum Beispiel wird "China" als "63 63" codiert (Zeichen, die in der ISO 8959-1-Code-Tabelle nicht zu finden sind, werden 63 angezeigt). Wenn der Browser die empfangenen Daten dekodiert, wird standardmäßig GB2312 verwendet, "63" zu "?" Dekodieren, und der Browser entschlüsselt die beiden Zeichen "China" zu "??".
Beispiel für ein Beispiel für HttpServletResponse
Paket zzz; import Java.io.ioException; import Java.io.printwriter; import Javax.servlet.http.httpServlet; importieren Sie javax.servlet.http.httpServletrequest; importieren javax.servlet.http.httpletPletRetResponse; DOGGE (httpServletRequest-Anfrage, HttpServletResponse-Antwort) löst IoException aus {// Die Antwortnachricht einsetzt, nachdem "China", die "verstümmelte Antwort. Dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) löscht ioException {this.doget (Request, Antwort);Manchmal stoßen Sie auf das Problem des regelmäßigen Springens von Seiten. Das Feld für Aktualisierungsheader in HTTP kann den Browser so benachrichtigen, dass sie innerhalb einer bestimmten Zeit automatisch aktualisiert und auf andere Seiten springen, und die Webseite wird regelmäßig aktualisiert und auf die angegebene Seite springen.
Paket zzz; import Java.io.ioException; import Java.io.printwriter; import Javax.servlet.http.httpServlet; importieren Sie javax.servlet.http.httpServletrequest; importieren javax.servlet.http.httpletPletRetResponse; DOGGE (httpServletRequest-Anforderung, httpServletResponse-Antwort) löst IOException aus {// Antwortnachricht codieren. response.setheader ("refresh", "2; url = http: //www.baidu.com"); Printwriter out = response.getWriter (); out.println ("Hallo China, springe in 2 Sekunden nach Baidu ..."); } @Override public void dopost (httpServletRequest Request, httpServletResponse -Antwort) löst ioException {this.doget (Request, Antwort) aus; }}2. HttpServletRequest
Die HttpServletRequest -Schnittstelle erbt die ServletRequest -Schnittstelle und wird speziell für eingekapselte HTTP -Anforderungsnachrichten verwendet. Da HTTP -Anforderungsinformationen drei Teile enthalten: Anforderungszeile, Anforderungsheader und Anforderungsorganisation, definiert die HTTPServletRequest -Schnittstelle verwandte Methoden für die Erfassung von Anforderungszeile, Anforderungsheader und Anforderungsbehörde.
Verwandte Methoden zum Erhalten von Anforderungszeilen
| Verfahren | veranschaulichen |
| öffentliche Zeichenfolge getMethod () | Holen Sie sich HTTP -Anforderungsmethoden, Post, Get usw. |
| öffentliche String GetRequesturi () | Holen Sie sich den Teil des Ressourcennamens in der Anforderungszeile |
| öffentliche Zeichenfolge GetQueryString () | Holen Sie sich den Parameterteil in der Anforderungszeile |
| öffentliche String GetProtocol () | Holen Sie sich den Protokollnamen und die Version in der Anforderungszeile, wie z. B. HTTP 1.1 |
| public String getContextPath () | Holen Sie sich den Pfad zur Webanwendung in der Anforderungs -URL |
Tatsächlich ist die Methode der Anforderungszeile aus dem Method -Namen zu ersichtlich, sodass ich sie hier nacheinander nicht veröffentlichen werde.
Verwandte Methoden zum Abrufen von Anforderungsnachrichtenüberschriften
| Verfahren | veranschaulichen |
| Public String Getheader (String -Name) | Erhalten Sie den Wert des angegebenen Feldes, wenn kein Null zurückgegeben wird, wenn mehrere Renditen der erste Wert vorliegen |
| Public Enumeration <String> Getheaders (String -Name) | Gibt ein Aufzählungs -Sammlungsobjekt mit dem angegebenen Feld zurück |
| öffentliche Aufzählung <String> Getheadernames () | Gibt ein Aufzählungs -Sammlungsobjekt zurück, das alle Felder enthält |
| öffentliche Zeichenfolge getContentType () | Holen Sie sich den Wert des Feldes vom Inhaltstyp |
Drucken Sie alle Werte des Feldes Anforderungsheader aus
Paket Zzz; import Java.io.ioException; import Java.io.printwriter; import Java.util.enumeration; import Javax.servlet.http.httpServlet; importieren javax.servlet.http.httpletRequest; HttpServlet {@Override public void dodget (httpServletRequest-Anforderung, httpServletResponse-Antwort) löscht ioException {// Antwortnachricht codieren reaktionscodieren. Printwriter out = response.getWriter (); Enumeration <string> names = Request.Getheadernames (); while (names.hasmoreElements ()) {String name = names.nextElement (); String value = Request.Getheader (Name); out.println (name + ":" + value + "</br>"); }} @Override public void dopost (httpServletRequest Request, httpServletResponse -Antwort) löst ioException {this.doget (request, Antwort) aus; }}Verwandte Methoden zum Erhalten der Anforderungskörper
Methode Beschreibung öffentliches ServletInputStream getInputStream () Ruft das angeforderte ServletInputStream -Objekt ab. Wenn der Entitätsinhalt nicht-Text ist, können Sie die Anforderungsbody-Meldung nur über die GetInputStream-Methode abrufen. Der angeforderte BufferedReader GetReader () erhält das angeforderte BufferedReader -Objekt. Dieses Objekt konvertiert die Entitätsinhalt -Byte -Daten in eine Textzeichenfolge, die von dem angegebenen Zeichensatz codiert wird.
Erhalten Sie Anforderungsparameter
| Verfahren | veranschaulichen |
| öffentliche Zeichenfolge GetParameter (String -Name) | Erhalten Sie den angegebenen Parameterwert und geben Sie Null ohne diesen Parameter zurück |
| Public Enumeration <String> getParameternames () | Gibt ein Aufzählungsobjekt zurück, das alle Parameternamen enthält |
| public String [] getParameterervalues (String -Name) | In der HTTP -Anforderung können mehrere gleiche Parameter vorhanden sein, um alle Parameterwerte zu erhalten, die demselben Parameternamen entsprechen. |
3. RequestDispatcher -Schnittstelle
Wenn vom Client eine Webressource angefordert wird und der Server eine andere Ressource wie die Verarbeitung einer Anforderung benachrichtigt, zusätzlich zur Verwendung der Funktion SENDRETRECT (), um eine Umleitung zu implementieren, kann sie auch über das Instanzobjekt des RequestDispatcher -Interface implementiert werden. Eine Methode zum Abholen des RequestDispatcher -Objekts ist in der ServletRequest -Schnittstelle definiert - getRequestDispatcher (String -Pfad), das das von einem bestimmte Pfad angegebene RequestDispatcher -Objekt der Ressource zurückgibt. Der Parameterpfad muss mit "/" beginnen, um das Stammverzeichnis der aktuellen Webanwendung darzustellen, dh der Pfad Pfad muss sich in diesem Webprogramm befinden, andernfalls wird eine Ausnahme stattfinden.
Methoden in der RequestDispatcher -Schnittstelle
| Verfahren | Funktion |
| Öffentliche Void Forward (ServletRequest Anfrage, ServletResponse -Antwort) | Übergeben |
| öffentliche Leere inklusive (ServletRequest Request, ServletResponse -Antwort) | Wird verwendet, um andere Ressourcen als aktuellen Antwortinhalt einzuschließen |
Das obige ist die detaillierte Erläuterung der vom Editor vorgestellten Java -Webanforderung und der Antwortbeispiele. Ich hoffe, es wird für alle hilfreich sein!