0

JBoss4.0.1 と Struts2.1.6 を使用しています

いくつかの構成ファイル(フォルダーWEB-INF/config内のappConfig.xml)を持つアプリケーションがあります。この構成ファイルには、読み取る他のファイル (other.xml、some.xml など) の相対パスが含まれています。アプリケーションは default/deploy 内で .war としてデプロイされます

構成ファイルを読み取るユーティリティ パッケージがあります。utility.jar を default/lib 内にデプロイしました

のcontextInitializedメソッドで、このファイルをServletContextListener読み取り、すべてのコンテキスト相対パスをロードするユーティリティ クラスに渡しappConfig.xmlます。IOStreamappConfig

これらのファイルを今すぐ読むにはどうすればよいですか? 入力ストリームを作成しようとすると、NULL が返されるためです。

ユーティリティクラス内で次のことを試しました。

read メソッドは ServletContextListener の contextInitialized メソッド内から呼び出されます

public void read(){ 
this.getClass().getClassLoader.getResourceAsStream("/WEB-INF/config/some.xml");
}

public void read(ClassLoader cl){ 
  cl.getResourceAsStream("/WEB-INF/config/some.xml"); --> Null
  cl.getResourceAsStream("/../config/some.xml"); --> Null
  cl.getResourceAsStream("../config/some.xml"); --> Null
}

public void read(ServletContext ct){ 
 ct.getResourceAsStream("/WEB-INF/config/some.xml");.
 ct.getResourceAsStream("/../config/some.xml"); --> Null
 ct.getResourceAsStream("../config/some.xml"); --> Null
}
4

1 に答える 1

0

/WEB-INF/config はクラスパスにないため、クラスローダーはそれについて何も知らないため、次のどれも機能しません。

public void read(){ 
this.getClass().getClassLoader.getResourceAsStream("/WEB-INF/config/some.xml");
}

public void read(ClassLoader cl){ 
  cl.getResourceAsStream("/WEB-INF/config/some.xml"); --> Null
  cl.getResourceAsStream("/../config/some.xml"); --> Null
  cl.getResourceAsStream("../config/some.xml"); --> Null
}

これらの2つは、コンテキストから外れるため機能しません(..は最初の要素にすることはできません)、

public void read(ServletContext ct){ 

 ct.getResourceAsStream("/../config/some.xml"); --> Null
 ct.getResourceAsStream("../config/some.xml"); --> Null
}

あなたの意図がよくわかりません。ファイルが「/WEB-INF/config/some.xml」にあることがわかっている場合、なぜ「/../config/some.xml」から読み取る必要があるのですか?

war 内に構成ファイルを保存するのは得策ではありません。別の場所に移動することを検討する必要があります。

于 2009-09-05T11:25:42.147 に答える