Корневой URl сервлета - PullRequest
       8

Корневой URl сервлета

32 голосов
/ 27 октября 2009

Я хочу получить корневой 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

    }
}

Ответы [ 5 ]

38 голосов
/ 27 октября 2009

Вы понимаете, что клиент URL видит (и / или вводит в свой браузер), и URL, обслуживаемый контейнером, на котором развернут ваш сервлет, может сильно отличаться?

Чтобы получить последнее, у вас есть несколько методов, доступных на HttpServletRequest :

  • Вы можете либо позвонить getScheme(), getServerName(), getServerPort() и getContextPath() и объединить их, используя соответствующие разделители
  • ИЛИ вы можете позвонить getRequestURL() и удалить getServletPath() и getPathInfo() из него.
12 голосов
/ 19 июня 2016

Эта функция помогает вам получить базовый 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;
  }
5 голосов
/ 27 октября 2009

Как правило, вы не можете получить URL; но есть обходные пути для конкретных случаев. См. Поиск URL вашего приложения только с ServletContext

2 голосов
/ 14 марта 2018
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 голосов
/ 18 ноября 2011
  1. Напишите скриптлет в файле приветствия для захвата корневого пути. Я предполагаю, что 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 ); } %>

  2. Используйте эту переменную там, где это необходимо в приложении, напрямую, вызывая значение

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...