웹 응용 프로그램 이름 (실제로 컨텍스트 경로)은 호출하여 사용할 수 있습니다 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가 문서를 읽는 것을 고려하고 관련 방법에 대해 조금 더 알고 싶기 때문에 첫 번째 시도를 제거하지 않았습니다. 당신이 내 요점을 이해하기를 바랍니다.