静的ファイル (CSS、JS) を操作するには、絶対パスを次のように記述する必要があります/AppName/templates/style/main.css。のような相対パスを書くことができる解決策はありますstyle/main.cssか?
6 に答える
あなたの実際の関心事が 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 サーバーでも同じ問題が発生します。
以下も参照してください。
アプリケーション コンテキストの相対パスで<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>
Tomcat の $cwd であるディレクトリから Tomcat を起動します。この $cwd に関連する任意のパスを指定できます。
あなたが持っていると仮定します
home
- tomcat
|_bin
- cssStore
|_file.css
また、コマンド「bin/startup.sh」を使用して ~/tomcat から tomcat を起動するとします。
~/tomcat が tomcat のホーム ディレクトリ ($cwd) になります。
サーブレットのクラスファイルから「../cssStore/file.css」にアクセスできるようになりました
お役に立てば幸いです - MS
これはより簡単に行うことができます:
<base href="${pageContext.request.contextPath}/"/>
すべての URL は不要domain:portではなく、アプリケーション コンテキストで形成されます。
これは、私が使用してきた@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">