Подтвердить что ты не робот

Корень 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

    }
}
4b9b3361

Ответ 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;
  }

Ответ 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();

ПРИМЕЧАНИЕ: Не нужно беспокоиться о протоколах/портах и ​​т.д. Надеюсь, это поможет каждому