サーブレット-Httpステータスコード
HTTP要求メッセージとHTTP応答メッセージの形式は類似しており、次の構造になります。
初期ステータスライン+ CRLF(キャリッジリターン+ラインフィード、つまり改行)
ゼロ個以上のヘッダー行+ CRLF
空白行、つまりCRLF
ファイル、クエリデータ、クエリ出力などのオプションのメッセージ本文。
たとえば、サーバーの応答ヘッダーは次のようになります。
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 | 継続する | リクエストの一部のみがサーバーによって受信されましたが、それが拒否されない限り、クライアントはリクエストを続行する必要があります |
101 | スイッチングプロトコル | サーバーはプロトコルを切り替えます。 |
200 | OK | リクエストはOKです |
201 | 作成した | リクエストが完了し、新しいリソースが作成されます |
202 | 承認済み | リクエストは処理のために受け入れられますが、処理は完了していません。 |
203 | 信頼できない情報 | |
204 | コンテンツなし | |
205 | コンテンツをリセット | |
206 | 部分的なコンテンツ | |
300 | 複数の選択肢 | リンクリスト。ユーザーはリンクを選択してその場所に移動できます。最大5つのアドレス |
301 | 恒久的に移動 | リクエストされたページは新しいURLに移動しました |
302 | 見つかりました | リクエストされたページは一時的に新しいURLに移動しました |
303 | その他を見る | リクエストされたページは別のURLにあります |
304 | 変更なし | |
305 | プロキシを使う | |
306 | 未使用 | このコードは以前のバージョンで使用されていました。使用されなくなりましたが、コードは予約されています |
307 | 一時的なリダイレクト | リクエストされたページは一時的に新しいURLに移動しました。 |
400 | 要求の形式が正しくありません | サーバーはリクエストを理解しませんでした |
401 | 許可されていない | リクエストされたページにはユーザー名とパスワードが必要です |
402 | 支払いが必要 | このコードはまだ使用できません |
403 | 禁止 | リクエストされたページへのアクセスは禁止されています |
404 | 見つかりません | サーバーは要求されたページを見つけることができません。 |
405 | 許可されていない方法 | リクエストで指定されたメソッドは許可されていません。 |
406 | 受け付けできません | サーバーは、クライアントによって受け入れられない応答のみを生成できます。 |
407 | プロキシ認証が必要 | このリクエストを処理する前に、プロキシサーバーで認証する必要があります。 |
408 | リクエストタイムアウト | サーバーが待機する準備ができているよりも、要求に時間がかかりました。 |
409 | 競合 | 競合のため、リクエストを完了できませんでした。 |
410 | なくなった | リクエストされたページは利用できなくなりました。 |
411 | 必要な長さ | 「Content-Length」は定義されていません。サーバーはそれなしではリクエストを受け入れません。 |
412 | 前提条件が失敗しました | リクエストで指定された前提条件は、サーバーによってfalseと評価されました。 |
413 | エンティティが大きすぎるリクエスト | リクエストエンティティが大きすぎるため、サーバーはリクエストを受け入れません。 |
414 | Request-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) このメソッドは、ステータスコード(通常は404)を、HTMLドキュメント内で自動的にフォーマットされてクライアントに送信される短いメッセージとともに送信します。 |
HTTPステータスコードの例
以下は、407エラーコードをクライアントブラウザに送信し、ブラウザに「認証が必要です!!!」と表示される例です。メッセージ。
// 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);
}
}
上記のサーブレットを呼び出すと、次の結果が表示されます-
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