我需要在“工作目录”中放置一些设置文件才能配置我的应用。
我已经尝试过把它放在./WEB-INF/但是没有用,任何想法在哪里都是'工作目录'?,这是一种以编程方式获取它的方法吗?
感谢。
答案 0 :(得分:4)
虽然我意识到你并没有特别提出这个问题,但这可能会解决你的真正问题......
您是否考虑过将配置文件放在WEB-INF / classes下? Web应用程序中的许多配置文件作为资源加载,而不是作为“文件”对象加载。如果将配置文件放在WEB-INF / classes下,它们将通过ClassLoader作为资源提供。
编辑:作为旁注,将配置文件直接放在WEB-INF下面有一点点危险,因为只要输入正确的URL,就可以向最终用户公开。这取决于您的Web容器中的其他设置,但这是一种真正的可能性并且不止一次发生过。希望你不要做那样保存数据库连接信息......
答案 1 :(得分:3)
我认为没有办法在web-app中获取工作目录。但是,您可以使用ServletContext.getRealPath()
方法获取与给定虚拟路径对应的实际路径。
答案 2 :(得分:3)
Servlet规范为您的Web应用程序提供了一个特殊的ServletContext特定工作目录,该目录根据Tomcat的标准安全策略具有读取,写入和删除权限:
File workingDir = (File)servletContext.getAttribute(ServletContext.TEMPDIR);
您通常会在其下创建一个子目录以满足您的特定需求,因为其他组件(尤其是Tomcat本身)也会根据自己的需要使用它。
答案 3 :(得分:2)
如果您认为自己需要,请再想一想。
如果您的应用程序的根目录是WAR文件而不是“目录”,该怎么办?
请描述您认为自己需要的内容。也许有一个比你获得绝对目录路径更好的解决方案。
我错过了关于配置文件的一点。下面的答案是正确的:把它们放在WEB-INF / classes中; getResourceAsStream()
是您阅读内容的朋友。
这适用于WAR文件,是否爆炸。它使您的网络应用程序保持良好和便携。
答案 4 :(得分:0)
要存储一些配置设置而不向我的项目添加javax.servlet
,我在config目录中创建了一个字符串&我的配置文件:
import java.io.file;
String webAppRoot = System.getProperty( "catalina.base" );
String s = File.separator;
String configDir = webAppRoot + s + "webapps" + s + "myApp" + s + "WEB-INF" + s + "config";
String configFile = configDir + s + "myApp.config";
使用File.separator
可确保此解决方案适用于Windows和Windows Linux操作系统。