サーブレットのHTTPステータスコード


HTTP リクエストと HTTP レスポンス メッセージの形式は似ており、次の構造になります:

  • 初期ステータス行 + キャリッジ リターンとライン フィード (キャリッジ リターン + ライン フィード)

  • 0 個以上のヘッダー行 + キャリッジリターンおよびラインフィード文字

  • 空白行、つまりキャリッジリターンおよびラインフィード文字

  • ファイル、クエリデータ、クエリ出力などのオプションのメッセージ本文

たとえば、サーバーの応答ヘッダーは次のようになります:

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>

ステータス行には、HTTP バージョン (この場合、HTTP/1.1)、ステータス コード (この場合、200)、およびステータス コードに対応する短いメッセージ (この場合) が含まれます。場合、OK)。

以下は、Web サーバーから返される可能性のある HTTP ステータス コードと関連情報のリストです:

未使用このコードは以前のバージョンで使用されていました。もう使用されていませんが、コードは残っています。 リクエストされたページは一時的に新しい URL に移動されました。 サーバーはリクエストを理解できません。 このコードはまだ使用できません。 要求されたページへのアクセスは禁止されています。 サーバーは要求されたページを見つけることができません。 .
コード メッセージ 説明
100Continue リクエストの一部のみがサーバーによって受信されましたが、拒否されていない限り、クライアントはリクエストを続行する必要があります。
101スイッチングプロトコルサーバースイッチングプロトコル。
200OKリクエストは成功しました。
201作成されました リクエストが完了し、新しいリソースが作成されます。
202Acceptedリクエストは処理のために受け入れられましたが、処理は不完全でした。コンテンツなし
206部分的なコンテンツ
300複数選択リンクリスト。ユーザーはリンクを選択してその場所に移動できます。最大 5 つのアドレス。
301Moved Permanentlyリクエストされたページは新しい URL に移動されました。
302見つかりましたリクエストされたページは、新しい URL に一時的に移動されました。
303その他を見るリクエストされたページは別の URL で見つかります。
304未変更
305プロキシを使用
306
307一時リダイレクト
400Bad Request
401Unauthorized要求されたページにはユーザー名とパスワードが必要です。
402お支払いが必要です
403Forbidden
404見つかりません
405メソッドは許可されていませんリクエストで指定されたメソッドは許可されていません。
406Not Acceptableサーバーは、クライアントによって受け入れられない応答のみを生成します。
407プロキシ認証が必要ですリクエストが配信される前にプロキシサーバーの認証を使用する必要があります。
408リクエストタイムアウトリクエストはサーバーの待機時間を超えてタイムアウトしました。
409競合競合のためリクエストを完了できませんでした。
410Goneリクエストされたページはもう利用できません。
411長さが必要です「コンテンツの長さ」が未定義です。サーバーは、Content-Length がないとクライアントから送信されたリクエスト情報を処理できません。
412前提条件が失敗しましたリクエストで指定された前提条件は、サーバーによって false と評価されました。
413リクエストエンティティが大きすぎますリクエストエンティティが大きすぎるため、サーバーはリクエストを受け入れません。
414リクエスト URL 長すぎます URL が長すぎるため、サーバーはリクエストを受け入れませんでした。 「post」リクエストを長いクエリ情報を含む「get」リクエストに変換するときに発生します。
415サポートされていないメディアタイプメディアタイプがサポートされていないため、サーバーはリクエストを受け入れませんでした。
417期待に失敗しました
500内部サーバーエラーリクエストが不完全です。サーバーで予期しない状況が発生しました。
501未実装未解決のリクエスト。サーバーは必要な機能をサポートしていません。
502不正なゲートウェイ未解決のリクエスト。サーバーは上流サーバーから無効な応答を受け取りました。
503サービスが利用できません未処理のリクエストです。サーバーが一時的に過負荷またはダウンしています。
504ゲートウェイタイムアウトゲートウェイタイムアウト。
505HTTPバージョンはサポートされていませんサーバーは「HTTPプロトコル」バージョンをサポートしていません。

HTTPステータスコードの設定方法

サーブレットプログラムにHTTPステータスコードを設定するには以下の方法が使用できます。これらのメソッドは、HttpServletResponse オブジェクトを通じて利用できます。

シリアル番号メソッドと説明
1public void setStatus ( int statusCode )
このメソッドは、任意のステータスコードを設定します。 setStatus メソッドは、パラメータとして int (ステータス コード) を受け入れます。リアクションに特別なステータス コードとドキュメントが含まれている場合は、PrintWriter を使用して実際に何かを返す前に、必ず setStatus を呼び出してください。
2public void sendRedirect(String url)
このメソッドは、新しいドキュメント URL を含む Location ヘッダーとともに 302 応答を生成します。
3public void sendError(int code, String message)
このメソッドは、HTML ドキュメント内で自動的にフォーマットされてクライアントに送信される短いメッセージとともに、ステータス コード (通常は 404) を送信します。

HTTP ステータス コードの例

次の例では、クライアント ブラウザに 407 エラー コードが送信され、ブラウザには「認証が必要です!!!」というメッセージが表示されます。

// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// 扩展 HttpServlet 类
public class showError extends HttpServlet {
 
  // 处理 GET 方法请求的方法
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 设置错误代码和原因
      response.sendError(407, "Need authentication!!!" );
  }
  // 处理 POST 方法请求的方法
  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
     doGet(request, response);
  }
}

ここで、上記のサーブレットを呼び出すと、次の結果が表示されます:

HTTP ステータス 407 - 認証が必要です!!!

タイプ ステータス レポート

メッセージ 認証が必要です!!!

説明 クライアントは最初にプロキシで自身を認証する必要があります (認証が必要です!!!)。

Apache Tomcat/5.5.29