我正在尝试在Tomcat中读取属性值。我的计划是使用System.getProperty("LOGPATH")
访问该值,其中LOGPATH
是我的媒体资源的名称。但是我没有找到在Tomcat中设置System属性值的方法。
我们有什么办法可以在Tomcat中设置System属性吗?
由于我没有获得有关设置System属性的任何文档,我想到使用JNDI访问该值。所以我添加了以下条目
<Environment name="LOGPATH" type="java.lang.String" value="c:/temp" />
之后
<GlobalNamingResources>
在server.xml
档案中。
我用来查找JNDI的代码是
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env/");
String path = (String) envCtx.lookup("LOGPATH");
当我执行上面的代码时,我收到以下错误消息。
javax.servlet.ServletException: Name LOGPATH is not bound in this Context
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
然后我在web.xml中添加了一个条目
<resource-env-ref>
<resource-env-ref-name>LOGPATH</resource-env-ref-name>
<resource-env-ref-type>java.lang.String</resource-env-ref-type>
</resource-env-ref>
现在错误消息更改为
javax.naming.NamingException: Cannot create resource instance
org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(ResourceEnvFactory.java:99)
我现在做错了什么?谢谢你的帮助。
答案 0 :(得分:1)
您还需要在Web应用程序的上下文中使用资源链接。上下文通常放在META-INF / context.xml中,看起来像这样:
<Context>
<Resource name="LOGPATH" global="LOGPATH" type="java.lang.String" />
</Context>
这“授予”网络应用程序查看特定Environment
值的权利。
至于设置系统属性,只需在tomcat / conf / catalina.properties中添加一行,如下所示:
LOGPATH=C:/temp
请注意,系统属性适用于所有网络应用,其中每个网络应用都会控制JNDI条目。
答案 1 :(得分:0)
将它作为web.xml中的init-param,并通过ServetContext访问它。
答案 2 :(得分:0)
我在conf / Catalina / localhost下的上下文文件中编写了我的环境字符串,并将其命名为与我的webapp相同。然后我使用Spring的JndiObjectFactoryBean来检索它。希望这有一些帮助。