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