English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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 | 応答ドキュメントが安全にキャッシュできる場合を指定します。通常の値は public、private または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を示します。 |
responseオブジェクトはjavax.servlet.http.HttpServletResponseクラスの例です。サーバーがrequestオブジェクトを生成するように、これもクライアントの応答を生成します。
responseオブジェクトは、HTTP情報ヘッダーの作成を処理するインターフェースを定義しています。このオブジェクトを使用することで、開発者は新しいcookieやタイムスタンプ、HTTPステータスコードなどを追加できます。
以下のテーブルには、HTTPレスポンスヘッダーを設定するために使用される方法が示されています。これらのメソッドはHttpServletResponseクラスによって提供されます:
S.N. | メソッド & 説明 |
---|---|
1 | String encodeRedirectURL(String url) sendRedirect()メソッドで使用するURLをエンコードします。 |
2 | String encodeURL(String url) URLをURLエンコードし、セッションIDを含むURLを返します。 |
3 | boolean containsHeader(String name) 指定されたレスポンスヘッダーが存在するかどうかを返します。 |
4 | boolean isCommitted() レスポンスがクライアントに提交されているかどうかを返します。 |
5 | void addCookie(Cookie cookie) 指定されたcookieをレスポンスに追加します。 |
6 | void addDateHeader(String name, long date) 指定された名前のレスポンスヘッダーと日付値を追加します。 |
7 | void addHeader(String name, String value) 指定された名前のレスポンスヘッダーと値を追加します。 |
8 | void addIntHeader(String name, int value) 指定された名前のレスポンスヘッダーとint値を追加します。 |
9 | void flushBuffer() すべてのキャッシュ中の内容をクライアントに書き込みます。 |
10 | void reset() すべてのキャッシュ中のデータをクリアします。これにはステータスコードやさまざまなレスポンスヘッダーも含まれます。 |
11 | void resetBuffer() 基本的なキャッシュデータをクリアします(応答ヘッダーやステータスコードを含まない) |
12 | void sendError(int sc) 指定されたステータスコードを使用してクライアントにエラーレスポンスを送信し、キャッシュをクリアします |
13 | void sendError(int sc, String msg) 指定されたステータスコードとメッセージを使用してクライアントにエラーレスポンスを送信します |
14 | void sendRedirect(String location) 指定されたURLを使用してクライアントに一時的な間接応答を送信します |
15 | void setBufferSize(int size) 応答ボディのバッファーサイズを設定します |
16 | void setCharacterEncoding(String charset) 応答のエンコードセット(MIME文字セット)を指定します。例えばUTF-8 |
17 | void setContentLength(int len) HTTP servletsの応答の内容の長さを指定します。このメソッドはHTTP Contentの長さを設定するために使用されます-Length情報ヘッダー |
18 | void setContentType(String type) 応答の内容のタイプを設定します(応答がまだ提交されていない場合) |
19 | void setDateHeader(String name, long date) 指定された名前と日付を使用して応答ヘッダーの名前と日付を設定します |
20 | void setHeader(String name, String value) 指定された名前と値を使用して応答ヘッダーの名前と内容を設定します |
21 | void setIntHeader(String name, int value) int型の値をnameヘッダーに指定します |
22 | void setLocale(Locale loc) 応答の言語環境を設定します(応答がまだ提交されていない場合) |
23 | void setStatus(int sc) 応答のステータスコードを設定します |
次の例では、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秒は現在のシステム時間を表示します。
上記のコードを自分で修正し、他の方法を試してみてください。それにより、より深い理解が得られます。