Java Servlet Mimetype 和 Internet Explorer mimetype 处理错误

标签 java internet-explorer servlets mime-types

我有一个 servlet,可以返回 text/html 或 application/pdf 内容。显然,Internet Explorer (IE7) 似乎无法正确处理应用程序/pdf。

例如。 Servlet 输出 A 可能返回 html 内容:

[此处为 html 内容]

然后 Servlet 输出 B 可能会返回 PDF 内容:

[此处为 pdf 内容]

与这些输出关联的 URL 是相同的 Servlet URL:http://web/Servlet

在线阅读,看起来 IE 可能有一个有缺陷的机制,并且不信任从服务器设置的 mimetype/内容类型。主要是,我在 Internet Explorer 下遇到问题,我输出 PDF,但由于某种原因 IE 将内容类型恢复为 text/html,并且我得到一个空白的 html 页面。

以下是有关该问题的引用:

“即使修复了 PDF servlet 以将响应的 MIME 类型设置为 application/pdf,现在仍然潜伏着另一个错误。如果没有找到结果,则响应会使用 HTML 将此信息发送回客户端!现在由于 IE 的 MIME 类型恶作剧,响应将使用 text/html MIME 类型显示。但是大多数其他浏览器将信任从服务器发送的 application/pdf MIME 类型”

在具有相同 Servlet 的 Firefox 中,我没有遇到此问题。

在java代码中,我本质上是设置这些响应 header value :

Expires=0
Cache-Control=max-age=1, must-revalidate, no-cache, post-check=0, pre-check=0
Pragma=public
Content-Disposition=inline; filename=filename_1257804404940.pdf
Content-Length=457834
Connection=Keep-Alive
Content-Type=application/pdf
Content-Language=en-US

以上是 Firefox 的输出。在IE下,我可能会得到:

Content-Length=0
Connection=Keep-Alive
Content-Type=text/html
Content-Language=en-US

尽管代码是相同的。 这是我的问题,如何避免这个问题?

最佳答案

我们在工作中也遇到过类似的问题。您可以通过在您访问的 URL 中包含具有正确扩展名的文件名来扭转浏览器的 ARM 。

如果您有一个 HTML 服务 servlet 和一个处理 PDF 的 servlet,这显然没有问题;只需将不同的 URL 映射到它们即可。

如果类型是在运行时确定的,您可以通过默认为 HTML 并在需要时返回带有元重定向到 PDF URL 的文档来解决问题。

关于Java Servlet Mimetype 和 Internet Explorer mimetype 处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1704243/

相关文章:

javascript - 将无符号整数数组快速转换为 base64

javascript - 我该如何调试这个奇怪的 IE JavaScript 问题

java - 对jsp文件使用过滤器时出现无限循环

java - 应用程序终止或销毁时文件下载不完整

java - 如何将私有(private) jar 部署到 gitlab Maven 存储库

java - 在文本区域显示OutputStream(System.out)

internet-explorer - Gif 不显示在 IE 中

java - 没有单独的连接表的 Hibernate @OneToMany

javascript - 如何在java servlet中通过javascript刷新图像

java - 通过 HTTPURLConnection 发送 cookie