Java 我应该将应用程序生成的HTML报告放在哪里,而它们没有';部署新WAR文件时不会被删除?

Java 我应该将应用程序生成的HTML报告放在哪里,而它们没有';部署新WAR文件时不会被删除?,java,tomcat,web-applications,Java,Tomcat,Web Applications,我有一个简单的web应用程序,它允许用户上传本地用户数据,然后他们可以根据上传的数据生成HTML报告。生成HTML后,我会显示一个指向报告的链接,他们可以单击该链接在浏览器中查看,也可以与其他人共享该链接 问题是,我目前正在将“/Upload”文件夹放在“WEB-INF”文件夹中,因为我不希望外部世界可以访问该文件夹的数据。然后,我将“Reports”文件夹放在web应用程序的根目录中。这项工作很好,因为我可以将WAR文件部署到他们的服务器上,用户可以上传文件,然后请求生成HTML报告。问题是,

我有一个简单的web应用程序,它允许用户上传本地用户数据,然后他们可以根据上传的数据生成HTML报告。生成HTML后,我会显示一个指向报告的链接,他们可以单击该链接在浏览器中查看,也可以与其他人共享该链接

问题是,我目前正在将“/Upload”文件夹放在“WEB-INF”文件夹中,因为我不希望外部世界可以访问该文件夹的数据。然后,我将“Reports”文件夹放在web应用程序的根目录中。这项工作很好,因为我可以将WAR文件部署到他们的服务器上,用户可以上传文件,然后请求生成HTML报告。问题是,当我在WAR文件中向他们发送软件更新时,它会删除/MyWebApp目录中的所有人,包括/Upload和/Reports文件夹。因此,用户必须重新上传数据,并将其现有的任何报告丢失在“/reports”文件夹中

现在我确实找到了StackOverflow上/Upload文件夹的答案。

但我仍然不知道把我的“/报告”文件夹放在哪里?我想我必须像现在一样将它放在web应用程序上下文目录中,以便Tomcat服务器将其作为链接(例如:)

另外需要注意的是,这个应用程序仅在ApacheTomcat上运行,我没有通过Apache服务器发送请求。我们决定使用Tomcat在用户本地服务器上运行它,因为它似乎更容易部署,然后尝试部署和配置两者以协同工作。此外,每个服务器站点只有2-3人在使用这个应用程序,有了这个负载,Tomcat似乎能够独立处理所有事情。那么,这可能会使解决方案变得更加困难


任何具有这方面最佳实践的hep都将不胜感激。

将上传的文件放在磁盘上的策略与将报告放在磁盘上的策略应该没有区别:两者都是webapp在部署过程中生成的文件(忘记客户端上传文件的事实)需要以同样的方式加以保护


如果您愿意升级到Tomcat 7,则有一个新的
属性,
别名
,它将允许您的Web应用程序提供该目录中的内容,但不会在Web应用程序取消部署时将其删除。

看起来Tomcat 7中的新“属性”“别名”将起作用,不幸的是,我们还不能移动到Tomcat 7。我对“/Upload”文件夹的策略存在的问题是,我希望能够提供指向生成的报告的链接,而我认为该策略对“/Reports”文件夹不起作用。因此,当我的serlvet可以访问服务器上任何位置的数据时,我不认为Tomcat可以在没有某种配置的情况下提供上下文之外的内容,这正是我试图弄明白的。在Tomcat7之前人们都做了些什么?你如何为上传的文件提供服务?或者,你根本不为他们服务吗?在这两种情况下,您都可以编写一个servlet来映射磁盘上的URL空间,就像DefaultServlet一样。请记住,您的代码可以从任何地方自由读取文件(不包括文件权限和安全管理器)。不,我不提供上载的文件,我只需要确保它们不会在每次推送新WAR文件时被清除。否则,用户每次都必须重新上传它们。现在我提供报告。我最后添加了一个新的上下文来为报告服务。就像你说的,我的应用程序可以写到任何它想要的地方。因此,我在新的上下文中编写报告,然后只提供一个链接,而不是在我们转到Tomcat 7之后,我将按照您的建议使用“别名”。不要忘记,如果您取消部署
MyWebReports
,这些报告将被吹走。是的,可以。谢谢你的帮助。我最后创建了另一个web上下文来保存应用程序生成的数据。通过这种方式,可以从它提供报告,当我部署一个新的WAR文件来更新我的应用程序时,它不会删除这个新上下文中的内容。现在看来这是可行的,但一旦我们转到Tomcat 7,我认为@christopher schultz(见下文)提供的答案将是最好的解决方案。