Web.xml内にあるいくつかのファイルパス設定に依存するJSP Webアプリを事前にパッケージ化しています。これらの設定は、アプリケーション全体(Webアプリが管理インターフェイスである)を展開するときに顧客が設定するパスを参照するため、パッケージ化時には不明です。
インストーラースクリプトでトークンとファイルの変更を回避する最も簡単な方法は、ユーザーにインストール場所を尋ね、この場所を環境変数(Java_HOMEなど)として設定し、web.xmlが常にその変数を参照するようにすることです。
Web.xml内から環境変数値を参照する方法はありますか? Google検索は、ejb xmlファイルから環境変数を設定するJ2EEメソッドにつながります。これは私が探しているものではありません。
次のようなTomcat xml構成ファイルのいずれかでAntスタイルの変数置換を使用できます。
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>${foo}</url-pattern>
</servlet-mapping>
foo
は Javaシステムプロパティ (sysprop)です。
OS環境変数 (envvars)を直接使用することはできません。
Envvarsを使用するには、
set "CATALINA_OPTS=-DsomeJavaSysProp=%SOME_OS_ENVVAR%"
bin/setenv.bat
(または同様にbin/setenv.sh
for * nix)。そのファイルを作成する必要がある場合があります。 Tomcatは起動時にこのファイルを実行します。
なので CATALINA_OPTS
は(コマンドラインオプションとは対照的に)envvarであり、システム上の他のユーザーに表示されるべきではありません(古代のUnixを保存)。これはテストしていません。
http://Tomcat.Apache.org/Tomcat-7.0-doc/config/
Springを使用している場合は、<context:property-placeholder/>
Beanを使用し、Spring XML構成ファイルでenvvarsまたはsyspropsを直接使用します(web.xml
)。
環境変数(web.xmlからアクセスできないと思う)を使用したくないと思うが、環境entries[ 1 、 2 ]。そのようです:
<env-entry>
<env-entry-name>Bla/SomeFilePath</env-entry-name>
<env-entry-type>Java.lang.String</env-entry-type>
<env-entry-value>/opt/bla</env-entry-value>
</env-entry>
次のようにSomeFilePathを使用できます。
InitialContext ic = new InitialContext();
String s = (String) ic.lookup("Java:comp/env/ejb/Bla/SomeFilePath");
基本的に、あなたはそのようにはしません。 web.xml
には事物のデフォルト値が含まれている必要がありますが、実際にはデプロイメントを行うときにそれらをオーバーライドする必要があります。 Tomcatに展開する場合、展開に使用するcontext.xml
に適切なエントリを含めることでこれを行います。例えば:
<Context path="/app">
<!-- For things described by webapp parameters -->
<Parameter name="foobar" value="grill" />
<!-- For things described by environment entries -->
<Environment name="Bla/SomeFilePath" type="Java.lang.String"
value="/opt/bla" />
</Context>
他のコンテナには、これを行うための独自のメカニズムがあります。あなたは彼らのドキュメントを調べる必要があります(または、より焦点を絞ったヘルプのリクエストを行ってください)。
環境変数には、次のようなxmlファイルでアクセスできます。
${env.ENVIRONMENT_VARIABLE_NAME}
明らかに、ユーザーアカウントの設定とアクセスの問題があるかもしれませんが、システム変数を試してみましたが、うまくいきます!
Env-entryを順番に並べる必要があります:
<env-entry>
<env-entry-name>maxAmount</env-entry-name>
<env-entry-type>Java.lang.String</env-entry-type>
<env-entry-value>aString</env-entry-value>
</env-entry>
そうでない場合、web.xmlで検証エラーが発生します
私はあなたの制限について完全に明確ではありませんが、おそらくあなたはこれを行うことができます(それはあなたが設定しようとしているinit-paramだと仮定しています):
1)web.xmlで変数を未指定のままにします
2)ServletContextListenerを作成し、アプリケーションに追加します
3)サーブレットの初期化をリッスンします
4)その時点でサーブレットのinit-paramを設定します
私は同様の問題でこれを試しましたが、サードパーティのサーブレット(私も混乱させたくない)が実際にはサーブレットとしてまったく動作していないことが判明したため、失敗しました初期化されました。しかし、おそらくここにチャンスがある...