2010-05-17 33 views
6

Estoy desarrollando un servlet que recibe el nombre de un servicio web y podría ser reenviar la petición a un servicio web externo, por ejemplo: http://www.webservice.com/...llamar a un servicio web externo desde un servlet

Tengo construir una respuesta contenedor que intercepta el resultado de la respuesta, pero no puedo reenviar la solicitud a un servicio web externo, solo funciona si redirijo la solicitud a un servlet que se encuentra en el mismo servidor.

Ejemplo:

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

no hace porque busca en Tomcat http://www.webservice.com/... en el servidor como un recurso local.

¿Cómo puedo hacer una solicitud externa?

Gracias

Respuesta

2

Para realizar cualquier solicitud de un servicio externo, tendrá que hacer explícita una nueva petición HTTP y manejar su respuesta. Eche un vistazo a la clase HttpUrlConnection.

1

No menciona qué tipo de servicio desea invocar, pero de cualquier forma, su servlet funciona como un cliente de servicio, por lo que debería buscar tecnologías de servicio al cliente.

Para invocar servicios de estilo REST, java.net.URL o Apache Commons HttpClient pueden utilizarse para enviar una solicitud de URL y obtener la respuesta.

Para invocar servicios SOAP, puede usar Apache Axis o Java WSIT.

4

forward método que está utilizando se utiliza para comunicarse entre los recursos del servidor, (por ejemplo: servlet a servlet como ha descubierto) Si desea redirigir a otra ubicación, puede utilizar el método HttpServletResponse's sendRedirect. La mejor opción es Realice su propia solicitud HTTP y transmita los resultados al explorador . Esto suena más difícil de lo que es. Básicamente, crea un java.net.HttpURLConnection con la URL del sitio web al que desea "redirigir". Esto realmente puede contener los parámetros de consulta (siempre y cuando no sean demasiado grandes) ya que nunca se enviará al navegador del usuario tampoco y no aparecerá en la barra de la URL del navegador. Abra la conexión, obtenga el contenido y escríbalo en OutputStream del Servlet.

Cuestiones relacionadas