Как я могу получить имя хоста (с портом), в котором находится сервлет - PullRequest
40 голосов
/ 07 апреля 2010

Я думал, что ServletContext может предоставить метод. Предоставляет ли метод getAttribute () ServletContext какую-либо справку, т. Е. Есть имя атрибута (может быть, "host", "port"), которое будет помогать.

Причина этого в том, что я хочу, чтобы мое приложение работало везде, где оно развернуто, и в какой-то момент я должен позволить пользователю щелкнуть ссылку, указывающую на местоположение на файловом сервере. Следовательно, мне нужно ссылаться на хост и порт, и я не могу использовать внутреннюю ссылку.

Ответы [ 5 ]

56 голосов
/ 07 апреля 2010
ServletRequest.getServerName(...)
ServletRequest.getServerPort(...)
14 голосов
/ 07 апреля 2010

Объект ServletRequest, который был передан в ваш метод doGet или метод doPost, имеет методы getServerName и getServerPort, предоставляющие эту информацию.

например

public void doGet(ServletRequest request, ServletResponse response) {
    System.out.println("Host = " + request.getServerName());
    System.out.println("Port = " + request.getServerPort());
}
5 голосов
/ 23 февраля 2016

@ У каждого есть хороший ответ. Но, взяв схему, имя сервера и порт, объедините их. Есть более простой способ:

Вы можете использовать HttpServletRequest.getRequestURL и HttpServletRequest.getRequestURI .

StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();
String host = url.substring(0, url.indexOf(uri)); //result
3 голосов
/ 27 июня 2014

Как уже упоминалось выше, хост и порт могут быть получены через запрос.С другой стороны, ServletContext не может предоставить информацию, поскольку Java-приложения не знают о вашей хост-среде.то есть приложение с контекстным путем "foo" (которое может быть получено с помощью ServletContext # getContextPath ()) может получать запросы как с http-порта 8080, так и с https-порта 8043. Ссылка: https://web.archive.org/web/20120401225136/http://www.java.net:80/node/701934

3 голосов
/ 07 апреля 2010

Я нашел в моем старом проекте строку:

request.getHeader("host").contains("xxx")

может быть, это решение?

...