【Java & Tomcat】文字出力用のストリームの取得(getWriter)※サンプルプログラム付き

  • このエントリーをはてなブックマークに追加
  • Pocket

サーブレットの処理結果としてなんらかの文字を出力するにはgetWriterという名称のメソッドを使用する必要がある。ここではその仕組みについて説明する。

文字出力用のストリームの取得の仕方

文字出力用のストリームの取得とは、HttpServletResponseオブジェクトから文字を出力する入れ物を取り出すことである。ストリームというのは文字が順番に連続して並んでいる入れ物のことである。取り出したストリームへ文字を書き出すと、それがクライアントに送られ、画面に表示される。

書き方の基本は簡単だ。

PrintWriterストリームの参照変数 = HttpServletResponseオブジェクト. getWriter();

実際のコードはこうなる。

PrintWriter out = response.getWriter();

ストリームを取り出したら、次に行うことはストリームに文字列を書き込むことである。取り出したストリームに書き込むためにPrintWriterクラスのメソッドが準備されている。

代表的なのがprintlnメソッドである。boolean型、char型、char[]型、int型、long型、float型、double型、String型の値を文字列としてストリームに出力する。その後、文字を出力した行を終了する。

書き方はこうである。

ストリームの参照変数.println(値);

実際のコードはこうなる。

out.println("ABCD");

もし、一行をいくつかに分けて出力する必要があるときは、最後の出力以外のメソッドをprintにすればよい。こうすれば行は終了しない。

ストリームの参照変数.print(値);

もし、上のABCDを連続して書いたprintlnのコードをふたつに分けて書いたとするとコードはこうなる。

out.print("AB");

out.println("CD");

他にも必要に応じて使えるメソッドがある。主要なメソッドとその特徴を挙げておく。詳細はPrintWriterクラスの仕様を参照してください。

文字列出用メソッド

説明

append(値);

Char型の文字かCharSequence型の文字列の値を、現在の文字列の後に追加する。

append(値、開始位置、終了位置);

CharSequence型の文字列の値の開始位置から終了位置までを、現在の文字列の後に追加する。

printf(フォーマット、引数);

値をフォーマットに従って文字列として出力する。

getWriterのAPI仕様

getWriter()

戻り値の型

java.io.PrintWriter

内容

文字テキストをクライアントに送ることができるPrintWriterオブジェクトを戻す。PrintWriterは、getCharacterEncoding()メソッドによって戻される文字コードを使用する。もしレスポンスの文字コードが、getCharacterEncodingメソッドの仕様に従って指定されていないならば(すなわち、メソッドはデフォルト値ISO-8859-1だけを戻す)、getWriterメソッドはそれをISO-8859-1へと変更する。

PrintWriterのflush()メソッドと呼ばれるメソッドはレスポンスをコミットする。

このgetWriter()メソッドかgetOutputStream()メソッドのどちらかが、ボディを書くために呼び出されるかもしれないが、両方は呼び出されることはない。

戻り値:文字データをクライアントに戻すことができるPrintWriterオブジェクト

例外:

java.io.UnsupportedEncodingException -もしgetCharacterEncoding()メソッドによって戻される文字コードが使用できないならば。

java.lang.IllegalStateException -もしgetOutputStreamメソッドが、このレスポンスオブジェクトのためにすでに呼び出されているならば。

java.io.IOException -もしインプットもしくはアウトプットの例外が起こるならば。

参照:

getOutputStream(), setCharacterEncoding(java.lang.String)

サンプルプログラム

このサンプルプログラムは、getWriterを使って文字出力用のストリームを取得し、そのストリームに様々なメソッドを使って値を出力する。

実行結果

ブラウザにURL:http://localhost:8080/Servlet/GetWriterを入力し、Enterを押す。

表示されるブラウザ画面:

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] アノテーションの宣言をする。
  • [2] HttpServletを継承して、HelloWorldクラスを定義する。
  • [3] doGet()メソッドをオーバーライドして定義する。
  • [4]-[12] 表示するために様々な型の変数を宣言する。
  • [13] Content Typeを設定する。
  • [14] 文字列出力用のストリームを出力するためにPrintWriterオブジェクトを取得する。
  • [15] HTMLの画面の開始を宣言する。
  • [16]-[22] appendメソッドを使って値を出力する。
  • [23]-[26] printfメソッドを使って値を出力する。
  • [27]-[48] printメソッドを使って値を出力する。
  • [49] HTML画面終了を宣言する。

まとめ

この記事では実際にgetWiter()を使用して様々な文字出力が出来ることを確認した。サンプルプログラムを実際に動作させて確かめてみよう。また、サンプルプログラムを自由に書き換えてそれが出力結果にどう影響するかを確認してみよう。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメントを残す

*

ゼロからエンジニアを目指す方へ
短期間でエンジニアになる方法

必要な勉強や技術の最新動向、本当に使えるIT資格、学習に役立つ国からの奨励金などの情報を無料でお届け

資料を見てみる