- - PR -
jsp サーブレット 画像表示
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-07-18 22:02
いつもお世話になっています。jspに画像ファイルを表示させようとしてがんばってはみたもののどうしても表示されません。他のスレッドなんかで見てまねてはみたのですが・・。
package action; import java.io.*; import java.util.Iterator; import javax.servlet.*; public class Gazou extends HttpServlet{ public void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ int data; response.setContentType("image/jpeg"); PrintWriter out = response.getWriter(); // ServletOutputStream out = response.getOutputStream(); BufferedInputStream in = new BufferedInputStream(new FileInputStream("表示させたい.jpg")); while ((data = in.read()) != -1) { out.write(data); } } } jspでは無理というスレッドがあったのでサーブレットに生コードを 書いて表示させたのですが、最初にServletOutputStreamで表示したところ 例外でgetWrete()がでたので、PrintWriterに変えてみたところ画像ファイル らしき形跡は表示できたのですが、 中身が表示されないのです。パスはあってるとおもいます。色々とたしかめて みました。FilenameFilter()をつかってフォルダの中身を確認したり、 パスを変えてみるとnot foundが返ってきたりするので ファイル自体には当たっているみたいなのですが どうしてもダメでした。 どうかよろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2007-07-18 22:20
「表示させよう」じゃなくて「ダウンロードさせよう」じゃないの? コードを見る限り、そのように見えます。 | ||||||||||||||||
|
投稿日時: 2007-07-18 22:31
画像を表示するだけなら適当な場所に画像を置いてimgタグで表示させればいいんじゃ?
Servletで動的に画像を作る場合はresponse.getOutputStream()で得られたストリームに画像データを流し込んであげればできます。 コンテンツタイプの設定も忘れずに。 | ||||||||||||||||
|
投稿日時: 2007-07-18 22:58
確かJSPでも可能だけど、JSPといいつつ全面スクリプトレットに
なってしまうのでJSPである意味がない、という話。 開発の仕方としては 1.画像のURL(〜.jpgなど)でServletを呼び出すようにweb.xmlを編集して呼び出しテスト 2.1で呼び出したServletで静的ファイルから読み出した画像ファイルのバイナリ列をRequestから取得したOutputStreamに書き出しすようにし、URLを直接叩いて表示確認 3.2で静的ファイルから画像を読み出した部分を動的に作った画像からImageIOで作ったバイナリに変更して表示確認 4.3のURLを静的HTMLにimgタグで埋め込んで表示確認 5.4の静的HTMLをJSPにして動的コンテンツから動的画像を呼ぶようにして表示確認 みたいに順番にやっていくとよいでしょう。 一度に作ろうとせず、わからない部分をひとつずつ確認するのがコツです。これを急がば回れといいます。 Webシステムなんてのは、基本的にHTTPの要求にファイルを返すだけのシステムです。 通常はそれがHTMLで、かつ、動的に生成されたものであるということ。 それがCSVになろうがXMLになろうが、画像になろうが、要はファイルを返すだけです。 | ||||||||||||||||
|
投稿日時: 2007-07-18 23:40
早速のご返答ありがとうございます。
そうなんです。HTMLでimgタグでもええじゃん。 と思うんですが。それがだめなんです。 画像をみせたいんですがパスは見せたくなかったんです。 なので、画像を描画するという作業がしたかったんです。 あとdogetで取り出したくなかったり、 FTPで画像ファイル自体ダウンロードさせたりしたら?とか 考えて いろいろとためしては見たのですが... とりあえず、皆様からいただいた ヒントを頼りにかきだしてみます。 ありがとうございます。 | ||||||||||||||||
|
投稿日時: 2007-07-19 07:00
画像のパスをServletContext#getRealPathでとってないだけとかですかね?
| ||||||||||||||||
|
投稿日時: 2007-07-19 08:01
ブラウザでそのサーブレットでどういうものがかえされますか?
| ||||||||||||||||
|
投稿日時: 2007-07-19 10:44
画像データ出力する場合は、PrintWriterではダメですね。 以下ServletAPIのJavaDoc引用
ブラウザは、PrintWriterのデフォルト文字エンコーディングでエンコード されてしまったJPEGデータを表示しようとしてますね。 このコード
で例外スローされるということは、ドキュメントによると 以下ServletAPIのJavaDoc引用
ということなので、PrintWriterの取得コードをコメントアウトしない状態で、 getOutputStreamのコードを実行したということではないですかね。 ・Javadocをよく読みましょう ・最低限try〜catchブロックで囲んで、スタックトレースをログ出力するようにしましょう [ メッセージ編集済み 編集者: 小僧 編集日時 2007-07-19 10:56 ] |