我正在使用 servlet、eclipse 和 tomcat 开发一个 Java Web 应用程序项目。
我希望能够从 servlet 动态存储/创建持久文件,并允许用户使用链接访问文件,而无需将文件存储在数据库中。
我读到 getServletContext().getRealPath("/") 是不稳定的,每次重新启动服务器时都会重置。
我还读到创建一个像“$HOME/.ourapp”这样的目录可以解决这个问题。虽然,我似乎无法找到如何设置 tomcat 以允许用户使用链接访问文件,使用 eclipse-tomcat。
问题:如何设置 eclipse-tomcat 以便网站“http://localhost/”和文件“http://localhost/temp-xx.txt”的链接相同,同时还允许动态创建持久数据“temp-xx. txt"由 servlet 生成并允许用户访问它,并且在服务器重新启动时不会被删除。
最佳答案
这变得复杂了,因为 Tomcat 可以使用 DefaultServlet
服务器文件(它只是将文件发送回客户端,正如您对 Web 服务器所期望的那样),但它在内部缓存文件,因此修改其下的文件系统可能会产生一些令人惊讶的行为。
您可以为 DefaultServlet
禁用缓存但我看到有报道说它仍然以令人惊讶的方式表现。我见过的唯一万无一失的解决方案是编写您自己的 servlet,从文件存储的任何地方流式传输文件。
但是编写自己的流式 servlet 并不像您想象的那么简单。如果您希望它具有高性能,您将需要启用所有不错的 HTTP 功能,例如范围请求、eTag、If-Modified-Since 以及 DefaultServlet
的所有内容。已经提供。也许你应该开始使用 DefaultServlet
看看它能让你走多远。
配置实际上非常简单:只需添加一个 <Resources>
元素到你的META-INF/context.xml
文件并使用 postResources
属性。您可以在 Tomcat users' guide for resources 中找到文档.
关于java - 如何为 eclipse-tomcat 设置持久存储以进行备份和流式传输(不使用数据库)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32763578/