Come ottenere l’URL del dominio e il nome dell’applicazione?

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:

inserisci la descrizione dell'immagine qui

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")