Nama aplikasi web (sebenarnya path konteks) tersedia dengan memanggil HttpServletrequest#getContextPath()
(dan BUKAN getServletPath()
seperti yang disarankan sebelumnya). Anda dapat mengambilnya di JSP dengan ${pageContext.request.contextPath}
.
<p>The context path is: ${pageContext.request.contextPath}.</p>
Jika Anda ingin menggunakan ini untuk semua jalur relatif di laman JSP Anda (yang akan membuat pertanyaan ini lebih masuk akal), Anda dapat menggunakan <base>
tag 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>
Semua link di halaman akan secara otomatis menjadi relatif terhadap <base>
sehingga Anda tidak perlu menyalin ulang jalur konteks di mana pun. Perhatikan bahwa ketika tautan relatif dimulai dengan a /
, maka tautan tersebut tidak akan lagi menjadi relatif dengan the <base>
, melainkan ke akar domain.
ServletContext.getContextPath()
harus dianggap sebagai jalur konteks utama atau pilihan aplikasi". Itulah alasan saya memasukkan yang ini ke jawaban asli saya, setelah menyadarinya. Saya tidak menghapus upaya pertama saya, karena saya ingin OP mempertimbangkan membaca dokumen dan mengetahui lebih banyak tentang metode terkait. Saya harap Anda mengerti maksud saya.