我有一个常规的Java文件,用于更新和查询MySQL数据库,但我需要将该文件中的可配置选项(如主机名、密码等)放入web.xml文件中(或者如果可以的话,放到另一个文件中,但最好是在web.xml中)。
但我不知道如何从普通的非Servlet Java文件中访问web.xml值。
或者,我需要读取XML文件(像读取其他XML文件一样...或者有快捷方法吗...)
您需要将所需参数放在web.xml文件的env-entry条目中:
<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");
<?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
访问此上下文参数。一种方法是读取xml文件并解析它。
在ServletContextListener
中解析后,您可以将其放置在某些静态映射上。
ServletContextListener
:package util;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyConfigListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext ctx = sce.getServletContext();
String hostname = ctx.getInitParameter("my.config.hostname");
// now go and do something with that
}
@Override
public void contextDestroyed(ServletContextEvent sce) {}
}
web.xml
中注册它:<context-param>
<param-value>somewhere.example.org</param-value>
<param-name>my.config.hostname</param-name>
</context-param>
<listener>
<listener-class>util.MyConfigListener</listener-class>
</listener>
ServletContextListener#contextInitialized()
中实例化和执行的(根据你之前的问题)。这将对正确答案产生很大的影响... - BalusC