別のディレクトリの場所からアクセスするときにファイルパスを管理する方法は?
-
28-09-2019 - |
質問
私は異なるディレクトリに座っているウェブページはほとんどありません。私の目標は、パスをハードコードせずに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>
この場合、ファイルを自由に移動することができ、各ファイルに戻る必要はありません。
私のアプローチについて意見を得ることができますか?これを解決する他の方法はありますか?
解決
コンテキスト関連パスを使用します。パスはドメインルートに絶対的になります。コンテキストパスを取得できます HttpServletRequest#getContextPath()
. 。 JSPで、 HttpServletRequest
で利用できます ${pageContext.request}
.
<script type="text/javascript" src="${pageContext.request.contextPath}/js/some.js"></script>
( contextPath
それ自体はすでにaで始まります /
, 、だからあなたはそれを自分で接頭する必要はありません)
を使用して設定することもできます 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">
また、それに関連します。あなたがこれに行くなら、あなたはこれを考慮する必要があります。
参照:
他のヒント
mm工場がこれを行う最も適切な方法であるかどうかは本当にわかりません、多分それは機能するでしょう。
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" />..
そのようにして、フォルダの名前またはパスを変更する場合。構成を変更するだけです