JSPサーバーの応答


Response レスポンス オブジェクトは主に、JSP コンテナによって処理された結果をクライアントに送り返します。 HTTP ステータスを設定し、Cookie や HTTP ファイル ヘッダー情報などの応答変数を通じてクライアントにデータを送信できます。

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

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

ステータス行には、HTTP/1.1 などの HTTP バージョン情報、200 などのステータス コード、OK などのステータス コードに対応する非常に短いメッセージが含まれます。

次の表は、ネットワーク プログラミングでよく目にする HTTP1.1 応答ヘッダーの最も有用な部分をまとめたものです。

レスポンスヘッダー説明
許可します サーバーがサポートするリクエストメソッド (GET、POST など) を指定します
キャッシュ制御 応答ドキュメントを安全にキャッシュできる状況を指定します。通常、値は publicprivate、または no-cache などです。パブリックはドキュメントがキャッシュ可能であることを意味し、プライベートはドキュメントが 1 人のユーザーにのみ提供され、プライベート キャッシュのみを使用できることを意味します。キャッシュなしとは、ドキュメントがキャッシュされていないことを意味します。
接続 永続的な HTTP 接続を使用するかどうかをブラウザーに指示します。 closeは、永続的な HTTP 接続を使用しないようにブラウザに指示しますが、キープアライブは永続的な接続を使用することを意味します。
コンテンツの配置 ブラウザーがユーザーに、指定された名前
で応答をディスクに保存するように依頼します。 コンテンツエンコーディング 送信時のページのエンコードルールを指定します
コンテンツ言語 ドキュメントを表現するために使用される言語 (en、en-us、、ru など)
コンテンツの長さ 応答内のバイト数を示します。ブラウザが永続的な (キープアライブ) HTTP 接続を使用する場合にのみ役立ちます
コンテンツ タイプ ドキュメントで使用される MIME タイプを示します
期限切れ 有効期限が切れてキャッシュから削除されるタイミングを指定します
Last-Modified ドキュメントが最後に変更された時期を示します。クライアントはドキュメントをキャッシュし、後続のリクエストで If-Modified-Since リクエスト ヘッダー
を提供できます。 場所 ステータス コードを含むすべての応答アドレスを含めて 300 秒以内に、ブラウザは自動的に再接続して新しいドキュメントを取得します
リフレッシュ ブラウザがページの更新を要求する頻度を示します。
再試行後 503 (サービス利用不可) と一緒に使用され、リクエストが応答されるまでにどれくらいの時間がかかるかをユーザーに通知します
Set-Cookie 現在のページに対応するCookieを示します

HttpServletResponse クラス

response オブジェクトは、javax.servlet.http.HttpServletResponse クラスのインスタンスです。サーバーはリクエスト オブジェクトを作成するのと同じように、クライアントの応答も作成します。

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

次の表に、HTTP 応答ヘッダーの設定に使用されるメソッドを示します。これらのメソッドは、HttpServletResponse クラスによって提供されます。

1文字列encodeRedirectURL(文字列URL) sendRedirect() メソッドで使用される URL をエンコードします
2文字列エンコードURL(文字列URL)
URLをエンコードして、セッションIDを含むURLを返します 3


ブール値 containsHeader(文字列名)
指定されたレスポンスヘッダーが存在するかどうかを返します 4


ブール値 isCommitted()
応答がクライアントに送信されたかどうかを返します 5


void addCookie(クッキークッキー)
指定された Cookie をレスポンスに追加します 6


void addDateHeader(文字列名、長い日付)
指定された名前で応答ヘッダーと日付値を追加します 7


void addHeader(文字列名, 文字列値)
指定された名前の応答ヘッダーと値を追加します 8


void addIntHeader(文字列名, int値)
応答ヘッダーと指定された名前の int 値を追加します 9


void flashBuffer()
キャッシュされたコンテンツをクライアントに書き込みます 10


ボイドリセット()
ステータス コードやさまざまな応答ヘッダーを含む、キャッシュ内のすべてのデータをクリアします 11


voidresetBuffer()
応答ヘッダーとステータス コードを除く、基本的なキャッシュ データをクリアします
12void sendError(int sc)


指定されたステータス コードでエラー応答をクライアントに送信し、キャッシュをクリアします
13void sendError(int sc, String msg)


指定されたステータス コードとメッセージを使用してクライアントにエラー応答を送信します
14void sendRedirect(文字列の場所)


指定された URL を使用してクライアントに一時的な間接応答を送信します
15void setBufferSize(int size)


レスポンスボディのキャッシュサイズを設定します
16void setCharacterEncoding(String charset)


レスポンスのエンコードセット(MIME文字セット)をUTF-8などで指定します
17void setContentLength(int len)


HTTP サーブレットの応答コンテンツの長さを指定するこのメソッドは、HTTP Content-Length ヘッダー
18void setContentType(String型)


応答がまだ送信されていない場合は、応答のコンテンツ タイプを設定します
19void setDateHeader(文字列名、長い日付)


指定された名前と値を使用して応答ヘッダーの名前と内容を設定します
20void setHeader(文字列名, 文字列値)


指定された名前と値を使用して応答ヘッダーの名前と内容を設定します
21void setIntHeader(文字列名, int値)


指定された名前と値を使用して応答ヘッダーの名前と内容を設定します
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>php中文网(php.cn)</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 秒ごとに表示されます。

次の Gif デモを見てみましょう:

jsp1.gif

上記のコードを自分で変更して、より深く理解するために他の方法を試すこともできます。