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