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

JSP サーバー応答

Response応答オブジェクトは、JSPコンテナが処理した結果をクライアントに戻します。response変数を使用してHTTPの状態を設定し、クライアントにデータ(Cookie、HTTPヘッダー情報など)を送信することができます。

典型的な応答は以下のようになります:

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

ステートラインにはHTTPバージョン情報が含まれており、例えばHTTP/1.1、ステータスコード、例えば200、そしてステータスコードに対応する非常に短いメッセージがあります。

以下の表はHTTP1.1応答ヘッダーの中で最も役立つ部分、ネットワークプログラミングではよく見られます:

応答ヘッダー説明
Allow サーバーがサポートするrequestメソッド(GET、POSTなど)を指定します。
Cache-Control 応答ドキュメントが安全にキャッシュできる場合を指定します。通常の値は publicprivate またはno-cache など。Publicはドキュメントがキャッシュ可能、Privateはドキュメントがユーザーごとにサービスされ、プライベートキャッシュのみを使用することができます。No-cacheはドキュメントがキャッシュされないことを意味します。
Connection ブラウザが持続的HTTP接続を使用するかどうかを指示します。close ブラウザが持続的HTTP接続を使用しないように命令し、代わりにkeep-aliveは持続的接続を使用することを意味します。
Content-Disposition ブラウザがユーザーに、応答を指定された名前でディスクに保存するように要求します。
Content-Encoding ページのエンコーディング規則を指定します。
Content-Language ドキュメントが使用する言語を示します。例えばen、enなど-us、ruなど
Content-Length レスポンスのバイト数を示します。ブラウザが持続的(keep-alive)接続を使用している場合にのみ有効です。-alive) HTTP接続が有効な場合にのみ有効です。
Content-Type ドキュメントが使用するMIMEタイプを示します。
Expires いつ過期し、キャッシュから削除されるかを示します。
Last-Modified ドキュメントの最終修正日を示します。クライアントはドキュメントをキャッシュし、後のリクエストで提供することができます。 If-Modified-Sinceリクエストヘッダー
Location 在300秒以内に、ステータスコードを持つすべてのレスポンスURLを含む場合、ブラウザは自動的に再接続して新しいドキュメントを検索します。
Refresh ブラウザがページを更新する間隔を示します。
Retry-After と503 (Service Unavailable)と一緒に使用して、ユーザーにリクエストがどれくらい後に応答されるかを伝えます。
Set-Cookie 現在のページに対応するcookieを示します。

HttpServletResponseクラス

responseオブジェクトはjavax.servlet.http.HttpServletResponseクラスの例です。サーバーがrequestオブジェクトを生成するように、これもクライアントの応答を生成します。

responseオブジェクトは、HTTP情報ヘッダーの作成を処理するインターフェースを定義しています。このオブジェクトを使用することで、開発者は新しいcookieやタイムスタンプ、HTTPステータスコードなどを追加できます。

以下のテーブルには、HTTPレスポンスヘッダーを設定するために使用される方法が示されています。これらのメソッドはHttpServletResponseクラスによって提供されます:

S.N.メソッド & 説明
1String encodeRedirectURL(String url) sendRedirect()メソッドで使用するURLをエンコードします。
2String encodeURL(String url) URLをURLエンコードし、セッションIDを含むURLを返します。
3boolean containsHeader(String name) 指定されたレスポンスヘッダーが存在するかどうかを返します。
4boolean isCommitted() レスポンスがクライアントに提交されているかどうかを返します。
5void addCookie(Cookie cookie) 指定されたcookieをレスポンスに追加します。
6void addDateHeader(String name, long date) 指定された名前のレスポンスヘッダーと日付値を追加します。
7void addHeader(String name, String value) 指定された名前のレスポンスヘッダーと値を追加します。
8void addIntHeader(String name, int value) 指定された名前のレスポンスヘッダーとint値を追加します。
9void flushBuffer() すべてのキャッシュ中の内容をクライアントに書き込みます。
10void reset() すべてのキャッシュ中のデータをクリアします。これにはステータスコードやさまざまなレスポンスヘッダーも含まれます。
11void resetBuffer() 基本的なキャッシュデータをクリアします(応答ヘッダーやステータスコードを含まない)
12void sendError(int sc) 指定されたステータスコードを使用してクライアントにエラーレスポンスを送信し、キャッシュをクリアします
13void sendError(int sc, String msg) 指定されたステータスコードとメッセージを使用してクライアントにエラーレスポンスを送信します
14void sendRedirect(String location) 指定されたURLを使用してクライアントに一時的な間接応答を送信します
15void setBufferSize(int size) 応答ボディのバッファーサイズを設定します
16void setCharacterEncoding(String charset) 応答のエンコードセット(MIME文字セット)を指定します。例えばUTF-8
17void setContentLength(int len) HTTP servletsの応答の内容の長さを指定します。このメソッドはHTTP Contentの長さを設定するために使用されます-Length情報ヘッダー
18void setContentType(String type) 応答の内容のタイプを設定します(応答がまだ提交されていない場合)
19void setDateHeader(String name, long date) 指定された名前と日付を使用して応答ヘッダーの名前と日付を設定します
20void setHeader(String name, String value) 指定された名前と値を使用して応答ヘッダーの名前と内容を設定します
21void setIntHeader(String name, int value) int型の値をnameヘッダーに指定します
22void setLocale(Locale loc) 応答の言語環境を設定します(応答がまだ提交されていない場合)
23void setStatus(int sc) 応答のステータスコードを設定します

HTTP応答ヘッダープログラムの例

次の例では、setIntHeader()メソッドとsetRefreshHeader()メソッドを使用してデジタルクロックをシミュレートします:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>基礎教程網(oldtoolbag.com)</<title>
</<head>
<body>
<h2>自動リフレッシュ例</h2>
<%
   // 毎隔5秒自動リフレッシュ
   response.setIntHeader("Refresh", 5);
   // 現在時間を取得
   Calendar calendar = new GregorianCalendar();
   String am_pm;
   int hour = calendar.get(Calendar.HOUR);
   int minute = calendar.get(Calendar.MINUTE);
   int second = calendar.get(Calendar.SECOND);
   if(calendar.get(Calendar.AM_PM) == 0)
      am_pm = "AM";
   else
      am_pm = "PM";
   String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
   out.println("現在時間: " + CT + "\n");
%>
</body>
</html>

上記のコードをmain.jspとして保存し、ブラウザでアクセスしてください。それでは、毎隔5秒は現在のシステム時間を表示します。

上記のコードを自分で修正し、他の方法を試してみてください。それにより、より深い理解が得られます。