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
}
}
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 :
getScheme()
, getServerName()
, getServerPort()
et getContextPath()
et les combiner à l'aide des séparateurs appropriésgetRequestURL()
et en supprimer getServletPath()
et getPathInfo()
.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;
}
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
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;
}
É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 ); } %>
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