2009-10-27 5 views
28

Je souhaite obtenir l'URL racine de mon application Web depuis l'un des servlets.Racine racine de la servlet

Si je déploie mon application dans "www.mondomaine.com", je souhaite obtenir l'URL racine "http://www.mydomain.com".

Même chose si je déployer dans tomcat local avec 8080 port, elle doit donner http://localhost:8080/myapp

Quelqu'un peut-il me dire comment obtenir l'URL racine de mon application Web de servlet?

public class MyServlet extends HttpServlet { 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     String rootURL=""; 
     //Code to get the URL where this servlet is deployed 

    } 
} 
+0

Chaîne rooturl = request.getRequestURL() toString() remplacer (request.getRequestURI(), "");.. – Sllouyssgort

+0

@Sllouyssgort ne fonctionne pas parce que 'getRequestURI()' inclut 'myapp' – Black

Répondre

36

Vous vous rendez compte que le client URL voit (et/ou types dans son navigateur) et l'URL servi par le conteneur votre servlet est déployé sur peut être très différent?

Afin d'obtenir ce dernier, cependant, vous avez quelques méthodes disponibles sur HttpServletRequest:

  • Vous pouvez appeler getScheme(), getServerName(), getServerPort() et getContextPath() et les combiner à l'aide des séparateurs appropriés
  • OU vous peut appeler getRequestURL() et supprimer getServletPath() et getPathInfo() à partir de celui-ci.
+0

Je crois que' myapp' est un nom/chemin de servlet, dans l'exemple d'OP. Ce que vous dites? –

+0

"myapp" est un chemin de contexte – ChssPly76

2
  1. Ecrivez un scriptlet dans le fichier de bienvenue pour capturer le chemin racine. Je suppose que index.jsp est le fichier par défaut. Donc, mettez le code suivant dans cette

    <% RootContextUtil rootCtx = RootContextUtil.getInstance(); if(rootCtx.getRootURL()==null){ String url = request.getRequestURL().toString(); String uri = request.getRequestURI(); String root = url.substring(0, url.indexOf(uri)); rootCtx.setRootURL(root); } %>

  2. Cette variable chaque fois que nécessaire dans l'application directement en appelant la valeur

String rootUrl = RootContextUtil.getInstance().getRootURL();

NOTE: Pas besoin de vous inquiéter A propos de protocoles/ports/etc .. J'espère que cela aide tout le monde

11

Cette fonction vous permet d'obtenir votre URL de base d'un HttpServletRequest:

public static String getBaseUrl(HttpServletRequest request) { 
    String scheme = request.getScheme() + "://"; 
    String serverName = request.getServerName(); 
    String serverPort = (request.getServerPort() == 80) ? "" : ":" + request.getServerPort(); 
    String contextPath = request.getContextPath(); 
    return scheme + serverName + serverPort + contextPath; 
    }