- PR -

JSPでバイナリデータを出力するには

1
投稿者投稿内容
JBOY
ベテラン
会議室デビュー日: 2003/02/27
投稿数: 72
投稿日時: 2003-11-21 17:17
いつも何気にお世話になっております。

どなたかJSPでバイナリデータを出力する方法を教えて下さい。

コード:

<%@page contentType="application/pdf"%>
<%@ page import="PdfData"%>
<%
PdfData pdf = (PdfData)session.getAttribute("data");
ServletOutputStream sos = pageContext.getResponse().getOutputStream();
%>
<html>
<head>
<title>PDF表示できるかな</title>
</head>
<body>

<%
  // pdf.getPdf()がバイト配列です。。
sout.write(pdf.getPdf());
%>

</body>
</html>



このようなコードだと一応PDFが表示されます。
ですが、コンソールには
java.lang.IllegalStateException: このレスポンスに対してgetOutputStream()はすでに呼び出されています
というエラーが表示されてしまいます。
ひょっとしてバイナリデータなどはservletで出力したほうが良いのでしょうか?
どなたかアドバイスお願いします。

[ メッセージ編集済み 編集者: JBOY 編集日時 2003-11-21 17:22 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2003-11-21 17:21
例外が示す通り、ServletResponse.getOutputStream() は getWriter() の後に呼び出せません。これは仕様で定められています。
もしできたとしても、HTML 文書中に PDF を直に埋め込むことはできなさそうですが・・・。

JSP の目的からは外れているような気がしますので、ご想像の通り Servlet で行ってはいかがでしょうか。

おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-11-22 21:57
JspWriterはWriterのサブクラスで、Writerはキャラクタストリームを出力するためのものです。よってバイナリの出力には適していません。JSPではキャラクタデータのみを出力する、ということでしょう。
JBOY
ベテラン
会議室デビュー日: 2003/02/27
投稿数: 72
投稿日時: 2003-11-28 14:34
返信が大変遅くなってすいません。
返信した気でいました・・・。

そうですね。ヤッパリservletでやる方法が一番なのですね。
了解しました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)