- - PR -
Struts1.1から出力されるコンテントタイプの設定方法について
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2003-08-13 11:56
Struts1.1をWindowsXP + Tomcat4.1.24という環境で使用しています。
Actionのexecute()メソッド内でiTextを使い、コンテントタイプに "application/pdf" を設定しPDFデータをブラウザに出力しているのですが、どうしても "text/html" でコンテントタイプが返されてしまい、ブラウザには開く/保存(IE) のダイアログが表示されてしまいます。うる覚えの記憶だと、execute メソッドからnullを返せば、以降はStruts側の処理は行われずに動作し てくれると記憶していたのですが・・・。念の為EtherRealでもHTTPの レスポンスを見てみましたが、やはり"text/html"でした。 RequestProcessorのcontentTypeを設定してしまうと、そのStrutsアプ リケーション全体で設定が有効になってしまうので、ちょっと使えそ うもありません。普通のサーブレットで実装すれば問題無く動作する と思うのですが、Strutsの枠組みでコントロールできたほうが何かと 便利なので、この方法も取り辛いです。 1.1からこの辺りの設定方法が変わったとかあるんでしょうかね。何か ご存知の方いらっしゃいませんか?。 ------------------------------------------------------------------ struts-config.xml ------------------------------------------------------------------ <action path="/schedule/print.pdf" type="actions.SchedulePrintAction" scope="request" validate="false"> <forward name="failed" path="schedule.errorView"/> </action> ------------------------------------------------------------------ アクション ------------------------------------------------------------------ public class SchedulePrintAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse responce) throws Exception { Document document = new Document(PageSize.A4, 20, 20, 40, 36); PdfWriter.getInstance(document, responce.getOutputStream()); . . . . . responce.setContentType("application/pdf"); return null; } ------------------------------------------------------------------ |
|
投稿日時: 2003-08-13 12:31
うろおぼえですが、たしか、
responce.setContentType(); は、Writerなどの書き込み前に、呼び出すものだった気がします。 |
|
投稿日時: 2003-08-13 12:57
みやもさんの言うとおり、これが原因でした。setContentType()のJavaDocを見たところ、
「PrintWriterの取得前には設定しておくべきです」 と書いてありました。HTTPヘッダの出力タイミングの理解が足りませんでしたね、反省反省。 どうもありがとうございました。m(__)m [ メッセージ編集済み 編集者: 小僧 編集日時 2003-08-13 12:58 ] |
1
