Назва веб-програми (фактично контекстний шлях) доступна за допомогою виклику HttpServletrequest#getContextPath()
(і, отже, НЕ, getServletPath()
як було запропоновано раніше). Ви можете отримати це в JSP за допомогою ${pageContext.request.contextPath}
.
<p>The context path is: ${pageContext.request.contextPath}.</p>
Якщо ви маєте намір використати це для всіх відносних шляхів на своїй сторінці JSP (це зробило б це питання більше сенсом), тоді ви можете скористатися <base>
тегом HTML :
<%@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>
таких, що вам не потрібно скрізь копіювати контурний шлях. Зауважте, що коли відносні посилання починаються з символу a /
, вони вже не будуть відносні до <base>
більше, а замість кореня домену.
ServletContext.getContextPath()
слід розглядати як основний або бажаний контекстний шлях програми". Це було причиною того, що я включив це до своєї оригінальної відповіді, усвідомивши річ. Я не видаляв свою першу спробу, оскільки хочу, щоб ОП розглядала читання через документи і знала трохи більше про пов'язані методи. Я сподіваюся, ви зрозумієте мою думку.