如何在非Servlet java文件中读取上下文参数/web.xml值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (125)

我有一个用于更新和查询MySQL数据库的常规java文件,但我需要在该文件中使用可配置的选项(如主机名、密码等),并将其放入web.xml文件(如果是选项,则可能是另一个文件,但最好是在web.xml中)。

但是,我不知道如何从常规的非Servlet java文件中访问web.xml值。

提问于
用户回答回答于

您可以在web.xml和javax中使用上下文参数。servlet.ServletContextListener来填充一些静态字段。

在您的普通java类中,您读取了这个静态字段。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
...
<context-param>
    <description>Prameter</description>
    <param-name>myParam</param-name>
    <param-value>123456790</param-value>
</context-param>
...
</web-app>

您可以使用ServletContext.getInitParameter来处理这个文本。

用户回答回答于

您需要将所需的参数放在web.xml文件的env条目中:

<env-entry> 
    <env-entry-name>dbhost</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>localhost</env-entry-value> 
</env-entry>

然后通过jndi上下文访问它们。

import javax.naming.Context;
import javax.naming.InitialContext;
...
// Get the base naming context
Context env = (Context)new InitialContext().lookup("java:comp/env");

// Get a single value
String dbhost = (String)env.lookup("dbhost");

扫码关注云+社区

领取腾讯云代金券