Как я могу получить имя хоста (с портом), на котором находится сервлет
Вопрос
Я думал, что сервлек может предоставить метод. Поддается ли метод GetAttribute () ServletContext предложит любую помощь IE, есть ли имя атрибута (может быть, «хозяин», «порт»), который будет помощь.
Причиной этого я хочу, чтобы мое приложение запустилось, где это развернуто, и в какой-то момент я должен позволить пользователю щелкнуть ссылку, которая указывает на местоположение на файловом сервере. Следовательно, мне нужно ссылаться на хост и порт и не может использовать внутреннюю ссылку.
Решение
ServletRequest.getServerName(...)
ServletRequest.getServerPort(...)
Другие советы
Объект сервелевата, который был передан на ваш метод Doget или DOPOST getServerName
а также getServerPort
Методы, которые предоставляют эту информацию.
например
public void doGet(ServletRequest request, ServletResponse response) {
System.out.println("Host = " + request.getServerName());
System.out.println("Port = " + request.getServerPort());
}
@Everyone имеет хороший ответ. Но принимая схему, имя сервера и порт, затем Mergin их. Есть более простой способ:
Вы можете использовать Httpservletrequest.getrequesturl. а также Httpservletrequest.getrequesturi.
StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();
String host = url.substring(0, url.indexOf(uri)); //result
Я нашел в моем старом проекте строку:
request.getHeader("host").contains("xxx")
Может быть, это решение?
Как упомянутые выше другие, хост и порт может быть получен через запрос. С другой стороны, для сервета невозможно предоставить информацию, поскольку приложения Java не знают о вашей среде Host. Т.е. приложение с контекстным путем «FOO» (который может быть получен сервлетконтестом # getContextPath ()) может принимать запросы как из HTTP Port 8080, так и порта 8043 HTTPS. Ссылка: https://web.archive.org/web/20120401225136/http://www.java.net:80/node/701934.