bas*_*neu 28 java grails tomcat
我的最新项目能够使用数据库中的信息生成文档.
因此,我将文档模板按需复制到用户的临时文件夹并进行修改.我这样做是因为每个模板在修改期间都必须可用.
之后,用户通过我的webapp下载链接获得他的文档.
我的问题:存储webapp数据是否有最佳实践?我觉得温度会很好.但是因为我必须自己删除数据,所以我想把它放在tomcat webapp文件夹中的WAR文件夹旁边.
我使用Windows 2003作为Tomcat的主机系统.我为我的项目使用Grails,Java和Maven ......不知道是否需要这些信息.
编辑:
我提出这个微不足道的问题的主要原因是......如果我负责创建/删除我的临时数据......在系统上使用临时文件夹仍然是一个好习惯吗?我不确定这个......
Bal*_*usC 34
在webapp中存储(敏感)特定于用户的文件时,请确保将其存储在某处/WEB-INF并使用Servlet(间接)检查登录用户访问它们,否则万维网上的任何用户/黑客都可以访问它们.优点是它可以通过ServletContext#getResource()或以编程方式轻松访问#getRealPath().缺点是,每当您重新部署Web应用程序时,它们都会丢失.
您还可以将它们存储在默认的临时文件夹中.优点是它可以通过标准API来访问,例如File#createTempFile()或System.getProperty("java.io.tmpdir").临时文件夹的缺点是,操作系统控制的文件夹清理不能从Java控制,因此每当您关闭资源但稍后仍需要它时,您可能会有丢失的风险.
您还可以将它们存储在webapp外部的固定文件夹中.它的优势在于,无论何时重新部署webapp,这些东西都不会丢失.缺点是您需要自己创建具有足够操作系统权限的文件夹,这可能不适用于第三方主机.
清理自己的临时资源当然属于您自己需要完成的任务.我不认为这是一个问题.
超过优点/缺点.
mha*_*ler 13
java.io.Filefor操作,则只将数据库中的文档存储到临时文件中,启动处理并将其读回数据库.Web容器提供指向临时目录的上下文属性:
Servlet规范SRV.3.7.1临时工作目录
每个servlet上下文都需要一个临时存储目录.Servlet容器必须为每个servlet上下文提供一个私有临时目录,并通过ServletContext.TEMPDIR(javax.servlet.context.tempdir)上下文属性使其可用.与该属性关联的对象必须是java.io.File类型.
示例:
File appTempDir = getServletContext().getAttribute(ServletContext.TEMPDIR);
File tempFile = File.createTempFile("process1", ".txt", appTempDir);
tempFile.deleteOnExit();
try {
...
} finally {
tempFile.delete();
}
Run Code Online (Sandbox Code Playgroud)
我相信临时文件属于临时文件夹.在您的情况下,您自己删除文件,但如果文件删除操作中有错误怎么办?或者如果在删除文件之前关闭服务器怎么办?如果您写入临时文件夹,至少有一些希望稍后(手动或通过某个过程)清理文件.
即使应用程序希望存储持久数据(即非临时数据),我认为它仍然不应存储在Tomcat目录中,因为每当您部署新版本的应用程序时,这些目录都会被删除或覆盖(甚至安装新版本的Tomcat).
有用的方法:
java.io.File.createTempFileSystem.getProperty("java.io.tmpdir")