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.getServletPath()
pengembaliannya/filename.jsp
. OP tidak meminta itu sama sekali, ini jelas bukan cara yang tepat.<base>
tag? Bukankah semua tag harus ditutup?Lihat dokumentasi untuk
HttpServletRequest
.Untuk membuat URL dalam contoh Anda, Anda perlu menggunakan:
getScheme()
getServerName()
getServerPort()
getContextPath()
Berikut adalah metode yang akan mengembalikan contoh Anda:
sumber
request.getLocalAddr()
getContextPath()
dalam metode ini tidak mengembalikan apapun! DangetServerPort()
hanya mengembalikan angka 2 digit, bukan angka 4 digit! Bisakah saya membantu?Nama aplikasi berasal
getContextPath
.Saya menemukan grafik ini dari Agile Software Craftsmanship HttpServletRequest Path Decoding memilah semua metode berbeda yang tersedia:
sumber
Saya sangat menyarankan Anda untuk membaca dokumen , untuk metode serupa. Jika Anda tertarik dengan jalur konteks, lihat di sini, ServletContext.getContextPath () .
sumber
Kode berikut mungkin berguna untuk aplikasi web menggunakan JavaScript.
sumber
Jika Anda sedang melewati url sebagai String dan ingin mengekstrak akar konteks dari aplikasi itu, Anda dapat menggunakan regex ini untuk mengekstraknya. Ini akan berfungsi untuk url lengkap atau url relatif yang dimulai dengan akar konteks.
sumber