Servlets - HTTP-Statuscodes
Das Format der HTTP-Anforderungs- und HTTP-Antwortnachrichten ist ähnlich und hat folgende Struktur:
Eine anfängliche Statuszeile + CRLF (Wagenrücklauf + Zeilenvorschub, dh neue Zeile)
Keine oder mehr Kopfzeilen + CRLF
Eine leere Zeile, dh eine CRLF
Ein optionaler Nachrichtentext wie Datei, Abfragedaten oder Abfrageausgabe.
Ein Server-Antwortheader sieht beispielsweise wie folgt aus:
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
Die Statuszeile besteht aus der HTTP-Version (im Beispiel HTTP / 1.1), einem Statuscode (im Beispiel 200) und einer sehr kurzen Nachricht, die dem Statuscode entspricht (im Beispiel OK).
Im Folgenden finden Sie eine Liste der HTTP-Statuscodes und der zugehörigen Nachrichten, die möglicherweise vom Webserver zurückgegeben werden.
| Code | Botschaft | Beschreibung |
|---|---|---|
| 100 | Fortsetzen | Nur ein Teil der Anfrage wurde vom Server empfangen. Solange sie nicht abgelehnt wurde, sollte der Client mit der Anfrage fortfahren |
| 101 | Protokolle wechseln | Der Server wechselt das Protokoll. |
| 200 | in Ordnung | Die Anfrage ist OK |
| 201 | Erstellt | Die Anforderung ist abgeschlossen und eine neue Ressource wird erstellt |
| 202 | Akzeptiert | Die Anforderung wird zur Verarbeitung angenommen, die Verarbeitung ist jedoch nicht abgeschlossen. |
| 203 | Nicht maßgebliche Informationen | |
| 204 | Kein Inhalt | |
| 205 | Inhalt zurücksetzen | |
| 206 | Teilinhalt | |
| 300 | Mehrere Auswahlmöglichkeiten | Eine Linkliste. Der Benutzer kann einen Link auswählen und zu diesem Ort gehen. Maximal fünf Adressen |
| 301 | dauerhaft umgezogen | Die angeforderte Seite wurde in eine neue URL verschoben |
| 302 | Gefunden | Die angeforderte Seite wurde vorübergehend in eine neue URL verschoben |
| 303 | Siehe Andere | Die angeforderte Seite befindet sich unter einer anderen URL |
| 304 | Nicht modifiziert | |
| 305 | Verwenden Sie Proxy | |
| 306 | Ungebraucht | Dieser Code wurde in einer früheren Version verwendet. Es wird nicht mehr verwendet, aber der Code ist reserviert |
| 307 | Temporäre Weiterleitung | Die angeforderte Seite wurde vorübergehend in eine neue URL verschoben. |
| 400 | Ungültige Anforderung | Der Server hat die Anfrage nicht verstanden |
| 401 | Nicht autorisiert | Die angeforderte Seite benötigt einen Benutzernamen und ein Passwort |
| 402 | Bezahlung erforderlich | Sie können diesen Code noch nicht verwenden |
| 403 | verboten | Der Zugriff auf die angeforderte Seite ist verboten |
| 404 | Nicht gefunden | Der Server kann die angeforderte Seite nicht finden. |
| 405 | Methode nicht erlaubt | Die in der Anfrage angegebene Methode ist nicht zulässig. |
| 406 | Inakzeptabel | Der Server kann nur eine Antwort generieren, die vom Client nicht akzeptiert wird. |
| 407 | Proxy-Authentifizierung erforderlich | Sie müssen sich bei einem Proxyserver authentifizieren, bevor diese Anforderung bearbeitet werden kann. |
| 408 | Zeitüberschreitung der Anforderung | Die Anfrage dauerte länger als der Server bereit war zu warten. |
| 409 | Konflikt | Die Anforderung konnte aufgrund eines Konflikts nicht abgeschlossen werden. |
| 410 | Weg | Die angeforderte Seite ist nicht mehr verfügbar. |
| 411 | Länge erforderlich | Die "Inhaltslänge" ist nicht definiert. Der Server akzeptiert die Anfrage ohne sie nicht. |
| 412 | Voraussetzung fehlgeschlagen | Die in der Anforderung angegebene Voraussetzung wird vom Server als falsch bewertet. |
| 413 | Anfrage Entität zu groß | Der Server akzeptiert die Anforderung nicht, da die Anforderungsentität zu groß ist. |
| 414 | Anfrage-URL zu lang | Der Server akzeptiert die Anforderung nicht, da die URL zu lang ist. Tritt auf, wenn Sie eine "Post" -Anforderung in eine "Get" -Anforderung mit langen Abfrageinformationen konvertieren. |
| 415 | Nicht unterstützter Medientyp | Der Server akzeptiert die Anforderung nicht, da der Medientyp nicht unterstützt wird. |
| 417 | Erwartung fehlgeschlagen | |
| 500 | interner Serverfehler | Die Anfrage wurde nicht abgeschlossen. Der Server hat eine unerwartete Bedingung erfüllt. |
| 501 | Nicht implementiert | Die Anfrage wurde nicht abgeschlossen. Der Server hat die erforderliche Funktionalität nicht unterstützt. |
| 502 | Schlechtes Gateway | Die Anfrage wurde nicht abgeschlossen. Der Server hat eine ungültige Antwort vom Upstream-Server erhalten. |
| 503 | Dienst nicht verfügbar | Die Anfrage wurde nicht abgeschlossen. Der Server ist vorübergehend überlastet oder ausgefallen. |
| 504 | Gateway-Zeitüberschreitung | Das Gateway hat eine Zeitüberschreitung. |
| 505 | HTTP-Version wird nicht unterstützt | Der Server unterstützt die Version "http protocol" nicht. |
Methoden zum Festlegen des HTTP-Statuscodes
Die folgenden Methoden können verwendet werden, um den HTTP-Statuscode in Ihrem Servlet-Programm festzulegen. Diese Methoden sind mit dem HttpServletResponse- Objekt verfügbar .
| Sr.Nr. | Methode & Beschreibung |
|---|---|
| 1 | public void setStatus ( int statusCode ) Diese Methode legt einen beliebigen Statuscode fest. Die setStatus-Methode verwendet ein int (den Statuscode) als Argument. Wenn Ihre Antwort einen speziellen Statuscode und ein Dokument enthält, rufen Sie unbedingt setStatus auf, bevor Sie Inhalte mit dem PrintWriter zurückgeben . |
| 2 | public void sendRedirect(String url) Diese Methode generiert eine 302-Antwort zusammen mit einem Standortkopf , der die URL des neuen Dokuments angibt |
| 3 | public void sendError(int code, String message) Diese Methode sendet einen Statuscode (normalerweise 404) zusammen mit einer Kurznachricht, die automatisch in einem HTML-Dokument formatiert und an den Client gesendet wird. |
Beispiel für einen HTTP-Statuscode
Das folgende Beispiel sendet einen 407-Fehlercode an den Client-Browser und der Browser zeigt "Authentifizierung erforderlich !!!" an. Botschaft.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class showError extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set error code and reason.
response.sendError(407, "Need authentication!!!" );
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Wenn Sie nun das obige Servlet aufrufen, wird das folgende Ergebnis angezeigt:
HTTP Status 407 - Need authentication!!!
type Status report
messageNeed authentication!!!
descriptionThe client must first authenticate itself with the proxy (Need authentication!!!).
Apache Tomcat/5.5.29