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 など) を指定します |
キャッシュ制御 | 応答ドキュメントを安全にキャッシュできる状況を指定します。通常、値は public、private、または 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 クラスによって提供されます。
1sendRedirect() メソッドで使用される URL をエンコードします | 2文字列エンコードURL(文字列URL) |
---|---|
URLをエンコードして、セッションIDを含むURLを返します |
3 |
指定されたレスポンスヘッダーが存在するかどうかを返します |
4 |
応答がクライアントに送信されたかどうかを返します |
5 |
指定された Cookie をレスポンスに追加します |
6 |
指定された名前で応答ヘッダーと日付値を追加します |
7 |
指定された名前の応答ヘッダーと値を追加します |
8 |
応答ヘッダーと指定された名前の int 値を追加します |
9 |
キャッシュされたコンテンツをクライアントに書き込みます |
10 |
ステータス コードやさまざまな応答ヘッダーを含む、キャッシュ内のすべてのデータをクリアします |
11 |
応答ヘッダーとステータス コードを除く、基本的なキャッシュ データをクリアします | |
12 | void sendError(int sc) |
13 | void sendError(int sc, String msg) |
14 | void sendRedirect(文字列の場所) |
15 | void setBufferSize(int size) |
16 | void setCharacterEncoding(String charset) |
17 | void setContentLength(int len) |
18 | void setContentType(String型) |
19 | void setDateHeader(文字列名、長い日付) |
20 | void setHeader(文字列名, 文字列値) |
21 | void setIntHeader(文字列名, int値) |
22 | void setLocale(Locale loc) |
23 | void 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 デモを見てみましょう:
上記のコードを自分で変更して、より深く理解するために他の方法を試すこともできます。