Я разрабатываю сервлет, который получает название веб-сервиса и мог быть, передают запрос к внешнему веб-сервису, например: 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/...
на сервере как локальный ресурс.
Как я могу сделать внешний запрос?
Спасибо
Чтобы сделать любой запрос к внешней службе, вам нужно явно создать новый HTTP-запрос и обработать его ответ. Взгляните на класс HttpUrlConnection .
Вы не упоминаете, какую службу вы хотите вызвать, но в любом случае ваш сервлет работает как клиент службы, поэтому вам следует обратить внимание на технологии клиентов службы.
Для вызова служб стиля REST можно использовать java.net.URL
или Apache Commons HttpClient для отправки запроса на URL и получения ответа.
Для вызова служб SOAP можно использовать Apache Axis или Java WSIT .
forward
, который вы используете, используется для связи между ресурсами сервера (например: сервлет на сервлет, как вы выяснили). Если вы хотите перенаправить в другое место, вы можете использовать sendRedirect HttpServletResponse
метод.
Лучше всего
Выполните свой собственный HTTP-запрос и передайте результаты обратно в
браузер. Это звучит сложнее, чем есть на самом деле. В основном вы создаете
java.net.HttpURLConnection
с URL-адресом веб-сайта, который вы хотите открыть
"перенаправить" на. Фактически он может содержать параметры запроса (если
они не слишком большие), так как они никогда не будут отправлены в браузер пользователя
либо и не будет отображаться в адресной строке браузера. Откройте соединение, получите
содержимое и запишите его в OutputStream сервлета.