検索
連載

Java Tips:レスポンスとしてバイナリ情報を返すにはJAVA Developer

リクエストに応答したサーブレットが返すレスポンスは、HTMLのような文字データだけでなく、JPEG画像のようなバイナリデータも可能です。このTipsでは例としてJPEGデータを返す方法を紹介します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

getOutputStreamメソッドを使う

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 サーブレットでは,レスポンスとしてHTMLのようなテキストデータを返す場合,javax.servlet.HttpServletResponse#getWriterメソッドを使ってPrinterWriterオブジェクトにテキストデータを書き出すか,対応するJSPにフォワードします。これら対し,レスポンスとしてバイナリデータを書き出す場合は,HttpServletResponse#getOutputStreamメソッドを使ってServletOutputStreamオブジェクトを取得して行います。

 手順としては,HttpServletResponse#setContentTypeメソッドでコンテンツ形式を指定します。パラメータは,MIMEタイプを表す文字列で,JPEGデータであれば"images/hare.jpg"を指定します。バイナリデータの場合,データを書き込む際テキストデータのように文字エンコーディングに対する処理を行わないため,setContentTypeメソッドの呼び出しは,バイナリデータを書き込んだあとでもかまいません。

 バイナリデータの書き出しは,データ型ごとに用意されたServletOutputStream#printおよびprintlnメソッド,writeメソッドを使います。printlnメソッドは,データを書き出したあとに改行文字を書き出します。次のリストは,/images/hare.jpgファイルを読み込み,そのままレスポンスとして返すものです。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 データの読み書き部分は,1バイト単位で読み書きすることも可能です。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 この場合でもレスポンスは正しく返るのですが,リスト2はリスト1に比べ読み書き時間がかかります。ファイルサイズが大きくなるほど,その違いは顕著です。このような場合は,1バイト単位の読み書きを行うべきではないでしょう。1回の読み込みサイズに関しては,読み込むバイナリデータのサイズやメモリー容量を十分に考慮して決めましょう。

 「JAVA Developer」より毎週役立つJava Tipsを配信中。ほかにも参考になるTipsは、JAVA Developerサイトのバックナンバーから探すことが可能です。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.

ページトップに戻る