Domanda

Ecco lo scenario.

La mia applicazione web Java ha 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.

Naturalmente, v'è piuttosto un modo pigro e stupido di appena ottenere l'URL e poi ri-tracciare il percorso di ritorno.

Ma c'è un modo programmatico di fare questo? In particolare, penso di poter ottenere il dominio + porto, ma come faccio davvero recuperare il nome dell'applicazione "MyWebApp"?

È stato utile?

Soluzione

Il nome dell'applicazione web (in realtà il percorso del contesto) è disponibile chiamando HttpServletrequest#getContextPath() (e quindi non getServletPath() come uno suggerito prima). È possibile recuperare questo in JSP per ${pageContext.request.contextPath}.

<p>The context path is: ${pageContext.request.contextPath}.</p>

Se avete intenzione di usare questo per tutti i percorsi relativi a pagina JSP (che renderebbe questa domanda più senso), allora si può fare uso del tag HTML <base>:

<%@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>

Tutti i link nella pagina saranno quindi automagicamente essere relativo alla <base> in modo che non c'è bisogno di CopyPaste il percorso del contesto in tutto il mondo. Si noti che quando i link relativi iniziano con un /, allora saranno non essere relativo al <base> più, ma alla radice di dominio invece.

Altri suggerimenti

Date un'occhiata alla documentazione per HttpServletRequest .
Al fine di costruire l'URL nel tuo esempio è necessario utilizzare:

  • getScheme()
  • getServerName()
  • getServerPort()
  • getContextPath()

Qui è un metodo che restituirà il vostro esempio:

public static String getURLWithContextPath(HttpServletRequest request) {
   return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
}

Il nome dell'applicazione viene da getContextPath.

Lo trovo grafica da Agile Software Artigianato HttpServletRequest percorso di decodifica ordina fuori tutti i diversi metodi che sono disponibili:

 entrare descrizione dell'immagine qui

caldamente suggerire di leggere attraverso la docs , per metodi simili. Se siete interessati a percorso contesto, date un'occhiata qui, ServletContext.getContextPath () .

Il codice seguente potrebbe essere utile per l'applicazione web utilizzando JavaScript.

var newURL = window.location.protocol + "//"  + window.location.host + "" + window.location.pathname;

newURL = newURL.substring(0,newURL.indexOf(""));

Se è in passato un URL come stringa e desidera estrarre la radice contesto di tale domanda, è possibile utilizzare questo regex per estrarlo. Essa opererà per gli URL completo o relativo URL che iniziano con la root di contesto.

url.replaceAll("^(.*\\/\\/)?.*?\\/(.+?)\\/.*|\\/(.+)$", "$2$3")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top