我有一个JSF2应用程序链接到服务器文件系统上的静态Excel文件。链接是这样一个简单的HTML:
<a href="#{bean.getExcelLink(auction)}">Excel File</a>
这适用于Chrome和Firefox,以及当我的本地Windows 7计算机上的Tomcat中运行应用程序时的IE。但是当使用Jboss AS 7.0.1 Final的Linux登台环境时,IE会尝试在自己的窗口中打开Excel文件并生成一堆垃圾字符。
同样,当应用程序在带有Jboss AS的Linux上运行时,问题仅出现在IE上。
知道发生了什么以及如何解决这个问题?
答案 0 :(得分:1)
显然,响应内容类型错误。鉴于它在Linux中失败但在Windows中成功,这只能意味着使用特定于平台的mime类型映射来确定内容类型而不是webapp / server特定的mime类型映射(Linux机器当然没有安装MS Office,因此它不太清楚mime类型的.xls
或.xlsx
文件。这反过来只意味着您没有直接链接到它,而是使用通用servlet来传输文件。
如果这是真的,那么您实际上应该使用ServletContext#getMimeType()
来确定基于文件扩展名的内容类型,而不是使用特定于平台的mime类型映射的URLConnection#guessContentTypeFromName()
。服务器在其自己的web.xml
中有一个预定义的所有默认mime类型列表,其中包含<mime-mapping>
条目的风格,您可以在webapp自己的web.xml
中覆盖/扩展它们。