Подтвердить что ты не робот

Как найти URL-адрес моего веб-сервиса?

Я знаю, что это может показаться глупым вопросом, но я просто не могу найти никакой информации по этому вопросу. У меня есть веб-сервис java (сгенерированный с использованием NetBeans), и внутри класса веб-службы я хотел бы узнать URL-адрес, на котором была развернута веб-служба. Например, если я развертываю веб-службу на своем локальном сервере GlassFish, веб-сервис можно получить на "http://localhost: 8080/MyService/", где "MyService" - это имя моей службы. Причина, по которой мне нужно знать этот URL-адрес, заключается в том, что мой веб-сервис генерирует некоторые файлы, которые мне нужно сделать доступными по этому URL-адресу. Например, вызов веб-службы возвращает URL-адрес "http://localhost: 8080/MyService/report.html", Я нашел несколько ссылок о "WebServiceContext", но я не могу получить URL-адрес, на котором работает мой веб-сервис.

Edited

Чтобы уточнить: Внутри класса MyWebService.java я хочу узнать URL-адрес, на котором был развернут мой веб-сервис (в этом случае моя веб-служба работает на "http://localhost: 8080/MyService/", но как только он будет развернут на рабочем сервере, этот URL-адрес изменится)

4b9b3361

Ответ 1

Если вы спрашиваете, как найти имя хоста (например, "localhost" или "www.example.com" ), которое ваш сервлет-контейнер прослушивает, у вас есть несколько вариантов:

  • Добавить точку конфигурации, установленную во время развертывания (например, файл конфигурации, системное свойство)
  • Посмотрите, если ваш контейнер сервлета предоставляет любую конфигурацию "виртуального хоста" через JMX или читает его файлы конфигурации (например, tomcat hosts)
  • Найдите IP-адрес сервера и выполните поиск DNS, чтобы получить его настроенное имя хоста
  • Осмотрите заголовок "Host" входящего HttpServletRequest

    String hostname = request.getRequestHeader("Host");

Ответ 2

Легче, на мой взгляд, например:

@GET
public URI redirectSendMail(@Context UriInfo ui) {
  return ui.getBaseUri();
}

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

@GET
public String getResourcePath(@Context UriInfo ui) {
  return ui.getAbsolutePath();
}

Ответ 3

Надеюсь, что смогу вам помочь, я недавно начал работать с webservices (Jersey REST), и я обнаружил, что URL-адрес вашей конечной точки: 'HTTP://локальный: 8080/MyService/XXX/YYY'
где XXX = шаблон URL-адреса в отображении сервлетов в файле web.xml(например, файл ниже)

<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>   

и YYY - это путь, определяемый вашим параметром webservice @Path(), поэтому в случае этого примера это будет примерно так:

'http://localhost: 8080/MyService/rest/myPathDefinition'

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

Ответ 4

Добавьте свойство ниже в свой класс webservice.

@Resource    
private WebServiceContext wsCtxt;

Теперь ниже фрагмента кода вы получите нужные значения:

    MessageContext msgCtxt = wsCtxt.getMessageContext();
    HttpServletRequest request =
        (HttpServletRequest)msgCtxt.get(MessageContext.SERVLET_REQUEST);

    String hostName = request .getServerName();
    int port = request .getServerPort();

чтобы проверить, откуда был вызван веб-сервис, используйте приведенный ниже код.

    String clientIP = request .getRemoteAddr();

Связанный импорт ниже:

import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

import weblogic.jws.Context;

import weblogic.wsee.jws.JwsContext;