English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

ServletHTTPStatuscodes

Die Formatierung von HTTP-Anfragen und HTTP-Antworten ist ähnlich und hat die folgende Struktur:

  • Ursprüngliche Statuszeile + Zeilenumbruch (Zeilenumbruch+(Zeilenumbruch)

  • Keine oder mehrere Header-Zeilen+Zeilenumbruch

  • Eine leere Zeile, d.h. Zeilenumbruch

  • Ein optionales Nachrichtenkörper, wie z.B. Datei, Abfragedaten oder Abfrageausgabe

Beispielsweise könnte der Header der Serverantwort wie folgt aussehen:

HTTP/1.1 200 OK
Inhalt-Typ: text/html
Header2: ...
...
HeaderN: ...
  (Leere Zeile)
!doctype ...
<html>
<head>.../head>
<body>
...
</body>
</html>

Die Statuszeile enthält die HTTP-Version (im Beispiel HTTP/1.1)、eine Statusnummer (im Beispiel 200)und eine kurze Nachricht, die dem Statuscode entspricht (im Beispiel OK).

Nachfolgend ist eine Liste möglicher HTTP-Statuscodes, die von Webservern zurückgegeben werden können, und der zugehörigen Informationen aufgeführt:

CodeNachrichtBeschreibung
100FortsetzenNur ein Teil der Anfrage wurde vom Server empfangen, aber solange sie nicht abgelehnt wird, sollte der Client die Anfrage fortsetzen.
101Protokolle umschaltenServer-Protokoll umschalten.
200OKAnfrage erfolgreich.
201ErstelltDiese Anfrage ist vollständig und erstellt eine neue Ressource.
202AcceptedDieser Request wurde akzeptiert und verarbeitet, aber die Verarbeitung ist unvollständig.
203Non-authoritative Information 
204No Content 
205Reset Content 
206Partial Content 
300Multiple ChoicesListe der Links. Der Benutzer kann einen Link auswählen und zu dieser Position gelangen. Bis zu fünf Adressen.
301Moved PermanentlyDie angeforderte Seite wurde auf eine neue URL verschoben.
302FoundDie angeforderte Seite wurde temporär auf eine neue URL verschoben.
303See OtherDie angeforderte Seite ist unter einer anderen URL erreichbar.
304Not Modified 
305Use Proxy 
306UnusedDieser Code wurde in früheren Versionen verwendet. Er wird jetzt nicht mehr verwendet, aber der Code wird beibehalten.
307Temporary RedirectDie angeforderte Seite wurde temporär auf eine neue URL verschoben.
400Bad RequestDer Server versteht die Anfrage nicht.
401UnauthorizedDie angeforderte Seite erfordert Benutzernamen und Passwort.
402Payment RequiredSie können diesen Code noch nicht verwenden.
403ForbiddenDer Zugriff auf die angeforderte Seite ist verboten.
404Not FoundDer Server kann die angeforderte Seite nicht finden.
405Method Not AllowedDie im Request angegebene Methode ist nicht erlaubt.
406Not AcceptableDer Server generiert nur eine Antwort, die vom Client nicht akzeptiert wird.
407Proxy Authentication RequiredSie müssen vor der Zustellung der Anfrage die Authentifizierung des Proxy-Servers verwenden.
408Request TimeoutDie Zeit, die die Anfrage benötigt, ist länger als die Zeit, die der Server warten kann, Timeout.
409ConflictDie Anfrage konnte aufgrund eines Konflikts nicht abgeschlossen werden.
410GoneDie angeforderte Seite ist nicht mehr verfügbar.
411Länge Required"Content"-"Länge" nicht definiert. Der Server kann die von der Clientseitennachricht gesendete Nachricht ohne Content nicht verarbeiten.-Längeninformation der Anfrage.
412PräCONDITION FailedDie angegebenen Prämisse im Request wird vom Server als falsch bewertet.
413Request Entity Too LargeDer Server akzeptiert die Anfrage nicht, weil der Anfragekörper zu groß ist.
414Anfrage-URL zu langDer Server akzeptiert die Anfrage nicht, weil die URL zu lang ist. Dies tritt auf, wenn Sie eine "post"-Anfrage in eine "get"-Anfrage mit langer Abfrageinformation umwandeln.
415Nicht unterstützter Mediennutzer服务器不接受该请求,因为媒体类型不被支持。
417Expectation Failed 
500Internal Server Error未完成的请求。服务器遇到了一个意外的情况。
501Not Implemented未完成的请求。服务器不支持所需的功能。
502Bad Gateway未完成的请求。服务器从上游服务器收到无效响应。
503Service Unavailable未完成的请求。服务器暂时超载或死机。
504Gateway Timeout网关超时。
505HTTP Version Not Supported服务器不支持"HTTP协议"版本。

设置 HTTP 状态代码的方法

下面的方法可用于在 Servlet 程序中设置 HTTP 状态码。这些方法通过 HttpServletResponse 对象可用。

序号方法 & 描述
1public void setStatus ( int statusCode )
该方法设置一个任意的状态码。setStatus 方法接受一个 int(状态码)作为参数。如果您的响应包含了一个特殊的状态码和文档,请确保在使用 PrintWriter 实际返回任何内容之前调用 setStatus。
2public void sendRedirect(String url)
该方法生成一个 302 响应,连同一个带有新文档 URL 的 Location 头。
3public void sendError(int code, String message)
该方法发送一个状态码(通常为 404),连同一个在 HTML 文档内部自动格式化并发送到客户端的短消息。

HTTP 状态码示例

下面的实例把 407 错误代码发送到客户端浏览器,浏览器会显示 "Need authentication!!!" 消息。

// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import javax.servlet.annotation.WebServlet;
@WebServlet("/showError())
// 扩展 HttpServlet 类
public class showError extends HttpServlet {
 
  // Methode zumVerarbeitenvonGET-Anfragenbehandeln
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // FehlercodeundBegründungsetzen
      response.sendError(407, "Need authentication!!!" );
  }
  // Methode zumVerarbeitenvonPOST-Anfragenbehandeln
  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
     doGet(request, response);
  }
}

JetztwirdderobigeServletfolgendenErgebnisanzeigen:

HTTPStatus 407 - Needauthentication!!!

Typ Statusbericht

Nachricht Needauthentication!!!

Beschreibung DerClientmusszuerstsichbei demProxyauthentifizieren(Needauthentication!!!).

ApacheTomcat/5.5.29