domingo, 18 de mayo de 2008

Peticion POST con Google Web Toolkit y PHP

Bien actualmente estoy diseñando un interfaz web usando Google Web Toolkit un kit que aunque aun esta muy verde y no existe demasiada documentación pues siempre cuesta un poco dar cada paso.

Ahora eso si os recomiendo este toolkit es increible, de una facilidad pasmosa y lo mas aluciante programas en JAVA, es decir olvidate de lenguajes de script. Es un proyecto que esta evolucionando rapidamente y seguro que dentro de poco será una nueva alternativa muy válida para el desarrollo de interfaces webs.

En este ejemplo muy simple os explico como se haria una petición POST con google web toolkit que se ejecuta en el cliente, y capturar esa petición con codigo PHP que se ejecute en el servidor.

Espero que os sea muy util ;)

Bien pues con google web toolkit lo primero es crearnos un proyecto para ello actualmente se tiene que hacer desde consola y las instrucciones de como hacerlo podeis encontrarlas en la dirección:
http://code.google.com/webtoolkit/gettingstarted.html

Una vez creado el proyecto como sabreis google web toolkit usa una clase que implementa el interfaz EntryPoint y que será nuestra clase principal como el MAIN en otros lenguajes.

Bien inicialmente esta clase ya viene implementa con un ejemplo de un boton que dice click me! cuando lo pulsas.

Bien el primer paso será sustituir el contenido de esta clase por este otro:
public class MakePost implements EntryPoint {

public static void doPost(String url, String postData){
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST,url);
builder.setHeader("Content-type","application/x-www-form-urlencoded");

try{
Request response = builder.sendRequest(postData, new RequestCallback(){

public void onError(Request request, Throwable exception) {
Window.alert("onError");

}

public void onResponseReceived(Request request, Response response) {
Window.alert("onResponseReceived request:"+response.getText());

}
});
} catch (RequestException e){
Window.alert("Failed to send the request:"+e.getMessage());
}
}

public void onModuleLoad() {
doPost("/post.php", "nombre=HelloWorld");
}

Como podeis observar en el codigo creamos un metodo doPost que nos permitirá hacer peticiones POST a una web. Para nuestro ejemplo la petición será realizada hacia post.php fichero php que se ejecutará en el servidor para capturar la petición y que como indica la barra "/" delante del nombre la colocaremos en el DocumentRoot de nuestro Apache.

Nota importante observar que para que la petición se realice correctamente en el objeto Request se actualiza la cabecera de la petición con este valor:
builder.setHeader("Content-type","application/x-www-form-urlencoded");

Si no hacemos esto no funcionará!!

Ahora en el fichero de configuración de nuestro proyecto google web toolkit que es un fichero xml llamado:
MiAplicacion.gwt.xml

Tendremos que añadir una linea que nos permita usar las clases para la petición HTTP:
<module>

<!-- Inherit the core Web Toolkit stuff. -->
<inherits name='com.google.gwt.user.User'/>
<inherits name='com.google.gwt.http.HTTP'/>

<!-- Specify the app entry point class. -->
<entry-point class='com.cica.client.MakePost'/>

</module>



El siguiente paso será compilar nuestra clase, con el script shell que nos genera gwt automaticamente y que se encuentra en el directorio raiz de nuestro proyecto:
MiAplicacion-compile

Al ejecutarlo nos generará una carpeta WWW con todo el contenido repleto de ficheros html y javascript que son el resultado de traducir nuestro codigo java.

Esta carpeta la copiaremos en el documentRoot de nuestro Apache tambien

Por ultimo lo unico que nos queda es el fichero que captura la petición llamado post.php que como he dicho anteriormente se encuentra en el DocumentRoot de apache y tendrá el siguiente contenido:
<html>
<head>
<title>Recibir Post</title>
</head>
<body>
<h1>Recibir Post</h1>
<?php
echo "Recibo: ".$_POST['nombre'].";
?>
</body>
</html>

Y bueno eso es todo ;)

No hay comentarios: