我的Java Web应用程序(myapp.war
)已部署在Ubuntu 10.04上的Tomcat上的webapps
目录中。
此应用程序需要在文件中保存一些数据。但是运行Tomcat(tomcat6
)的用户没有对主目录/usr/share/tomcat6/
的写访问权限,也没有对当前工作目标/var/lib/tomcat6/
的写访问权,因为两者都属于{{1} }}
那么Web应用程序应该在哪里存储其数据?我希望它不是webapps direcotry中提取的存档。这个可以很容易地被删除。并且可以配置Tomcat,而不是提取.war文件。然后就没有提取的目标了。
也许root
应该属于用户/var/lib/tomcat6/
蚂蚁这是Ubuntu中的错误?
答案 0 :(得分:4)
如果文件的持续时间不超过servlet上下文的生命周期,则servlet容器为每个servlet上下文提供一个私有临时目录,由javax.servlet.context.tempdir
属性指定。
参见Servlet Specification 2.3,第3章Servlet上下文
3.7.1临时工作 目录
暂时的方便 每个都需要存储目录 servlet上下文。 Servlet容器 必须提供私人临时 每个servlet上下文的目录和 通过它提供 javax.servlet.context.tempdircontext 属性。与之关联的对象 属性必须是 输入java.io.File
答案 1 :(得分:2)
我认为这取决于您正在处理的数据类型。大多数情况下,数据进入数据库只是因为它可以快速轻松地执行CRUD。如果你想存储本地化的用户配置并且你不关心它的可移植性,也许你可以存储在user.home下,我为我的一个项目做了这个并且工作正常。所有这一切,我真的不认为这有任何最佳实践,数据库似乎是最明显的选择,因为你可以完成许多不同的任务,而且大多数都可以自由开始。 :)
答案 2 :(得分:2)
我在Launchpad上找到了解决方案。 /var/lib/tomcat6/webapps/
是可写的。这意味着,以下工作:
File myFile = new File("webapps/myfile.txt");
答案 3 :(得分:2)
回答他自己的问题,Witek说/var/lib/tomcat6/webapps/ is writable
- 至少在他安装他的Ubuntu版本时。在我的RHEL 5.2系统/var/lib/tomcat<X>
甚至不存在,因此没有webapps子目录可写或不可写,这导致我的回答。
问: Java Web应用程序应该在哪里存储其数据? A:只要您将其配置为存储数据。
使位置可配置,在web.xml中作为<context-param>
或myApplication.properties文件。
答案 4 :(得分:0)
我没有看到任何关于你应该在本地存储这类数据的具体指导 - 可能是因为你通常将这种数据存储在数据库中。
当我需要存储这样的快速和脏数据时,我将其存储在专门用于该数据的文件系统中,以将其与其他可能陷入其他活动的区域隔离开来。到目前为止,该方法没有任何问题。此外,如果它很重要,请确保将其存储在您备份的地方:)