Tomcat JNDI查找问题
我正在尝试读取 Tomcat 中的属性值。我的计划是使用 System.getProperty("LOGPATH") 访问该值,其中 LOGPATH 是我的属性的名称。但是我没有找到在 Tomcat 中设置系统属性值的方法。
有什么方法可以在 Tomcat 中设置系统属性吗?
由于我没有获得任何有关设置系统属性的文档,因此我考虑使用 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)
我现在做错了什么?谢谢你的帮助。
I was trying read a property value in Tomcat. My plan was to access the value using System.getProperty("LOGPATH")
where LOGPATH
is the name of my property. However I did not find a way to set a System property value in Tomcat.
Is there any way we can set a System property in Tomcat?
As I did not get any documentation on setting the System property I thought of accessing the value using JNDI. So I added the following entry
<Environment name="LOGPATH" type="java.lang.String" value="c:/temp" />
after
<GlobalNamingResources>
in server.xml
file.
The code I used for looking up the JNDI is
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env/");
String path = (String) envCtx.lookup("LOGPATH");
When I executed the above code, I got the following error message.
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)
Then I added an entry in my 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>
Now the error message is changed to
javax.naming.NamingException: Cannot create resource instance
org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(ResourceEnvFactory.java:99)
What am I doing wrong now? Thank you for the help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您还需要网络应用程序上下文中的资源链接。上下文通常放置在 META-INF/context.xml 中,看起来像这样:
这“授予”网络应用查看特定
Environment
值的权利。至于设置系统属性,只需在 tomcat/conf/catalina.properties 中添加一行,如下所示:
请注意,系统属性可用于所有 Web 应用程序,其中 JNDI 条目是按每个 Web 应用程序控制的。
You also need a resource link in your web app's context. The context is generally placed in META-INF/context.xml and will look something like this:
This "grants" the web app the rights to see the particular
Environment
value.As for setting system properties, just add a line to tomcat/conf/catalina.properties like so:
Just note that system properties are available to all web apps where as JNDI entries are controlled per web app.
将其作为 web.xml 中的 init-param,并通过 ServetContext 访问它。
Make it an init-param in your web.xml, and access it via the ServetContext.
我在 conf/Catalina/localhost 下的上下文文件中编码了我的环境字符串,并命名为与我的 web 应用程序相同的名称。然后我使用 Spring 的 JndiObjectFactoryBean 来检索它。希望这对您有所帮助。
I coded my environment string in a context file under conf/Catalina/localhost and named the same as my webapp. Then I used Spring's JndiObjectFactoryBean to retrieve it. Hope this is of some help.