TomcatでExcelファイルがまともに開けないバグ | 淡々たんのメモ

TomcatでExcelファイルがまともに開けないバグ


http://hp.vector.co.jp/authors/VA000137/tomcat-missing-header-bug.html

Tomcat IEでExcelファイルがまともに開けないバグ
対象バージョン:
4.1.29、5.0.16、5.0.18
現象:
IEでExcelファイルへのリンクをクリックすると文字化けしたテキスト(Excelファイルの中身)が表示されてしまい、Excelで開けない。
原因:
HTTPヘッダが不正なため。
Tomcat 4.1.27までは、Excelファイルへのリンクをクリックした場合、HTTPヘッダにContent-Type: text/plainが返されていた。(IEはこの場合、拡張子を見てExcelを起動するものと思われる)
が、4.1.29以降、Content-Type自体が返されない。欠落している。(IEはこの場合、Tomcatからの正体不明の垂れ流しデータをテキストとして表示するものと思われる)
回避方法:
web.xmlのmime-mappingにExcelを追加する。


<mime-mapping>
<extension>xls</extension>
<mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>

Bugzilla Bug:
#25729(2003/12/23)
備考・メモ:
この件、Excelだけの話ではないので、Apacheのようなちゃんとしたソフトを参考にmime-mappingを見直した方がいいかも。

--------------------------------------------------------------------------------

参考: web.xmlリファレンス
http://www.sk-jp.com/java/servlet/webxml.html#h48

<mime-mapping>

静的コンテンツがリクエストされたときに、ファイルの拡張子に応じて返送する Content-Typeを決定したい場合に指定します。
ここで定義されていない拡張子のファイルがリクエストされた場合は、 (Tomcatでは)レスポンスのContent-Typeが指定されません。 これは望ましくありませんので、Web アプリケーション内で公開するファイルの拡張子に応じた <mime-mapping>要素はきちんと定義すべきでしょう(*)。
なお、いくつかの拡張子については Servlet コンテナのデフォルトマッピングとして定義されており、Tomcatであれば conf/web.xml に記述されている内容がそれに相当します。

<extension>

ファイルの拡張子

<mime-type>

Content-Type:ヘッダに記述されるMIMEタイプ(例:text/html)

例:Webアプリケーション内にPDFを配置したい場合

<mime-mapping>
  <extension>pdf</extension>
  <mime-type>application/pdf</mime-type>
</mime-mapping>

<mime-type>要素に指定できるMIMEタイプは、 http://www.isi.edu/in-notes/iana/assignments/media-types/ に定義されています。
# IEはレスポンスのContent-Typeに関らず、 返された文書をスキャンして適当に処理してしまう場合があって 困ったりするんですが。