―Servlet/JSPリファレンス―

@ITハイブックス編
2003/10/24
Javaプログラミング
ワンポイントレクチャーについて

   サーブレットからの出力

   ワンポイントQuestion

 クライアントへの出力チャネルを獲得するメソッドは、次のうちどれですか?(複数選択)

A getBuffer()
B getChannel()
C getStream()
D getOutputStream()
E getWriter()

   解説

 サーブレットからクライアントへ応答を返す場合は、サービスメソッド(doGet、doPostなど)に渡されるHttpServletResponseの以下のメソッドを使用してクライアントへの出力チャネルを獲得します。

PrintWriter getWriter()
クライアントへの応答を文字テキストで送信する場合に使用します。

ServletOutputStream getOutputStream()
クライアントへの応答をバイナリデータで送信する場合に使用します。

 文字テキストを送信する例を具体的に見てみましょう。まず以下の画面をご覧ください。

クライアントへの表示例

 この画面のHTMLファイルは、以下のようになっています。

<HTML>
<HEAD>
<TITLE>Welcome!</TITLE>
</HEAD>
<BODY>
<H1>ようこそ!サーブレットの世界へ</H1>
</BODY>
</HTML>

 そして、このHTMLファイルを出力したサーブレットは、次のようになっています。

public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
1: resp.setContentType("text/html;charset=Shift_JIS");
2: PrintWriter out = resp.getWriter();
3: out.println("<HTML><HEAD><TITLE>Welcome!</TITLE></HEAD>");
4: out.println("<BODY>");
5: out.println("<H1>ようこそ!サーブレットの世界へ</H1>");
6: out.println("</BODY></HTML>");
}

 文字テキストをクライアントへ送信するので、まず2行目のgetWriter()でクライアントへの出力チャネルを獲得します。戻り値のPrintWriterオブジェクトがクライアントへの出力チャネルになります。

 次に獲得した出力チャネルへprintln()を使用してクライアントに送信したいテキストデータ(つまりクライアントに表示したいHTMLコード)を書き込みます。すると、そのデータがクライアントへ送信されてブラウザに表示され、上記の画面のとおり表示されます。

 getOutputStream()を使用してクライアントへバイナリデータで応答を返すケースは、クライアント側はアプレットなどのプログラムモジュールになる場合です。

POINT
・文字エンコーディングを有効にするためには、getWriter()を呼び出す前にsetContentType()を呼び出す必要があります。

・文字テキストを送信する場合、明示的にsetContentType()を使用して文字コードを指定しないと文字化けの原因となることがあります。

・getOutputStream()を使用してバイナリデータをクライアントに送信した場合には、Webコンテナはバイナリデータをエンコードしません。

・バイナリデータとテキストデータを混在させる場合は、getOutputStream() を使用して、文字データ部分についてはユーザーのプログラム内で管理します。

KEYWORD
出力チャネル
送信データを伝播するための通信経路です。

   ワンポイントQuestionの解答

正解 D、E

Java2ラーニングブック −Web Component Developer編−

本記事は@ITハイブックスシリーズ「J2EEラーニングブック −Web Component Developer編−」(技術評論社)から、一部の内容を編集し転載したものです。本書の詳細は「@ITハイブックス」サイトでご覧いただけます。

 

Javaプログラミング・ワンポイントレクチャー INDEX





Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間