Tomcat JNDI查找问题

发布于 2024-12-02 23:27:17 字数 1407 浏览 2 评论 0原文

我正在尝试读取 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

暗喜 2024-12-09 23:27:17

您还需要网络应用程序上下文中的资源链接。上下文通常放置在 META-INF/context.xml 中,看起来像这样:

<Context>
    <Resource name="LOGPATH" global="LOGPATH" type="java.lang.String" />
</Context>

这“授予”网络应用查看特定 Environment 值的权利。

至于设置系统属性,只需在 tomcat/conf/catalina.properties 中添加一行,如下所示:

LOGPATH=C:/temp

请注意,系统属性可用于所有 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:

<Context>
    <Resource name="LOGPATH" global="LOGPATH" type="java.lang.String" />
</Context>

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:

LOGPATH=C:/temp

Just note that system properties are available to all web apps where as JNDI entries are controlled per web app.

是伱的 2024-12-09 23:27:17

将其作为 web.xml 中的 init-param,并通过 ServetContext 访问它。

Make it an init-param in your web.xml, and access it via the ServetContext.

就此别过 2024-12-09 23:27:17

我在 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文