Nazwa aplikacji internetowej (a właściwie ścieżka kontekstu) jest dostępna przez wywołanie HttpServletrequest#getContextPath()
(a zatem NIE getServletPath()
taka, jak sugerowano wcześniej). Możesz pobrać to w JSP przez ${pageContext.request.contextPath}
.
<p>The context path is: ${pageContext.request.contextPath}.</p>
Jeśli zamierzasz użyć tego dla wszystkich ścieżek względnych na swojej stronie JSP (co miałoby sens w tym pytaniu), możesz skorzystać ze <base>
znacznika 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>
Wszystkie linki na stronie będą wówczas automagicznie względne w stosunku do elementu, <base>
dzięki czemu nie ma potrzeby kopiowania wszędzie ścieżki kontekstu. Zauważ, że kiedy linki względne zaczynają się od a /
, to nie będą już względne względem <base>
katalogu głównego domeny.
ServletContext.getContextPath()
powinna być traktowana jako główna lub preferowana ścieżka kontekstu aplikacji”. To był powód, dla którego włączyłem to do mojej pierwotnej odpowiedzi, po uświadomieniu sobie tego. Nie usunąłem mojej pierwszej próby, ponieważ chcę, aby OP rozważył przeczytanie dokumentacji i dowiedzieć się trochę więcej o powiązanych metodach. Mam nadzieję, że rozumiesz mój punkt widzenia.getServletPath()
zwraca/filename.jsp
. OP wcale o to nie prosił, to z pewnością nie jest właściwa droga.<base>
tagu? Czy wszystkie tagi nie powinny być zamknięte?Zapoznaj się z dokumentacją dotyczącą
HttpServletRequest
.Aby zbudować adres URL w swoim przykładzie, musisz użyć:
getScheme()
getServerName()
getServerPort()
getContextPath()
Oto metoda, która zwróci Twój przykład:
źródło
request.getLocalAddr()
getContextPath()
w metodzie nic nie zwraca! IgetServerPort()
zwraca tylko liczbę dwucyfrową, a nie czterocyfrową! Czy mógłbym skorzystać z pomocy?Nazwa aplikacji pochodzi od
getContextPath
.Znajduję tę grafikę z Agile Software Craftsmanship HttpServletRequest Path Decoding sortuje wszystkie różne dostępne metody:
źródło
Zdecydowanie sugerowałbym przeczytanie dokumentacji dotyczącej podobnych metod. Jeśli interesuje Cię ścieżka kontekstu, zajrzyj tutaj, ServletContext.getContextPath () .
źródło
Poniższy kod może być przydatny w przypadku aplikacji internetowych korzystających z JavaScript.
źródło
Jeśli adres URL jest przekazywany jako ciąg i chcesz wyodrębnić kontekstowy katalog główny tej aplikacji, możesz użyć tego wyrażenia regularnego, aby go wyodrębnić. Będzie działać dla pełnych lub względnych adresów URL, które zaczynają się od kontekstowego katalogu głównego.
źródło