使用Internet Explorer发出Excel文档

时间:2009-03-05 13:52:02

标签: java internet-explorer jsp servlet-filters

我遇到了一个问题,IE没有打开像Firefox这样的Excel文档的“另存为/打开”对话框。

所以我创建了一个使用'* .xls'作为url模式的servlet过滤器。我现在面临的问题(因为这是我创建的第一个过滤器)是如何获取用户想要的文件的名称,以便正确填充对话框。目前,当用户选择给定页面上的链接时,将调用过滤器。

以下是我提出的建议:

以上就是我的doFilter()。

String fileName = "fileName.xls";

HttpServletRequest httpRequest = (HttpServletRequest) pRequest;
String requestURI = httpRequest.getRequestURI();

if(StringUtils.isNotBlank(requestURI))
{
  String uri[] = StringUtils.split(requestURI, '/');
  fileName = uri[uri.length - 1];
}

HttpServletResponse httpResponse = (HttpServletResponse) pResponse;
httpResponse.setContentType("application/vnd.ms-excel");
httpResponse.setHeader("Content-disposition", "attachment; filename=\"" + fileName +"\"");

的web.xml:

<filter>
    <filter-name>ExcelFilter</filter-name>
    <filter-class>vsg.rp.common.ExcelFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ExcelFilter</filter-name>
    <url-pattern>*.xls</url-pattern>
</filter-mapping>

这一切都在我的开发盒上运行:Windows XP,JBoss,Eclipse,Oracle。但是当它在测试服务器上运行时 - Linux,Apache / JBoss,Oracle - 它不起作用。似乎甚至没有调用过滤器,没有抛出错误等等。任何想法为什么会发生这种情况?

3 个答案:

答案 0 :(得分:5)

您希望适当地设置内容类型以及内容处置标题,因此:

  

response.setContentType( “应用程序/ vnd.ms-EXCEL”);
  response.setHeader(“内容处置”,   “attachment; filename = \”“+ filename +   “\”“);

答案 1 :(得分:1)

使用Content-Disposition HTTP标头并将其设置为:

attachment; filename=myworkbook.xls

关于这个问题的全部是Microsoft Knowledge Base Article。这是一个example of setting Content-Disposition in Java code

答案 2 :(得分:0)

除了设置内容类型的标题之外,您还需要确保服务器不要告诉浏览器不要缓存该文件。

在IE版本中,如果你告诉IE不要缓存文件,它会愉快地下载文件...然后尝试从保存文件的目录中打开文件...但是由于标题说“不” t缓存“它需要字面意思,并没有保存文件,因此Excel抛出一个错误说,”没有文件!“。

长话短说, 告诉IE CACHE文件