かなり時間をかけてしまったが、やっとデータベース上のBLOB型の画像データをJSPにて出力することができた。
そもそも基本的に勘違いしていたのは、画像を出力するJSPページに遷移する処理の中で、画像データを取得しようとしていたこと。
取得すること自体は問題なくできるのだが、遷移先のJSPのページに画像データを渡す方法がどうしてもわからずに、途方に暮れていたのだ。
だけどもそうではなくて、遷移したJSPの中で、画像を表示するServletを呼び出せばよかったのだ。
具体的には、JSP側には以下のように書く。
<img src="hoge_servlet" />
そんで、そこから呼び出されるServletのほうで、以下のようにする。
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
byteOut.write( DBから取得した画像データ(byte[]), 0, 画像サイズ(int) );
response.setContentType( "image/jpeg" );
response.setContentLength( byteOut.size() );
OutputStream out = response.getOutputStream();
out.write( byteOut.toByteArray() );
out.close();
こうすると、画像を出力するためだけのHTMLが作成されて、それをJSPのイメージタグで参照して画像が表示される。
今までrequestに関してはある程度理解していたのだけど、responseに関しては正直あまり深く考えていなかったので、今回のことでとても勉強になりました。
今のところの問題点としては、基本的にはServletの呼び出しなどは全てStrutsを使っているのだけど、画像の表示に関しては直接Servletを呼び出していること。
まあ、基本的な動きとしては問題ないのだけど、こうやって一部ではStrutsを使って、一部では使わないという設計が良いのかどうかがちょっとばかり不安。
まあ、基本的なことがわかってしまえば、あとは応用でどうにでもなるから、これでまたガシガシ製造ができるぞ~!!
勉強させていただきます!