问题描述
通过将我的Java Web应用程序(myapp.war
)放入Ubuntu 10.04上的Tomcat上的webapps
目录中进行了部署。
该应用程序需要在文件中保存一些数据。但是,正在运行Tomcat(tomcat6
)的用户没有对主目录/usr/share/tomcat6/
的写访问权,也没有对当前工作目录/var/lib/tomcat6/
的写访问权,因为两者均属于root
。
那么,Web应用程序应将数据存储在哪里?我希望它不是webapps目录中提取的档案。可以很容易地将其删除。可以配置Tomcat,而不提取.war文件。这样就不会有提取的密码。
也许/var/lib/tomcat6/
应该属于用户tomcat6
,这是Ubuntu中的错误吗?
最佳办法
如果文件的持久保存时间不必超过servlet上下文的life-cycle,则servlet容器为每个servlet上下文提供一个专用的临时目录,由javax.servlet.context.tempdir
属性指定。
请参阅Servlet Specification 2.3,第3章Servlet上下文
3.7.1 Temporary Working Directories
The convenience of a temporary storage directory is required for each servlet context. Servlet containers must provide a private temporary directory per servlet context and make it available via the javax.servlet.context.tempdircontext attribute. The object associated with the attribute must be of type java.io.File
次佳办法
Witek在回答自己的问题时说/var/lib/tomcat6/webapps/ is writable
-至少是在安装他的Ubuntu版本时。在我的RHEL 5.2系统上,甚至不存在/var/lib/tomcat<X>
,因此没有可写或不可写的webapps子目录,这导致了我的答案。
问:Java Web应用程序应将数据存储在哪里?答:无论您在何处配置它来存储其数据。
在web.xml中将位置配置为<context-param>
或在myApplication.properties文件中。
-
我可以将其放置在框上所需的位置,SysAdmins可以将其放置在生产系统上所需的位置。
-
您稍后可以改变主意。
-
您不需要符号链接(以前这些符号链接已经在我身上神奇地消失了,从而破坏了系统。)
-
您可以具有几组测试数据,并且只需将配置指向所需的任意一组即可。
-
您可以将其放在有磁盘空间的任何地方。
-
稍后您将改变主意。
第三种办法
我在启动板上找到了解决方案。 /var/lib/tomcat6/webapps/
是可写的。这意味着以下工作:
File myFile = new File("webapps/myfile.txt");