#java #servlets #jmx
#java #сервлеты #jmx
Вопрос:
Среда: NetBeans 6.9.1, GlassFish 3.1
У меня есть веб-приложение Java. Как получить адрес сервера и имя приложения динамически? Решение «2в1» было бы лучшим для меня: http://localhost:8080/AppName/
.
Есть ли практический способ получить эту информацию?
Допустим, значение AppName
будет фиксированным, поэтому мне нужен только адрес хоста. Возможно ли получить его через JMX? Есть другие способы?
Ответ №1:
HttpServletRequest
Объект предоставит вам то, что вам нужно:
HttpServletRequest#getLocalAddr()
: IP-адрес сервера в виде строкиHttpServletRequest#getLocalName()
: Имя сервера, принимающего запросHttpServletRequest#getServerName()
: Имя сервера, на который был отправлен запросHtppServletRequest#getLocalPort()
: Порт, на который сервер получил запросHttpServletRequest#getServerPort()
: Порт, на который был отправлен запросHttpServletRequest#getContextPath()
: Часть пути, которая идентифицирует приложение
Комментарии:
1. @Ging3r Нет. Это не так. Возможно, вам следует прислушаться к вашему собственному совету о внимательности и прочитать соответствующую документацию?
2. Что означает это имя метода pound sign в имени метода? Я никогда раньше этого не видел.
3. @ScottChu — Я, честно говоря, не могу вспомнить, откуда я скопировал вышесказанное 5 лет назад. Я согласен, что префикс «HttpServletRequest#» является необычным и ненужным.
4. Имя_класса#имя_метода_ — это обозначение, используемое в JavaDoc, например, в теге @see.
Ответ №2:
Внутри сервлета вы можете получить это следующим образом
public static String getUrl(HttpServletRequest request) {
return request.getRequestURL().toString();
}
Комментарии:
1. Это дает полный URL запроса, а не только контекстный путь.