Корень URl сервлета
Я хочу получить корневой URL-адрес моего веб-приложения с одного из сервлетов.
Если я разверну свое приложение в "www.mydomain.com", я хочу получить корневой url как " http://www.mydomain.com".
То же самое, если я развожу его на локальном сервере tomcat с портом 8080, он должен дать http://localhost:8080/myapp
Может ли кто-нибудь сказать мне, как получить корневой URL моего веб-приложения из сервлета?
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
}
}
Ответы
Ответ 1
Вы понимаете, что клиент URL видит (и/или вводит его в свой браузер), а URL-адрес, обслуживаемый контейнером, на котором установлен ваш сервлет, может сильно отличаться?
Чтобы получить последнее, у вас есть несколько методов, доступных на HttpServletRequest:
- Вы можете вызвать
getScheme()
, getServerName()
, getServerPort()
и getContextPath()
и объединить их с помощью соответствующих разделителей
- ИЛИ вы можете вызвать
getRequestURL()
и удалить из него getServletPath()
и getPathInfo()
.
Ответ 2
Эта функция поможет вам получить базовый URL-адрес от 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;
}
Ответ 3
Как правило, вы не можете получить URL-адрес; но существуют обходные пути для конкретных случаев. См. Поиск URL вашего приложения только с ServletContext
Ответ 4
-
Напишите скриптлет в файле приветствия для захвата корневого пути. Я предполагаю, что index.jsp является файлом по умолчанию. Поэтому введите следующий код в
<%
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 );
}
%>
-
Используйте эту переменную везде, где это необходимо в приложении, путем вызова значения как
String rootUrl = RootContextUtil.getInstance().getRootURL();
ПРИМЕЧАНИЕ: Не нужно беспокоиться о протоколах/портах и т.д. Надеюсь, это поможет каждому