2010-06-14 32 views
7

Tengo dos aplicaciones web, por ejemplo, App1 y App2. Quiero llamar a un servlet que está en App2 desde un servlet en App1. Estoy usando URLConnection para esto. También puedo pasar parámetros al servlet en App2 y también puedo recibir respuesta del servlet como cadena. Pero quiero enviar objetos Java desde el servlet en App2 y recibirlos en servlet de App1. ¿Cómo lograr esto?comunicación entre servlets remotos

Respuesta

10

Depende.


Si esos webapplications funciona a físicamente el mismo servidor web en el mismo servletcontainer, a continuación, sólo configurarlo como un atributo de la petición y enviar la solicitud a la otra contexto:

request.setAttribute("name", object); 
ServletContext app2 = getServletContext().getContext("app2"); 
app2.getRequestDispacher("servletUrl").forward(request, response); 

El otro contexto será capaz de obtener el objeto de la siguiente manera:

Object object = request.getAttribute("name"); 

Esto solo requiere una configuración de servidor para que los contextos sean accesibles entre sí. Cómo hacer esto depende del servletcontainer. En Tomcat, por ejemplo, solo tiene que establecer el atributo crossContext del elemento <Context> de la aplicación web en true.

<Context crossContext="true"> 

Luego estará disponible para otros contextos. Para otros servidores, consulte su documentación.


Si esos webapplications funciona a diferentes físicamente servidor web, entonces hay varias opciones:

  1. Convertir a cadena y enviar como parámetro. En la recuperación, convierte de nuevo desde String. JSON es un buen formato para esto. Google Gson ofrece posibilidades de conversión entre objetos de Java de pleno valor y JSON y viceversa. Si está utilizando GET y el URI de solicitud es bastante largo, más de 2 KB, considere utilizar POST en lugar de GET, de lo contrario, el servidor podría truncar el URI. Pros: mejor servicio reutilizable. Contras: datos binarios difíciles de enviar.

    Véase también:Converting JSON to Java.

  2. envía una solicitud POST HTTP utilizando multipart/form-dataURLConnection o Apache HttpComponents Client según RFC2388 y procesarlo en el otro lado usando Apache Commons FileUpload. Pros: especificación estándar, es posible enviar datos binarios. Contras: más código.

    Véase también:How to use URLConnection.

  3. Serialize el objeto de Java, lo escriben en bruto a la URLConnection#getOutputStream() usando ObjectOutputStream y recuperarlo en bruto de la HttpServletRequest#getInputStream() y unserialize usando ObjectInputStream. Pros: fácil. Contras: no reutilizable, ajustado.

    Véase también:Object Streams y Lesson: Serialization.

1

Uso Serialization

En lugar de enviar HTML podrás enviar objetos arroyos.

Simplemente, tenga en cuenta que para agregar seguridad adicional, no desea que una fuente externa inyecte objetos envenenados en sus llamadas.

Cuestiones relacionadas