私は現在、多数の環境に展開されているアプリケーションに取り組んでいます。ただし、特定の環境にデプロイすると、コンテキスト パスに問題が発生します。これは、Tomcat 6 で実行されている Java/Spring アプリケーションです。展開プロセスはシステム管理者によって処理されるため、プロセスをあまり把握していないため、シナリオを処理する方法を考え出そうとしています。すべての URL で、先頭にrequest.getContextPath()
. 通常の状況では、これで問題なく動作します。たとえば、WAR のファイル名が site1.war の場合、WAR は次の場所にデプロイされます。
/site1/
ただし、WAR がデプロイされている他の環境がいくつかあり、アプリケーションルートの外側にルートパスが含まれているため、最終的には
/otherroot/site1/
したがって、アプリケーションのルート パスは/site1/
、この他の rootpath を認識していません/otherroot/
。この場合、 getContextPath() を呼び出すと/site1/
、実際には必要なパスが であるときに返されます/otherroot/site1/
。
ここで、私が混乱していることの 1 つは、イメージ (イメージ、スタイルシート、または JavaScript ファイル) を定義するときに JSF ページ内で #{request.contextpath} を使用すると、ソースを見ると URL が正しいことです。たとえば、/otherroot/site/
URLが与えられた場合、設定した場合
<img src="#{request.contextPath}/image1.png"/>
、レンダリングされたページのソースを見ると、 が表示されます/otherroot/site1/image1.png
。ここで、ページがレンダリングされるたびにコンテキスト パスを保持するように JS 変数を設定すると、異なる結果が得られます。例えば、
<script>
APP.ROOT_PATH = '#{request.contextPath}';
</script>
これにより、以下がレンダリングされます。
APP.ROOT_PATH = '/site1'
非同期リクエストを使用しているため、URL を使用してクライアント側からデータを適切にリクエストしているため、これはいくつかの問題を引き起こしています。
だから私の質問は、任意のパスで実行できるアプリケーションを作成するための最良の戦略は何ですか?