Webアプリケーション名(実際にはコンテキストパス)は、呼び出しによって使用できますHttpServletrequest#getContextPath()
(したがって、getServletPath()
以前に提案されたものとは異なります)。これは、JSPでを使用して取得できます${pageContext.request.contextPath}
。
<p>The context path is: ${pageContext.request.contextPath}.</p>
これをJSPページのすべての相対パスに使用する場合(この質問をより理解しやすくなります)、HTML <base>
タグを使用できます。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:set var="req" value="${pageContext.request}" />
<c:set var="url">${req.requestURL}</c:set>
<c:set var="uri" value="${req.requestURI}" />
<!doctype html>
<html lang="en">
<head>
<title>SO question 2204870</title>
<base href="${fn:substring(url, 0, fn:length(url) - fn:length(uri))}${req.contextPath}/">
<script src="js/global.js"></script>
<link rel="stylesheet" href="css/global.css">
</head>
<body>
<ul>
<li><a href="home.jsp">Home</a></li>
<li><a href="faq.jsp">FAQ</a></li>
<li><a href="contact.jsp">Contact</a></li>
</ul>
</body>
</html>
その後、ページ内のすべてのリンクは自動的にに相対的になります。その<base>
ため、どこにでもコンテキストパスをコピーアンドペーストする必要はありません。相対リンクがで始まる場合、リンク/
は<base>
もう相対的ではなく、ドメインルートに相対的であることに注意してください。
ServletContext.getContextPath()
れるコンテキストパスは、アプリケーションの主要または優先コンテキストパスと見なす必要がある」と述べています。それが私が事を実現した後、私が元の答えにこれを含めた理由でした。OPにドキュメントを読んでもらい、関連するメソッドについてもう少し知ってもらいたいので、最初の試みは削除しませんでした。私の要点を理解していただければ幸いです。