Получение адреса сервера и имени приложения

#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 запроса, а не только контекстный путь.