Servlets-server-response
サーブレット-サーバーHTTPレスポンス
前の章で説明したように、WebサーバーがHTTP要求に応答する場合、応答は通常、ステータス行、いくつかの応答ヘッダー、空白行、およびドキュメントで構成されます。 典型的な応答はこのように見えます-
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 1.1応答ヘッダーの要約であり、Webプログラミングで頻繁に使用します-
Sr.No. | Header & Description |
---|---|
1 |
Allow このヘッダーは、サーバーがサポートする要求メソッド(GET、POSTなど)を指定します。 |
2 |
Cache-Control このヘッダーは、応答ドキュメントを安全にキャッシュできる状況を指定します。 値は public 、 private 、または no-cache などです。 Publicはドキュメントがキャッシュ可能であることを意味し、Privateはドキュメントが単一のユーザー向けであり、プライベート(非共有)キャッシュにのみ保存できることを意味し、nocacheはドキュメントをキャッシュしないことを意味します。 |
3 |
Connection このヘッダーは、HTTP接続で永続的を使用するかどうかをブラウザに指示します。 close の値は、ブラウザに永続的なHTTP接続を使用しないよう指示し、 keepalive は永続的な接続を使用することを意味します。 |
4 |
Content-Disposition このヘッダーを使用すると、指定した名前のファイルにディスクへの応答を保存するようにブラウザーにユーザーに要求することができます。 |
5 |
Content-Encoding このヘッダーは、送信中にページがエンコードされた方法を指定します。 |
6 |
Content-Language このヘッダーは、ドキュメントが記述されている言語を示します。 たとえば、en、en-us、ruなど |
7 |
Content-Length このヘッダーは、応答のバイト数を示します。 この情報が必要なのは、ブラウザーが永続的な(キープアライブ)HTTP接続を使用している場合のみです。 |
8 |
Content-Type このヘッダーは、応答ドキュメントのMIME(Multipurpose Internet Mail Extension)タイプを提供します。 |
9 |
Expires このヘッダーは、コンテンツが古くなったと見なされ、キャッシュされなくなる時間を指定します。 |
10 |
Last-Modified このヘッダーは、ドキュメントが最後に変更された日時を示します。 その後、クライアントはドキュメントをキャッシュし、後のリクエストで If-Modified-Since リクエストヘッダーによって日付を提供できます。 |
11 |
Location このヘッダーは、300年代のステータスコードを持つすべての応答に含める必要があります。 これにより、ブラウザにドキュメントアドレスが通知されます。 ブラウザはこの場所に自動的に再接続し、新しいドキュメントを取得します。 |
12 |
Refresh このヘッダーは、ブラウザが更新されたページを要求するまでの時間を指定します。 ページが更新されるまでの時間を秒数で指定できます。 |
13 |
Retry-After このヘッダーを503(Service Unavailable)応答と組み合わせて使用すると、クライアントに要求を繰り返すことができる時間を通知できます。 |
14 |
Set-Cookie このヘッダーは、ページに関連付けられたCookieを指定します。 |
HTTP応答ヘッダーを設定する方法
サーブレットプログラムでHTTP応答ヘッダーを設定するために使用できる次のメソッドがあります。 これらのメソッドは、_HttpServletResponse_オブジェクトで使用できます。
Sr.No. | Method & Description |
---|---|
1 |
String encodeRedirectURL(String url) 指定されたURLをsendRedirectメソッドで使用するためにエンコードします。エンコードが不要な場合は、URLを変更せずに返します。 |
2 |
String encodeURL(String 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) 指定された名前と整数値を持つ応答ヘッダーを追加します。 |
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サーブレットでは、このメソッドは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) 指定された名前と整数値で応答ヘッダーを設定します |
22 |
void setLocale(Locale loc) 応答がまだコミットされていない場合、応答のロケールを設定します。 |
23 |
void setStatus(int sc) この応答のステータスコードを設定します |
HTTPヘッダーレスポンスの例
前の例でsetContentType()メソッドが機能するのをすでに見てきましたが、次の例でも同じメソッドを使用し、さらに* setIntHeader()メソッドを使用して *Refresh ヘッダーを設定します。
//Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
//Extend HttpServlet class
public class Refresh extends HttpServlet {
//Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Set refresh, autoload time as 5 seconds
response.setIntHeader("Refresh", 5);
//Set response content type
response.setContentType("text/html");
//Get current time
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;
PrintWriter out = response.getWriter();
String title = "Auto Refresh Header Setting";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n"+
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<p>Current Time is: " + CT + "</p>\n"
);
}
//Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
上記のサーブレットを呼び出すと、次のように5秒ごとに現在のシステム時間が表示されます。 サーブレットを実行し、結果が表示されるのを待つだけです-
Auto Refresh Header Setting
Current Time is: 9:44:50 PM