Получить доменное имя в URL с JSTL? - PullRequest
7 голосов
/ 27 сентября 2010

Я пытаюсь получить доменное имя из URL с помощью JSTL. 2 метода, которые я знаю, возвращают неверную информацию. Мне нужно именно то, что в URL.

Когда я делаю:

${pageContext.request.remoteHost}

Я получаю IP-адрес моего сервера.

Когда я делаю:

${pageContext.request.serverName}

Обычно я получаю правильное доменное имя, но на сервере amazon он возвращает «server1» вместо правильного доменного имени, вероятно, из-за того, как он обрабатывает несколько доменов.

Кто-нибудь знает, как я могу получить текущее доменное имя в URL?

Возможно, мне потребуется получить URL-адрес, а затем проанализировать его. Как бы я это сделал?

Ответы [ 4 ]

12 голосов
/ 28 сентября 2010

Вы должны использовать ServletRequest#getLocalName().Возвращает реальное имя хоста сервера.ServletRequest#getServerName() действительно возвращает значение, установленное в заголовке Host.

${pageContext.request.localName}

Вот и все.Решения, предложенные в других ответах, просты и неуклюжи.


Кстати, ServletRequest#getRemoteHost() не возвращает имя хоста сервера, но имя клиента (илиIP, когда имя хоста не может быть сразу разрешено).Очевидно, что он совпадает с сервером, когда вы одновременно запускаете веб-сервер и веб-браузер на одной машине.Если вас интересует IP-адрес сервера, используйте ServletRequest#getLocalAddr().Термины «локальный» и «удаленный» должны интерпретироваться с точки зрения сервера, а не с точки зрения клиента.Это ведь сервер там, где работает весь этот Java-код.

2 голосов
/ 27 сентября 2010

Вы можете разобрать доменное имя с URL

ИЛИ

 public static String getDomainName(String url)
    {
         URL u;
         try {
             u = new URL(url);
         } 
         catch (Exception e) { 
             return "";
         }
         return u.getHost();
    }
1 голос
/ 27 сентября 2010

Вы можете использовать HttpServletRequest.getRequestUrl() для:

Восстанавливает URL-адрес, использованный клиентом для выполнения запроса.Возвращенный URL-адрес содержит протокол, имя сервера, номер порта и путь к серверу, но он не включает параметры строки запроса.

это вернет строку типа Получить имя домена в URL сJSTL?

После этого необходимо разобрать эту строку, чтобы найти строку, которая идет после схемы (http, https и т. Д.) И перед requestURI .

0 голосов
/ 11 сентября 2013

$ {pageContext.request.contextPath}

...