電子書籍の厳選無料作品が豊富!

Streamについて質問です。
 
サーブレットより、サーバにあるファイルを読み、
それをクライアントでブラウザから表示させようと
思っているのですが、
ファイルが破壊されているためファイルを表示できない。
といった、エラーが出てしまいます。
 
処理の一部としては
=======================================
/* pdfのデータを取得しJSPで表示させる */
 
// getDataよりサーバファイルをバイト配列で取得
byte data[] = getData();

ServletOutputStream sos = response.getOutputStream();

sos.write(data);
sos.flush();
sos.close();
=======================================
のようにしているのですが、JSPで
Content-type = "application/pdf"
を指定しても、AdbeReaderは起動しますが、
ファイルが壊れているのエラーが出て表示されません。
JPGファイルでは成功したのですが、なぜでしょうか…。
 
サーブレット内部でFileOutputStreamを使って
同じバイト配列に対してファイルを作成すると、
問題なくサーバにファイルが作成され見ることが
できるのですが、JSPで表示させると失敗してし
まいます。

正直、不明です。
何か原因のヒントとかあったら教えてください。
 

A 回答 (1件)

JSP だと、スクリプトレット以外の部分が、


空白行なども含めて、自動的に out.print()
に変換されてしまっているんじゃないですか。

work ディレクトリ(TOMCATの場合)などにある、
JSP から自動生成されたサーブレットのコードなどを
確認してみてはどうでしょう。

もしそうなら、JSP ではなくサーブレットで
実装すべきです。


もうひとつ、PDFファイルはテキストとして開いても、
そこそこ読めるので、ダウンロードしたファイルが
元のファイルとどう異なるかを比較するのもよいかと
思います。
    • good
    • 0
この回答へのお礼

返事が遅れまして、すいません。
 
質問の内容がまずかったです。
実装しているのはサーブレットです。
 
で、この問題ですが、close()とflush()がどうもまずいようでした。
実は、このクローズした後に、まだサーブレットの処理が続いているため、イリーガルエクセプションが発生し、ファイルが壊れてしまったようです。
 
とりあえず、対処としてはデータをリクエストにセットして、ディスパッチのサーブレットで、改めてストリームでダウンロードするようにしました。
 

お礼日時:2004/02/29 21:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!