2

私の目標は、パスをハードコーディングせずに js または css ファイルにアクセスできるように、ある種の整理された構造を持つことです。

たとえば、ディレクトリ構造は次のとおりです。

root --- js --- some.js
      |
      |--css --- some.css
      |
      |---pages ---- main.jsp
      |
      |---other----foo---- foo.jsp
                 |
                 |--bar --- bar.jsp  

次に、main.jsp と foo.jsp は some.js を参照しようとしますが、パスが異なる必要があります。

( main.jsp )

<script type="text/javascript" src="../js/some.js"></script>

( foo.jsp)

<script type="text/javascript" src="../../js/some.js"></script>

main.jsp または foo.jsp の場所を変更したい場合、これは理想的ではありません。各ファイルに戻ってパスを手動で変更する必要があります。

次のようになるように、各ファイルのフルパスを持つファクトリクラスを用意することを考えています。

<script type="text/javascript" src=<% Factory.getFullPath(some.js) %> ></script>

この場合でも、ファイルを自由に移動でき、各ファイルに戻る必要はありません。

私のアプローチについて意見をいただけますか?これを解決する他の方法はありますか?

4

2 に答える 2

2

コンテキスト相対パスを使用します。これにより、ドメイン ルートへの絶対パスが作成されます。でコンテキスト パスを取得できますHttpServletRequest#getContextPath()。JSP では、HttpServletRequestで使用できます${pageContext.request}

<script type="text/javascript" src="${pageContext.request.contextPath}/js/some.js"></script>

(contextPathそれ自体はすでに で始まっている/ため、自分でプレフィックスを付ける必要はありません)

HTML<base>タグを使用して、ページ内のすべての相対 URL が相対的になるように設定することもできます。${pageContext.request.contextPath}この方法では、すべての場所をコピーする必要はありません。

<base href="${pageContext.request.contextPath}"></base>
<script type="text/javascript" src="js/some.js"></script>

ただし、これには注意点が 1 つあります。アンカーなど<a href="#foo">も、それに対して相対的になります。これを行う場合は、これも考慮する必要があります。

以下も参照してください。

于 2010-08-14T02:40:14.877 に答える
1

mmファクトリがこれを行うのに最も適切な方法であるかどうかはよくわかりませんが、おそらく機能します。そのために、JSやCSSフォルダーパスなどの定数を実装したインターフェイスを使用したことを覚えています。

public interface Configuration {
   public static final String SERVER_URL = "http://localhost:8080/";
   public static final String CSS_URL = SERVER_URL + "css/";
   public static final String JS_URL = SERVER_URL + "js/";
}

次に、このインターフェイスをサーブレットにインポートして、次のように呼び出す必要があります。

...src="<% Configuration.JS_URL %>some.js" />..

フォルダの名前またはパスを変更した場合は、このようになります。構成を変更するだけです

于 2010-08-14T01:31:08.293 に答える