Der Name der Webanwendung (eigentlich der Kontextpfad) ist durch Aufrufen verfügbar HttpServletrequest#getContextPath()
(und daher NICHT getServletPath()
wie zuvor vorgeschlagen). Sie können dies in JSP von abrufen ${pageContext.request.contextPath}
.
<p>The context path is: ${pageContext.request.contextPath}.</p>
Wenn Sie dies für alle relativen Pfade auf Ihrer JSP-Seite verwenden möchten (was diese Frage sinnvoller machen würde), können Sie das HTML- <base>
Tag verwenden:
<%@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>
Alle Links auf der Seite sind dann automatisch relativ zu, <base>
sodass Sie den Kontextpfad nicht überall kopieren müssen. Beachten Sie, dass relative Links, die mit a beginnen /
, nicht mehr relativ zum <base>
, sondern zum Domänenstamm sind.
ServletContext.getContextPath()
sollte als primärer oder bevorzugter Kontextpfad der Anwendung betrachtet werden." Das war der Grund, warum ich diese in meine ursprüngliche Antwort aufgenommen habe, nachdem ich die Sache erkannt hatte. Ich habe meinen ersten Versuch nicht entfernt, da ich möchte, dass das OP das Lesen der Dokumente in Betracht zieht und etwas mehr über verwandte Methoden weiß. Ich hoffe, Sie verstehen meinen Standpunkt.getServletPath()
zurückgegeben/filename.jsp
. Das OP hat das überhaupt nicht verlangt, das ist sicherlich nicht der richtige Weg.<base>
Tag nicht geschlossen? Sollten nicht alle Tags geschlossen sein?Schauen Sie sich die Dokumentation für an
HttpServletRequest
.Um die URL in Ihrem Beispiel zu erstellen, müssen Sie Folgendes verwenden:
getScheme()
getServerName()
getServerPort()
getContextPath()
Hier ist eine Methode, die Ihr Beispiel zurückgibt:
quelle
request.getLocalAddr()
getContextPath()
in der Methode gibt nichts zurück! UndgetServerPort()
gibt nur eine zweistellige Nummer zurück, keine vierstellige Nummer! Könnte ich etwas Hilfe in Anspruch nehmen?Der Anwendungsname stammt von
getContextPath
.Ich finde diese Grafik von Agile Software Craftsmanship HttpServletRequest Path Decoding sortiert alle verfügbaren Methoden aus:
quelle
Ich würde Ihnen dringend empfehlen, die Dokumente für ähnliche Methoden durchzulesen . Wenn Sie an einem Kontextpfad interessiert sind, schauen Sie hier, ServletContext.getContextPath () .
quelle
Der folgende Code kann für Webanwendungen mit JavaScript hilfreich sein.
quelle
Wenn Ihnen eine URL als Zeichenfolge übergeben wird und Sie den Kontextstamm dieser Anwendung extrahieren möchten, können Sie diesen regulären Ausdruck verwenden, um ihn zu extrahieren. Es funktioniert für vollständige oder relative URLs, die mit dem Kontextstamm beginnen.
quelle