2011-10-15 17 views
6

Necesito llamar a un servlet POST desde otro servlet y pasar un blob en los parámetros de los servlets. ¿Es esto posible? Si es así, ¿cómo puede hacerse? PD: No puedo usar Apache HttpClientLlamando al Servlet Post desde otro Servlet

+0

Well Apache HttpClient es de código abierto ... ¿copiar y pegar? –

+0

No puedo usar porque utilizo Google App Engine e impone limitaciones en algunas clases que se pueden usar – fernandohur

Respuesta

8

Debe crear y enviar una solicitud HTTP usted mismo. No puede hacer uso de reenviar/redireccionar/incluir porque quiere cambiar el método de GET a POST y desea enviar una solicitud de multipart/form-data.

Como HttpClient (¿y otra biblioteca de terceros?) Aparentemente no es una opción, su mejor opción es utilizar la API Java SE estándar provista java.net.URLConnection. Larga historia corta: Using java.net.URLConnection to fire and handle HTTP requests En la parte inferior se puede encontrar un ejemplo de multipart/form-data.

Tenga en cuenta que este problema no es específico de los servlets. En otras palabras, debe poder ejecutar este código en una aplicación Java estándar simple con un método main(). Esto permite una prueba más sencilla y ajustes finos. Una vez que lo haga funcionar, simplemente deje que el servlet ejecute la misma pieza de código.


Sin relación al problema, tengo la impresión de que hay un fallo de diseño importante en algún lugar, desde luego, si los servlets ambos se ejecuta en el mismo contexto de aplicación web. El otro servlet al que desea enviar la solicitud POST aparentemente está demasiado ajustado y debe refactorizarse.

1

¿Quiere decir llamar desde su aplicación a otro servicio web? Si es así, entonces algo como HttpClient es lo que quiere. Si quiere decir que desea invocar de forma programática otro servlet en su aplicación, entonces está buscando forward to it o include it.

+0

Estoy buscando llamar a otro servlet dentro de mi aplicación, pero debe ser a través del método POST. Lo que normalmente haría es response.redirect (...) pero eso llama al método GET ... ¿Cómo puedo llamar al POST? – fernandohur

+0

Lo que dije: reenvía o incluye, dependiendo de lo que trates de hacer. Consulte ["Invocar otros recursos web" en el tutorial de JEE] (http://download.oracle.com/javaee/6/tutorial/doc/bnagi.html) para obtener más detalles. –

7

Puede obtener un despachador a otro servlet en su aplicación y reenviarlo o incluirlo como lo sugiere @Ryan. El código debe ser algo así dentro de su primer servlet:

ServletContext context = this.getServletContext(); 
RequestDispatcher dispatcher = context.getRequestDispatcher("/otherurltoservlet"); 

// change your request and response accordingly 

dispatcher.forward(request, response); 
+0

Lo que necesito es llamar al método POST en otro servlet en mi aplicación. ¿Llamará eso al método POST de "otherurltoservlet"? – fernandohur

+0

Creo que si se llamó al primer servlet por correo, se llamará al segundo a través de una publicación en la cadena dispatcher.forward. – rmarimon

+0

Mire aquí la pregunta sobre GET para POST http://stackoverflow.com/questions/4374548/does-jspforward-or-requestdispatcher-forward-use-get-or-post – rmarimon