web-dev-qa-db-fra.com

URL racine de la servlet

Je souhaite obtenir l'URL racine de mon application Web à partir de l'un des servlets.

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

Même chose si je le déploie sur un serveur Tomcat local avec un port 8080, il devrait donner http://localhost:8080/myapp

Quelqu'un peut-il me dire comment obtenir l'URL racine de mon application Web à partir du 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

    }
}
34
DonX

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

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

  • Vous pouvez soit appeler getScheme(), getServerName(), getServerPort() et getContextPath() et les combiner à l'aide des séparateurs appropriés
  • OU vous pouvez appeler getRequestURL() et en supprimer getServletPath() et getPathInfo().
38
ChssPly76

Cette fonction vous aide à obtenir votre URL de base à partir 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;
  }
14
Benny Neugebauer

En règle générale, vous ne pouvez pas obtenir l'URL; mais, il existe des solutions de contournement pour des cas spécifiques. Voir Recherche de l'URL de votre application avec uniquement un ServletContext

5
janko
public static String getBaseUrl(HttpServletRequest request) {
    String scheme = request.getScheme();
    String Host = request.getServerName();
    int port = request.getServerPort();
    String contextPath = request.getContextPath();

    String baseUrl = scheme + "://" + Host + ((("http".equals(scheme) && port == 80) || ("https".equals(scheme) && port == 443)) ? "" : ":" + port) + contextPath;
    return baseUrl;
}
2
Mohsen Zamani
  1. Écrivez un scriptlet dans le fichier de bienvenue pour capturer le chemin racine. Je suppose que index.jsp est le fichier par défaut. Mettez donc le code suivant dans ce

    <% 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. Utilisez cette variable là où vous en avez besoin directement dans l'application en appelant la valeur comme

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

REMARQUE: Pas besoin de se soucier des protocoles/ports/etc. J'espère que cela aide tout le monde

2
jagan