1

Java EE アプリケーションがあり、アプリケーションには次の構造があります。

WEB-INF
    layout
        header.jsp
    styles
        main.css

main.cssにを含めたいheader.jsp。私は次のようにしようとしています(ここで...はパスです):

<link rel="stylesheet" href="..."> 

しかし、私は正しい道を得ることができないようです。私は運がないので、次のそれぞれを試しました:

../styles/main.css
/styles/main.css
styles/main.css
/WEB-INF/styles/main.css
WEB-INF/styles/main.css

正しいパスは何ですか?

4

1 に答える 1

14

まず第一に、/WEB-INFフォルダ内のリソースは、仲介する (フロント コントローラ) サーブレットなしでは直接パブリックにアクセスできません (これは JSP ファイル自体もカバーします! は<jsp:include>Web ブラウザではなく Web サーバーで実行されます)。そのため、CSS (および JS と画像) ファイルを/WEB-INFフォルダーの外に配置する必要があります。

WebContent
 |-- WEB-INF
 |    `-- layout
 |         `-- header.jsp
 |-- styles
 |    `-- main.css
 :

にあると仮定すると/styles/main.css、次のように参照できます。

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/styles/main.css" />

を使用する${pageContext.request.contextPath}(現在のコンテキスト パスを先頭にスラッシュを付けて出力し、ドメイン ルートからの相対的な CSS URL を保証する) 自体は必要ありませんが、現在のリクエスト URL が不明であるため、これが最も安全な方法です。HTML <link><script><img><a>などの要素のすべての相対パスは、つまり、現在のリクエスト URL (ブラウザのアドレス バーに表示されているように) に対して相対的に解決された Web ブラウザによって決まります。リクエスト URL が不明な限り、 を使用せずに正しい CSS パスを回答することはできません${pageContext.request.contextPath}

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

于 2012-09-10T01:47:28.600 に答える