web-dev-qa-db-ja.com

サーブレット以外のJavaファイルのコンテキストパラメータ/web.xml値を読み取るにはどうすればよいですか?

私はmysqlデータベースの更新とクエリに使用する通常のJavaファイルを持っていますが、そのファイルに構成可能なオプション(ホスト名、パスワードなど)を取り、それを配置する必要がありますweb.xmlファイル(またはオプションの場合は別のファイルですが、理想的にはweb.xmlにあります)。

しかし、サーブレット以外の通常のJavaファイルからweb.xml値にアクセスする方法がわかりません。

または私はxmlを読む必要がありますか(他のxmlファイルと同様に...またはこれへのショートカットルートがあります...)

19
Kirn

必要なパラメーターを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");
30
stjohnroe

Web.xmlおよびjavax.servlet.ServletContextListenerでcontext-parametersを使用して、いくつかの静的フィールドにデータを入力できます。

あなたの通常の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でアクセスできます

10
Ralph

1つの方法は、xmlファイルを読み取って解析することです。

ServletContextListenerで解析した後、静的マップに配置できます。

3
Jigar Joshi

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>
1
Hank

servlets init の1つから初期化される静的クラスを作成します。

0
Eugene Kuleshov