1

私は現在、多数の環境に展開されているアプリケーションに取り組んでいます。ただし、特定の環境にデプロイすると、コンテキスト パスに問題が発生します。これは、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 を使用してクライアント側からデータを適切にリクエストしているため、これはいくつかの問題を引き起こしています。

だから私の質問は、任意のパスで実行できるアプリケーションを作成するための最良の戦略は何ですか?

4

1 に答える 1

1

これは、環境を識別するインターセプターを使用することで実現できます。モデルを介して UI で使用できる環境パスを UI に渡すことができます。たとえば。 /otherroot/site1/で、この site1 はコンテキスト名で、otherrrot は環境です。

JSP をレンダリングするためにサーバーにヒットすると、インターセプターはこの URL を分析し、その URL が otherroot1 と関係があることを認識します。この環境と関連データは、js、画像などのフェッチやその他の ajax 呼び出しに使用できるモデルに設定できます。

ページがレンダリングされたら、URL コンテキスト パスに依存する必要はありません。

于 2013-10-01T13:15:47.750 に答える