Web uygulaması adı (aslında bağlam yolu) çağrı yapılarak kullanılabilir HttpServletrequest#getContextPath()
(ve bu nedenle daha getServletPath()
önce önerildiği gibi DEĞİL ). Bunu JSP'de ile geri alabilirsiniz ${pageContext.request.contextPath}
.
<p>The context path is: ${pageContext.request.contextPath}.</p>
Bunu JSP sayfanızdaki tüm göreceli yollar için kullanmayı düşünüyorsanız (bu, bu soruyu daha anlamlı hale getirir), o zaman HTML <base>
etiketini kullanabilirsiniz:
<%@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>
Sayfadaki tüm bağlantılar daha sonra otomatik olarak göreli olacaktır, <base>
böylece bağlam yolunu her yere kopyalamanıza gerek kalmaz. Göreli bağlantılar a ile başladığında /
, <base>
artık bunların artık göreceli olmayacaklarını, bunun yerine alan köküne göre olacaklarını unutmayın .
ServletContext.getContextPath()
bağlam yolu, uygulamanın birincil veya tercih edilen bağlam yolu olarak düşünülmelidir " der . Bunu anladıktan sonra orijinal cevabıma dahil etmemin sebebi buydu. OP'nin dokümanları okumayı düşünmesini ve ilgili yöntemler hakkında biraz daha fazla bilgi sahibi olmasını istediğim için ilk denememi kaldırmadım. Umarım benim fikrimi anlıyorsundur.