【问题标题】:Files written in a JSP page are not found by TomcatTomcat 找不到在 JSP 页面中写入的文件
【发布时间】:2014-11-19 17:45:09
【问题描述】:

我开发了一个 JSP,它在部署目录的文件夹中写入一个 PNG 文件。在写入内容、刷新、关闭和同步文件后,我尝试使用标签在同一个 JSP 中显示它,但大多数时候图像不会出现在浏览器的渲染页面中(返回 404 的请求不是找到响应)。文件已创建(我可以在系统资源管理器的文件夹中看到该文件)。

我使用 Tomcat 8 作为 Web 容器,并在 Eclipse Luna IDE 中执行 webapp 和 Tomcat。

谁能帮帮我?

【问题讨论】:

  • 文件系统可能会对您最近使用的文件施加锁定,并且在这些锁定被释放之前,您无法读取该文件或者它同时被另一个进程重用...
  • 请记住,如果文件被写入 WEB-INF 目录内,您将无法直接从浏览器 (IIRC) 中请求它

标签: java eclipse jsp tomcat


【解决方案1】:

我相信之前已经以稍微不同的形式回答过这个问题:

Tomcat 7 returns "304 Not Modified" on modified/non existent resource

但是,由于您可能只生成一次 PNG 文件(或者可能不是很频繁),因此 IMO 是一个有效的用例。

由于 Tomcat 确实进行缓存,我认为您可能需要考虑在您的 <Context> 上使用 cachingAllowed="false"。请注意,您可能会观察到性能略有下降,因为 Tomcat 将针对每个静态请求访问磁盘而不是查询其缓存。

您还可以选择编写自己的 servlet 以直接从磁盘提供自动生成的 PNG 文件。使用 Tomcat 的DefaultServlet 支持的所有花里胡哨的功能编写您自己的静态资源 servlet 可能会很复杂,但是您可以跳过其中的很多内容,而不管客户端请求什么,始终提供整个文件。

【讨论】:

  • 非常感谢。我对 Tomcat 选项“cachingAllowed”一无所知。我试试看。
猜你喜欢
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多