我想在运行时修改Portlet的属性文件。 portlet部署在Tomcat 7.0.23中,属性文件位于“/ WEB-INF / classes / content”中,我可以通过下面的代码访问它。实际上,代码在没有任何异常的情况下执行,但新添加的属性不会保存到属性文件中。
String fileName = "MyProps.properties";
String relativePath = "/WEB-INF/classes/content/";
String fullPath = "c:/tomcat-7.0.23/webapps/my-portlet/WEB-INF/classes/content/";
try {
String path = relativePath + fileName;
InputStream in = getPortletContext().getResourceAsStream(path);
Properties props = new Properties();
props.load(in);
props.setProperty("test", "test");
File file = new File(fullPath + fileName));
FileOutputStream out = new FileOutputStream(file);
props.store(out, "");
} catch(Exception ex) { // error handling here}
添加新属性后,我可以用
进行验证props.list(System.out);
它确实被添加了。 context.xml文件包含以下条目:
antiJARLocking="true"
antiResourceLocking="true"
这是在正在运行的Tomcat实例中添加/更改属性的正确方法,还是应该采用不同的方法?如果是后者,怎么能最好地实现呢?
非常感谢你的回答!
答案 0 :(得分:4)
您绝对应该 依赖于能够更改已部署的Web应用中包含的文件。此时控制已被移交给容器,文件可能被覆盖,或者甚至可能无法写入。它还给应用程序部署者带来了负担,因为现在他们不能简单地吹走爆炸的WAR文件夹(如果存在)并重新部署存档。
作为您的方法的替代方法,请考虑将属性文件放在Web应用程序外部的位置。我见过的成功使用的一种方法是:
使用此设置,您永远不必担心无法写入文件或被容器覆盖。