Вызов внешнего веб-сервиса из сервлета - PullRequest
6 голосов
/ 18 мая 2010

Я разрабатываю сервлет, который получает имя веб-службы и может перенаправить запрос на внешний веб-сервис, например: http://www.webservice.com/...

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

Пример:

request.getRequestDispatcher("aMyServlet").forward(request, response) // WORKS
 request.getRequestDispatcher("http://www.webservice.com/...").forward(request, response)

Нет, потому что Tomcat ищет на сервере http://www.webservice.com/... как локальный ресурс.

Как мне сделать внешний запрос?

Спасибо

Ответы [ 3 ]

4 голосов
/ 18 мая 2010
Метод

forward, который вы используете, используется для связи между ресурсами сервера (например, от сервлета к сервлету, как вы узнали). Если вы хотите перенаправить в другое место, вы можете использовать метод HttpServletResponse's sendRedirect. Лучший вариант - Выполните свой собственный HTTP-запрос и отправьте результаты обратно на браузер. Это звучит сложнее, чем есть. В основном вы создаете java.net.HttpURLConnection с URL-адресом веб-сайта, который вы хотите "перенаправить" на. Это может фактически содержать параметры запроса (до тех пор, пока они не слишком большие), так как они никогда не будут отправлены в браузер пользователя либо не будет отображаться в строке URL браузера. Откройте соединение, получите содержимое и запишите его в OutputStream сервлета.

2 голосов
/ 18 мая 2010

Чтобы сделать любой запрос к сторонней службе, вам придется явно сделать новый HTTP-запрос и обработать его ответ. Взгляните на класс HttpUrlConnection .

1 голос
/ 18 мая 2010

Вы не упоминаете, какой тип сервиса вы хотите вызвать, но в любом случае ваш сервлет функционирует как сервисный клиент, поэтому вам следует обратить внимание на технологии сервисного клиента.

Для вызова служб в стиле REST, java.net.URL или Apache Commons HttpClient может использоваться для отправки запроса на URL и получения ответа.

Для вызова служб SOAP вы можете использовать Apache Axis или Java WSIT .

...