100 votes

Comment obtenir l'URL de domaine et le nom de l'application?

Voici le scénario.

Mon application web Java a chemin d'accès suivant

https://www.mywebsite.com:9443/MyWebApp

Disons qu'il y a un fichier JSP

https://www.mywebsite.com:9443/MyWebApp/protected/index.jsp

et j'ai besoin de récupérer

https://www.mywebsite.com:9443/MyWebApp 

dans ce fichier JSP.

Bien sûr, il est assez paresseux et stupide moyen de seulement obtenir l'URL et puis re-tracer le chemin de retour.

Mais est-il une programatic façon de faire cela? Plus précisément, je pense que je peux obtenir le domaine + port, mais comment puis-je récupérer le nom de l'application "MyWebApp"?

110voto

Jataro Points 1405

Jetez un oeil à la documentation de HttpServletRequest.
Afin de construire l'URL dans votre exemple, vous devez utiliser:

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

Voici une méthode qui permettra de revenir à votre exemple:

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

94voto

BalusC Points 498232

L'application web nom (en fait le chemin de contexte) est disponible en appelant HttpServletrequest#getContextPath() (et donc PAS getServletPath() comme on a suggéré avant). Vous pouvez récupérer ce en JSP en ${pageContext.request.contextPath}.

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

Si vous avez l'intention de l'utiliser pour tous les chemins relatifs dans votre page JSP (ce qui ferait de cette question plus de sens), vous pouvez utiliser de l'HTML <base> balise:

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

Tous les liens dans la page sera alors automatiquement être par rapport à l' <base> , de sorte que vous n'avez pas besoin de copypaste le chemin de contexte partout. Notez que lorsque les liens relatifs commencer avec un /, alors il ne sera pas par rapport à l' <base> plus, mais à la racine de domaine à la place.

7voto

Adeel Ansari Points 24434

Je vous suggère fortement de lire les docs, par des méthodes similaires. Si vous êtes intéressé par chemin de contexte, jetez un oeil ici, ServletContext.getContextPath().

-1voto

master_d Points 11

Si vous êtes passé une url comme une Chaîne de caractères et souhaitez extraire la racine de contexte de l'application, vous pouvez utiliser cette expression pour l'extraire. Il va travailler pour une url complète ou relative urls qui commencent avec la racine de contexte.

url.replaceAll("^(.*\\/\\/)?.*?\\/(.+?)\\/.*|\\/(.+)$", "$2$3")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X