Tên ứng dụng web (thực ra là đường dẫn ngữ cảnh) có sẵn bằng cách gọi HttpServletrequest#getContextPath()
(và do đó KHÔNG phải getServletPath()
như một đề xuất trước đây). Bạn có thể lấy nó trong JSP bằng cách ${pageContext.request.contextPath}
.
<p>The context path is: ${pageContext.request.contextPath}.</p>
Nếu bạn định sử dụng điều này cho tất cả các đường dẫn tương đối trong trang JSP của mình (điều này sẽ làm cho câu hỏi này có ý nghĩa hơn), thì bạn có thể sử dụng <base>
thẻ 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>
Tất cả các liên kết trong trang sau đó sẽ tự động có liên quan với nhau <base>
để bạn không cần sao chép đường dẫn ngữ cảnh ở khắp mọi nơi. Lưu ý rằng khi các liên kết tương đối bắt đầu bằng a /
, thì chúng sẽ không còn tương đối với <base>
nữa mà thay vào đó là tên miền gốc.
ServletContext.getContextPath()
phải được coi là đường dẫn ngữ cảnh chính hoặc ưu tiên của ứng dụng". Đó là lý do tôi đưa câu này vào câu trả lời ban đầu của mình, sau khi nhận ra điều đó. Tôi đã không loại bỏ nỗ lực đầu tiên của mình, vì tôi muốn OP xem xét việc đọc qua các tài liệu và biết thêm một chút về các phương pháp liên quan. Tôi hy vọng bạn đang hiểu điểm của tôi.