domingo, 4 de diciembre de 2011

Comenzando con AppEngine, nuestro Hola Mundo!


Objetivo : Aprender AppEgine para utilizarlo desde nuestras aplicaciones Android, asi que ya en la entrada anterior fuimos configurando el entorno, ahora a ponermos a programar el primer proyecto.

Creación de un proyecto AppEgine

Las aplicaciones App Engine Java utilizan el estándar Java Servlet para interactuar con el entorno del servidor web. Los archivos de la aplicación, junto con las clases compiladas, los archivos JAR, los archivos estáticos y los archivos de configuración, están organizados en una estructura de directorio que utiliza el formato estándarWAR para aplicaciones web Java. Puedes utilizar el proceso de desarrollo que desees para desarrollar servlets web y para generar un directorio WAR. Los archivos del directorio WAR no son compatibles con el SDK.

El directorio del proyecto

Como proceso de aprendizaje, se usara un único directorio denominado Guestbook/ para todos los archivos del proyecto. Un subdirectorio llamado src/ contiene el código fuente Java, mientras que otro subdirectorio llamado war/ contiene la aplicación completa organizada en el formato WAR. El proceso de compilación compila los archivos de código fuente Java y coloca las clases compiladas en la ubicación apropiada en war/.
El directorio completo del proyecto es similar a:
Guestbook/
  src/
    ...Java source code...
    META-INF/
      ...other configuration...
  war/
    ...JSPs, images, data files...
    WEB-INF/
      ...app configuration...
      lib/
        ...JARs for libraries...
      classes/
        ...compiled classes...
Si usas Eclipse (hacelo che!!) , crea un nuevo proyecto haciendo clic en el botón "New Web Application" (Nueva aplicación web) en la barra de herramientas:  Asigna al proyecto un nombre ("Project name"), por ejemplo, Guestbook, y un paquete ("Package"), por ejemplo, guestbook. Asegúrate también de que la casilla "Use Google Web Toolkit" (Utilizar Google Web Toolkit) esté desactivada y de que la casilla "Use Google App Engine" (Utilizar Google App Engine) esté activada. Para obtener más información, consulta Uso del complemento de Google para Eclipse. El asistente crea la estructura de directorios y los archivos tal y como se describe a continuación.
Si no utilizas Eclipse JODETE! jajaja! no.... crea la estructura de directorio que te mostre recien. Mientras lees los archivos descritos en esta sección, crea los archivos con los nombres y las ubicaciones especificados.
Puedes también copiar la nueva plantilla del proyecto, que se incluye en el SDK, en el directorio appengine-java-sdk/demos/new_project_template/.

La clase Servlet

Las aplicaciones App Engine Java utilizan el API Java Servlet para interactuar con el servidor web. Un servlet HTTP es una clase de aplicación que puede procesar y responder solicitudes web. Esta clase amplía la clase javax.servlet.GenericServlet o la clase javax.servlet.http.HttpServlet.
Nuestro proyecto del libro de visitas comienza con una clase servlet sencilla que muestra un mensaje.
Si no utilizas el pluggin de Eclipse, crea los directorios de la ruta src/guestbook/ y el archivo de clase servlet que te muestro ahora.
El directorio src/guestbook/ incluye un archivo llamada GuestbookServlet.java que tiene esto:
package guestbook;
import java.io.IOException;
import javax.servlet.http.*;
public class GuestbookServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.setContentType("text/plain");
        resp.getWriter().println("Hello, world");
    }
}

El archivo web.xml

Cuando el servidor web recibe un solicitud (un request), decide qué clase servlet se invoca mediante un archivo de configuración conocido como el descriptor de implementación de la aplicación web. Este archivo se denomina web.xml y se encuentra en el directorio war/WEB-INF/ del WAR. WEB-INF/ y web.xml forman parte de la especificación del servlet.
El directorio war/WEB-INF/ incluye un archivo denominado web.xml que contiene lo siguiente:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
    <servlet>
        <servlet-name>guestbook</servlet-name>
        <servlet-class>guestbook.GuestbookServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>guestbook</servlet-name>
        <url-pattern>/guestbook</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>
Este archivo web.xml declara un servlet denominado guestbook y lo asigna a la ruta de URL /guestbook. Especifica también que siempre que el usuario vaya en busca de una ruta de URL que no esté ya asignada a un servlet y que represente una ruta del directorio dentro del WAR de la aplicación, el servidor debe buscar un archivo denominado index.html en dicho directorio y suministrarlo si lo encuentra.

El archivo appengine-web.xml

App Engine necesita un archivo de configuración adicional para poder desarrollar y ejecutar la aplicación. Este archivo se denomina appengine-web.xml y se encuentra en WEB-INF/ junto con web.xml. Incluye el ID registrado de la aplicación (que Eclipse crea a partir de un ID vacío que rellenas más adelante), el número de versión de la aplicación y las listas de archivos que se deben tratar como archivos estáticos (por ejemplo, las imágenes y las hojas de estilo CSS), así como archivos de recursos (por ejemplo, los archivos JSP y otros datos de aplicación).
El directorio war/WEB-INF/ incluye un archivo denominado appengine-web.xml que contiene lo siguiente:
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application></application>
    <version>1</version>
</appengine-web-app>
appengine-web.xml es específico de App Engine y no forma parte del estándar de servlet. En el directorio appengine-java-sdk/docs/, tenes mas archivos XML que describen el formato de este archivo en el SDK. Para obtener más información acerca de este archivo, consulta Configuración de una aplicación.

Ejecución del proyecto

El SDK de App Engine incluye una aplicación de servidor web que podemos utilizar para probar la aplicación. El servidor simula los servicios y el entorno de App Engine, que incluyen restricciones en la zona de pruebas, el almacén de datos y los servicios.
Si utilizas Eclipse, vamos a arrancar el servidor de desarrollo en el depurador de Eclipse. Asegurate de seleccionar el proyecto ("Guestbook" o libro de visitas) y, a continuación, en el menú Run (Ejecutar) selecciona Debug As > Web Application (Depurar como > Aplicación web). Para obtener más información sobre cómo crear la configuración de depuración, consulta Uso del complemento de Google para Eclipse.
Si no utilizas Eclipse, consulta Uso de Apache Ant para obtener una secuencia de comandos de compilación que puede compilar el proyecto e iniciar el servidor de desarrollo. Para iniciar el servidor con esta secuencia de comandos de compilación, introduce el siguiente comando: ant runserver. Para detener el servidor, pulsa Control-C.

Realización de pruebas de la aplicación

Arrancaste el servidor? si, dale! asi a continuación, vamos a la URL del servidor mediante el navegador (usa  Chrome ,no? ). Si usas Eclipse y el complemento de Google para Eclipse, el servidor se ejecuta de forma predeterminada a través del puerto 8888:
Si utilizas el comando dev_appserver para iniciar el servidor, el puerto predeterminado es 8080:
En el resto de los post se asume que el servidor utiliza el puerto 8888, ok?
El servidor ejecuta el servlet y muestra el mensaje en el navegador.

Y como se continua?.....

Listo che! ya tenes una aplicación de App Engine. Podes implementar esta sencilla aplicación ahora mismo y compartirla con usuarios de todo el mundo.
Esta aplicación muestra un saludo general a todos los usuarios. Agregaremos una función para personalizar el saludo para cada usuario que utilice Google Accounts, esto y mucho mas en la proxima entrada del Blog.
Atentos a no perder de vista nuestro objetivo, que es aprender AppEgine para utilizarlo desde nuestras aplicaciones Android.
Hasta la próxima entrega,
Mariano!

No hay comentarios:

Publicar un comentario