3.1 HttpServletResponse クラス
サーブレット メソッドを呼び出した後service()
、Web コンテナは に基づいてクライアントへの応答を生成しますHttpServletResponse
。したがって、クライアントへの応答に何らかの影響を与えたい場合は、このオブジェクトを変更する必要があります。
サーバー応答は 3 つの部分で構成されます。
- ステータス行 (例: 200 OK)
- ヘッダー
- レスポンスボディ
そしてクラスメソッドHttpServletResponse
も3つのグループに分かれる?ほとんど:
メソッド | 説明 | |
---|---|---|
1 | void setStatus(int sc) |
応答ステータスコードを設定します。 |
2 | void sendError(int sc) |
指定されたコードでクライアントにエラーを送信します。 |
3 | void sendError(int sc, String msg) |
指定されたコードとメッセージを含むエラーをクライアントに送信します。 |
4 | void addHeader(String name, String value) |
応答ヘッダーのリストにヘッダーを追加します。 |
5 | void setHeader(String name, String value) |
応答ヘッダーのリスト内のヘッダーを変更します。 |
6 | boolean containsHeader(String name) |
ヘッダーがすでに存在するかどうかを確認します。 |
7 | void addCookie(Cookie cookie) |
応答に Cookie を追加します。 |
8 | void sendRedirect(String location) |
クライアントを別の URL にリダイレクトします。 |
9 | String encodeRedirectURL(String url) |
sendRedirect メソッドで使用するために、指定された URL をエンコードします。 |
10 | String encodeURL(String url) |
セッション ID を含む、指定された URL をエンコードします。 |
十一 | void setContentType(String type) |
結果の MimeType を設定します。 |
12 | void setContentLength(int len) |
レスポンスボディの長さを設定します。 |
13 | void setCharacterEncoding(String charset) |
応答エンコードセットを設定します。 |
14 | void setBufferSize(int size) |
レスポンスボディのバッファサイズを設定します。 |
15 | boolean isCommitted() |
バッファがすでに応答に書き込まれているかどうかを確認します。 |
16 | void flushBuffer() |
バッファの内容を応答に書き込みます。 |
17 | void reset() |
バッファに保存されているすべてのデータ、ヘッダー、および応答コードをリセットします。 |
18 | void resetBuffer() |
応答バッファをクリアします。 |
ここでの方法は非常に簡単です。ただし、以下にいくつかのハイライトを示します。
バッファ。サーブレットの応答はバッファに書き込まれ、すぐにはユーザーに送信されません。したがって、ある段階 (たとえば、エラーが発生した場合) で、バッファに書き込まれたすべての内容をリセット (消去) できます。また、reset() メソッドを呼び出して、バッファの内容だけでなく、応答コードを含むヘッダーも消去できます。
3.2 リダイレクト()
2 番目の重要な点はリダイレクトです。サーブレットがクライアントを別の URL にリダイレクトすることを決定した場合は、何らかの方法でこの URL をクライアントに送信する必要があります。これは、 を使用して実行できますsendRedirect
。
しかし、重要なニュアンスがあります。URI には、応答本文で許可されている文字よりも広い範囲の文字を含めることができます。したがって、メソッドを呼び出す前に、URL を有効な文字セットにエンコードする必要がありますsendRedirect()
。これには特別な方法がありますencodeRedirectURL(String url)
。これを使って。
リダイレクトの例:
public class RedirectServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
String newUrl = "http://google.com?q=Learn to google!";
String redirectUrl = response.encodeRedirectURL(newUrl);
response.sendRedirect(redirectUrl);
}
}
3.3 getWriter() メソッド
次に、応答本文としてテキストを記述する方法を学習します。これを行うために、クラスにはオブジェクトを返すHttpServletResponse
特別なメソッドがあります。忘れた人もいるかもしれませんが、これは という名前のフィールドのタイプです。getWriter()
PrintStream
System.out
サーブレット応答としてテキストを書き込むには、以下が必要です。
- を呼び出して PrintStream オブジェクトを取得します
response.getWriter()
。 - 必要と思われるものはすべて PrintStream オブジェクトに書き込みます (すべてのデータがバッファーに書き込まれます)。
close()
PrintStream のメソッドを呼び出して、バッファをユーザーに送信します。
a
2 つの数値を加算し、b
その結果をユーザーに返すサーブレットを作成してみましょう。
public class CalculatorServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
// Getting the parameter “a” and “b” from request
String a = request.getParameter("a");
String b = request.getParameter("b");
try {
// Convert strings to numbers and calculate sum
int sum = Integer.parseInt(a) + Integer.parseInt(b);
// Print HTML as a response for browser
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head> <title> CalculatorServlet </title> </head>");
out.println("<body>");
out.println("<h1> Sum == " + sum + "</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
}
GO TO FULL VERSION