79

静的ファイル (CSS、JS) を操作するには、絶対パスを次のように記述する必要があります/AppName/templates/style/main.css。のような相対パスを書くことができる解決策はありますstyle/main.cssか?

4

6 に答える 6

169

あなたの実際の関心事が webapp コンテキスト (「AppName」部分) の動的性である場合は、HttpServletRequest#getContextPath().

<head>
    <link rel="stylesheet" href="${pageContext.request.contextPath}/templates/style/main.css" />
    <script src="${pageContext.request.contextPath}/templates/js/main.js"></script>
    <script>var base = "${pageContext.request.contextPath}";</script>
</head>
<body>
    <a href="${pageContext.request.contextPath}/pages/foo.jsp">link</a>
</body>

${pageContext.request.contextPath}すべての相対リンクにベース パスを設定して、すべての相対リンクで繰り返す必要がないようにするには、<base>タグを使用します。JSTL 関数を使用した例を次に示します。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<head>
    <c:set var="url">${pageContext.request.requestURL}</c:set>
    <base href="${fn:substring(url, 0, fn:length(url) - fn:length(pageContext.request.requestURI))}${pageContext.request.contextPath}/" />
    <link rel="stylesheet" href="templates/style/main.css" />
    <script src="templates/js/main.js"></script>
    <script>var base = document.getElementsByTagName("base")[0].href;</script>
</head>
<body>
    <a href="pages/foo.jsp">link</a>
</body>

このようにして、すべての相対リンク (つまり、または スキームで始まらないもの) は に対して相対的になります。/<base>

ちなみに、これは Tomcat とは特に関係ありません。HTTP/HTML の基本に関連するだけです。他のすべての Web サーバーでも同じ問題が発生します。

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

于 2011-01-21T22:41:50.623 に答える
21

アプリケーション コンテキストの相対パスで<c:url>-tagを使用するだけです。

valueパラメータが で始まる場合/、タグはそれをアプリケーションの相対 URL として扱い、アプリケーション名を URL に追加します。例:

jsp:

<c:url value="/templates/style/main.css" var="mainCssUrl" />`
<link rel="stylesheet" href="${mainCssUrl}" />
...
<c:url value="/home" var="homeUrl" />`
<a href="${homeUrl}">home link</a>

ドメイン相対 URL を持つこの html になります。

<link rel="stylesheet" href="/AppName/templates/style/main.css" />
...
<a href="/AppName/home">home link</a>
于 2015-11-22T14:32:01.053 に答える
2

Tomcat の $cwd であるディレクトリから Tomcat を起動します。この $cwd に関連する任意のパスを指定できます。

あなたが持っていると仮定します

home
- tomcat
 |_bin
- cssStore
 |_file.css

また、コマンド「bin/startup.sh」を使用して ~/tomcat から tomcat を起動するとします。

~/tomcat が tomcat のホーム ディレクトリ ($cwd) になります。

サーブレットのクラスファイルから「../cssStore/file.css」にアクセスできるようになりました

お役に立てば幸いです - MS

于 2011-01-21T22:37:44.450 に答える
2

これはより簡単に行うことができます:

<base href="${pageContext.request.contextPath}/"/>

すべての URL は不要domain:portではなく、アプリケーション コンテキストで形成されます。

于 2016-10-24T22:50:51.513 に答える
-1

これは、私が使用してきた@Ralphの提案の派生物です。c:urlをJSP の先頭に追加します。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:url value="/" var="root" />

次に、ページでルート変数を参照するだけです。

<link rel="stylesheet" href="${root}templates/style/main.css">
于 2016-03-21T16:59:04.233 に答える