Ответ 1
ServletRequest.getServerName(...)
ServletRequest.getServerPort(...)
Я думал, что ServletContext может предоставить метод. Способ getAttribute() ServletContext предоставляет любую помощь, т.е. Есть ли имя атрибута (возможно, "хост", "порт" ), который будет полезен.
Причиной этого является то, что я хочу, чтобы мое приложение запускалось там, где оно было развернуто, и в какой-то момент я должен позволить пользователю щелкнуть ссылку, указывающую на местоположение на файловом сервере. Следовательно, мне нужно ссылаться на хост и порт и не может использовать внутреннюю ссылку.
ServletRequest.getServerName(...)
ServletRequest.getServerPort(...)
Объект ServletRequest, который был передан вашему doGet, или метод doPost имеет методы getServerName
и getServerPort
, которые предоставляют эту информацию.
например,
public void doGet(ServletRequest request, ServletResponse response) {
System.out.println("Host = " + request.getServerName());
System.out.println("Port = " + request.getServerPort());
}
Я нашел в своем старом проекте строку:
request.getHeader("host").contains("xxx")
может быть, это решение?
Как упоминалось выше, хост и порт могут быть получены через запрос. С другой стороны, ServletContext невозможно предоставить информацию, поскольку приложения Java не знают о вашей среде хоста. т.е. приложение с контекстным путем "foo" (которое может быть получено ServletContext # getContextPath()) может получать запросы как с http-порта 8080, так и с порта https 8043. Ссылка: https://www.java.net/node/701934
@У каждого есть хороший ответ. Но принимая схему, имя сервера и порт, затем слияние их. Существует более простой способ:
Вы можете использовать HttpServletRequest.getRequestURL и HttpServletRequest.getRequestURI.
StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();
String host = url.substring(0, url.indexOf(uri)); //result