サーブレットはサーバサイドで動作しているので、ブラウザへデータを表示するためにはゲートウェイとなる存在が必要となります。HTTPを使用したWebアプリケーションのゲートウェイの役割を果たすのが今回説明する ServletResponseオブジェクトになります。サーブレットはこのクラスを介しブラウザへデータを出力するためのストリームを取得することが出来ます。
ServletResponseインタフェースの主なメソッド
| メソッド |
動作 |
| getWriter() |
クライアントへ文字を送信するための java.io.PrintWriterクラスのオブジェクトを返します。HTTPサーブレットはこのオブジェクトをゲートウェイにしてブラウザへ文字を出力することが出来ます。 |
| getOutputStream() |
getOutputStream()メソッドは、クライアントへバイナリデータを送信するための javax.servlet.ServletOutputStreamクラスのオブジェクトを返します。 ZIPファイルや、Excelといったバイナリファイルを送信したいときに使用します。 |
| setContentType(String type) |
クライアントへ送信するコンテンツの種類やエンコーディングを設定します。ブラウザはこのメソッドにて設定されたタイプによって送信されてくるコンテンツの種類を判別します。また、このメソッドは Writerオブジェクトを取得する前に行います。 |
|
SerlvetResponseのインスタンスでは、getWriter()と getOutputServlet()メソッドのいずれかしか呼び出すことが出来ません。同インスタンスで getWriter()を呼び出した後、 getOutputWrite()メソッドを呼び出すと IllegalStateExceptionがスローされます。
setContentTypeメソッド
setContentTypeメソッドはクライアントへ送信するコンテンツタイプやエンコーディングを設定します。Htmlファイルとしてコンテンツを出力したい場合は「 text/html 」となります。PrintWriterオブジェクトを取得する前にこのメソッドを呼び出さなければ、デフォルトコンテンツタイプとして「 text/html 」が使用されます。
| 主なコンテンツタイプ |
| HTMLファイル |
text/html |
| 無編集のテキスト |
text/plain |
| GIF画像 |
image/gif |
| JPEG画像 |
image/jpeg |
| バイナリファイル |
application/octet-stream |
|
それではHTTPデータを出力するためのヘッダを設定してみます。
package com.sitecooler.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SampleSetContentType extends HttpServlet {
protected void doGet(
HttpServletRequest req,
HttpServletResponse res)
throws ServletException, java.io.IOException {
res.setContentType("text/html;charset=Windows-31J");
// ----- 実際にHTML文章を出力する処理
}
}
HTMLを表すコンテンツタイプは「text/html」ですが、その他に「charset」で文字コードも併せても指定しています。この指定をしないと文字化けをしてしまいますので、文字コードまで指定します。
PrintWriterクラス
PrintWriterオブジェクトはサーブレットからクライアントへ文字を出力するためのゲートウェイとなります。一般的なWebアプリケーションでは、このオブジェクトを介して出力した文字がブラウザへ出力されます。
それでは単純に「 Hello World 」と表示するサーブレットを作成してみます。
package com.sitecooler.servlet;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SamplePrintWriter extends HttpServlet {
protected void doGet(
HttpServletRequest req,
HttpServletResponse res)
throws ServletException, java.io.IOException {
res.setContentType("text/html;charset=Windows-31J");
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello World");
out.println("</body>");
out.println("</html>");
}
}
[実行例]