2010-11-16 111 views
18

我有一个常用的java文件,我用它来更新和查询mysql数据库,但我需要在该文件中配置可选项(如主机名,密码等),并将其放入web.xml文件(或也许是另一个文件,如果这是一个选项,但最好在web.xml中)。如何读取非servlet java文件中的上下文参数/ web.xml值?

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

或者我需要读取XML(像任何其他XML文件......还是有捷径路线这个......)

+1

你真的不得不提,这种“常规的非的servlet的Java文件”被实例化在'ServletContextListener#contextInitialized()'中执行(根据你以前的问题)。这会在正确的答案中产生很大的差异... – BalusC 2010-11-16 17:34:44

+0

您使用的服务器是什么? Tomcat,JBoss,???。根据服务器参数,可以通过几种方式在服务器实例级别设置参数。 – stjohnroe 2010-11-17 16:10:21

回答

3

一种方法是读XML文件,并解析它。

你可以把它的一些静态地图上在ServletContextListener

30

解析后,你需要把你的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"); 
+0

请务必在env-entry-value之前指定env-entry-type,否则您可能会收到XML验证错误。 – luke 2014-06-06 12:33:49

+0

也许你可以添加进口。 :) – alexander 2015-05-06 14:14:30

+0

@alexander你去 – stjohnroe 2015-09-16 14:16:59

10

你可以在你的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

0

访问此背景下参数创建将从servlets init的一个初始化静态类。

+1

这里的难点在于哪些servlet的init。您不希望您的应用程序依赖于何时首先初始化Servlet。 – 2012-01-25 13:29:35

1

实现一个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> 
相关问题