Ecco lo scenario.
La mia applicazione web Java ha il seguente percorso
https://www.mywebsite.com:9443/MyWebApp
Diciamo che c’è un file JSP
https://www.mywebsite.com:9443/MyWebApp/protected/index.jsp
e ho bisogno di recuperare
https://www.mywebsite.com:9443/MyWebApp
all’interno di questo file JSP.
Certo, c’è un modo piuttosto pigro e sciocco di ottenere l’URL e poi di risalire il percorso.
Ma c’è un modo programmatico per farlo? In particolare, penso di poter ottenere la porta del dominio +, ma come faccio a recuperare effettivamente il nome dell’applicazione “MyWebApp”?
Il nome dell’applicazione Web (in realtà il percorso di contesto) è disponibile chiamando HttpServletrequest#getContextPath()
(e quindi NOT getServletPath()
come suggerito prima). Puoi recuperarlo in JSP da ${pageContext.request.contextPath}
.
The context path is: ${pageContext.request.contextPath}.
Se intendi utilizzare questo per tutti i percorsi relativi nella tua pagina JSP (che renderebbe questa domanda più sensata), allora puoi usare il tag
HTML:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> ${req.requestURL} SO question 2204870
Tutti i collegamenti nella pagina saranno automaticamente associati a
modo che non sia necessario copypastare il percorso di contesto ovunque. Nota che quando i collegamenti relativi iniziano con un /
, allora non saranno più relativi a
, ma alla radice del dominio.
Dai un’occhiata alla documentazione di HttpServletRequest
.
Per creare l’URL nel tuo esempio dovrai usare:
getScheme()
getServerName()
getServerPort()
getContextPath()
Ecco un metodo che restituirà il tuo esempio:
public static String getURLWithContextPath(HttpServletRequest request) { return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); }
Vi suggerisco caldamente di leggere i documenti , per metodi simili. Se sei interessato al percorso di contesto, dai un’occhiata qui, ServletContext.getContextPath () .
Il nome dell’applicazione proviene da getContextPath
.
Trovo questo grafico da Agile Software Craftsmanship HttpServletRequest Path Decoding ordina tutti i diversi metodi disponibili:
Il seguente codice potrebbe essere utile per l’applicazione web che utilizza JavaScript.
var newURL = window.location.protocol + "//" + window.location.host + "" + window.location.pathname; newURL = newURL.substring(0,newURL.indexOf(""));
Se ti viene passato un URL come stringa e desideri estrarre la root di contesto di tale applicazione, puoi usare questa espressione regolare per estrarla. Funzionerà per url completi o url relativi che iniziano con la root di contesto.
url.replaceAll("^(.*\\/\\/)?.*?\\/(.+?)\\/.*|\\/(.+)$", "$2$3")