ชื่อเว็บแอปพลิเคชัน (ที่จริงคือพา ธ บริบท) สามารถใช้งานได้โดยการโทร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()
ควรถือเป็นพา ธ บริบทหลักหรือที่ต้องการของแอปพลิเคชัน" นั่นคือเหตุผลที่ฉันรวมคำตอบนี้ไว้ในคำตอบเดิมของฉันหลังจากที่ตระหนักถึงสิ่งนั้น ฉันไม่ได้ลบความพยายามครั้งแรกของฉันเนื่องจากฉันต้องการให้ OP พิจารณาอ่านเอกสารและเรียนรู้เพิ่มเติมเล็กน้อยเกี่ยวกับวิธีการที่เกี่ยวข้อง ฉันหวังว่าคุณจะเข้าใจประเด็นของฉัน