Construir una Aplicacion Web utilizando HttpUnit y la Metodología Diriga al Test

Aunque Ant ahora sabe lo que tiene que hacer, tu aplicaci�n Web todav�a no est� preparada para desplegarse. Necesitas a�adir cuatro ficheros al directorio src/WEB-INF: struts-config.xml, tiles-defs.xml, validation.xml, y web.xml. El descritor web.xml es obligatorio para todas las aplicaciones Web. Los otros tres descriptores XML los utiliza Struts.

Deber�as obtener los cuatro ficheros del c�digo de ejemplo: struts-config.xml.v1, tiles-defs.xml.v1, validation.xml.v1, y web.xml.v1. Copialos y renombralos como struts-config.xml, tiles-defs.xml, validation.xml, y web.xml, respectivamente:

  • struts-config.xml
    El descriptor struts-config.xml configura el marco de trabajo Struts para formularios, accciones, controladores, mensajes y plug-ins. La versi�n uno de struts-config.xml es una espina que s�lo configura el controlador, los ficheros de definici�n de mensajes de recursos, el plug-in Tiles y el plug-in Validator. El controlador es el panel central: todas las peticiones HTTP de acciones Struts pasan por �l. El fichero de definici�n de mensajes de recursos almacena los textos para preguntas y errores para hacer m�s sencilla la internacionalizacion de la aplicaci�n. El plug-in Tiles te permite componer varias p�ginas JSP en un s�la vista para mostrarla al usuario, de forma similar a como lo hacen los portales Web. El plug-in Validator te permite validar la entrada para asegurar que los formularios tienen los valores correctos.
  • Descriptor tiles-defs.xml
    El descriptor tiles-defs.xml configura el plug-in Tiles con las p�ginas que mostrar� la aplicaci�n. Actualmente el fichero no tiene p�ginas, esencialmente es un shell vac�o.
  • Descriptor validation.xml
    El descriptor validation.xml configura el plug-in Validator con los tipos y formatos de los datos que quieres aceptar para los formularios de tu aplicaci�n. Actualmente el fichero no contiene formularios, esencialmente es un shell vac�o.
  • Descriptor Web.xml
    El descriptor web.xml es el descriptor Web est�ndar especificado por el est�ndar J2EE. Tiene una estructura est�ndar bien definida. Puedes encontrar el DTD que define esta estructura en java.sun.com/dtd/web-app_2_3.dtd.

    En la versi�n uno del fichero web.xml suministrada en el c�digo de ejemplo, se han configurado varios �tems:

    1. Se ha seleccionado el nombre de la aplicaci�n como "Phone List Application". Este nombre lo utilizan herramientas que manejan WARs y herramientas que manejan las aplicaciones Web en ejecuci�n en un contenedor servelt como Tomcat.
    2. Se ha definido y configurado el servlet Action de Struts. La definici�n del servlet nos permite referenciarlo posteriormente en este descriptor. La configuraci�n activa y desactiva ciertas configuraciones y espec�fica la localizaci�n de otros ficheros de configuraci�n Struts en relaci�n al directorio ra�z del WAR.
    3. Se mapea el servlet Action que hemos definido pr�viamente para que maneje todas las URLs que terminen en ".do".
    4. Se ha configurado el timeout de sesi�n a 720 minutso (medio dia) para que no tengas que preocuparte de las p�rdidas de sesiones debido a la inactividad (como los paros para comer). Esto deber�a modificarse a unv alor razonable como 10 � 30 minutos en aplicaciones Web reales.
    5. Se configura la lista de ficheros de bienvenida para que las peticiones de directorios se comporten como si se hubiera a�adido un nombre de fichero (por ejemplo, la petici�n de directory/foo/bar primero intentar�a recuperar /foo/bar/index.jsp y /foo/bar/index.html, antes de mostrar el listado del directorio).
    6. Se definen las librer�as de etiquetas que usar�s en tu aplicaci�n y especifica sus localizaciones. Las librer�as de etiquetas permiten a los desarrolladores embeber etiquetas en las JSPs que llaman a c�digo en clases Java, posiblemente con par�metros especificados como atributos en la etiqueta JSP o posible con datos contenidos dentro de la etiqueta. (Para m�s informaci�n sobre las librer�as de etiquetas puedes consultar su especificaci�n).

.�Reconstruir la Aplicaci�n Web

Para construir la aplicaci�n Web, cambia al directorio ~/projects/phonelist,luego teclea Ant. Arranca Tomcat y despliega la aplicaci�n tecleando ant deploy. Si todo va bien, deber�as ver algo como esto en el fichero de log de Tomcat:

El log de Tomcat en la instalaci�n por defecto est� localizado en logs/localhost_log.2003-10-08.txt, excepto que 2003-10-08 se reemplaza con la fecha actual.

Ahora ejecuta el test tecleando ant test. Deber�as ver el algo como esto:

El error es una indicaci�n de que todav�a no has configurado el c�digo para manejar el URI /showList.do, que es lo que la clase del test le pide al servidor Web. Para corregir este problema necesitas escribir el c�digo que permita a la aplicaci�n Web pasar el test. Necesitas seguir los siguientes pasos:

  1. A�ade la sigiente secci�n para manageForm en la secci�n <form-beans> del ficheros struts-config.xml:
        <form-bean name="manageForm"
                   type="com.abcinc.phonelist.ManageForm"/>
    

    El formulario manageForm sigue la pista de los contactos que has seleccionado en la p�gina show list y permite a la acci�n delete recuperar las selecciones.

  2. A�ade las secciones para /showList y /delete en la secci�n <action-mappings> de struts-config.xml:
        <action path="/showList"
                type="com.abcinc.phonelist.ShowListAction"
                name="manageForm"
                scope="request"
                validate="false">
          <forward name="success" path="showList"/>
        </action>
    
        <action path="/delete"
                type="com.abcinc.phonelist.DeleteAction"
                name="manageForm"
                scope="request"
                validate="true">
          <forward name="success" path="showList"/>
        </action>
    

    La acci�n /showList ejemplariza la clase ShowListAction y ejecuta su c�digo, haciendo posible el reenv�o de success, que apunta a una vista llamada showList. ShowListAction presumiblemente reenv�a a success para poder mostrar los resultados generados.

    La acci�n /delete ejemplariza la clase DeleteAction y ejecuta su c�digo, haciendo posible el reenv�o de success, que apunta a una vista llamada showList. No tienes que implementar la clase DeleteAction, todav�a. Pero si necesitas definir la acci�n /delete ahora, porque hemos especificado la acci�n /delete como atributo action para la etiqueta <html:form> en showList.jsp. Struts requiere que tengas al menos una definici�n en struts-config.xml por cada formulario que utilices en tus p�ginas JSP y que est�n definidos con la etiqueta <html:form> de Struts.

  3. A�ade una secci�n para mainLayout en la secci�n <tiles-definitions> de tiles-defs.xml:
      <definition name="mainLayout" path="/mainLayout.jsp">
        <put name="titleString" value="Generic Title -- Change Me!" direct="true"/>
        <put name="body" value="Generic Content -- Change Me!" direct="true"/>
        <put name="bodyParam1" value="" direct="true"/>
      </definition>
    

    La definici�n de mainLayout es la plantilla base que podr�n extender otras definiciones de vistas. Especificamente, las vistas que deriven de mainLayout pueden sobreescribir las variables titleString, body, y bodyParam1. Las vistas hijas tambi�n podr�n introducir nuevas variables.

  4. A�ade una secci�n para showList en la secci�n <tiles-definitions> de tiles-defs.xml:
      <definition name="showList" extends="mainLayout">
        <put name="titleString" value="Phone List :: Show List"/>
        <put name="body" value="/showList.jsp"/>
      </definition>
    

    La definici�n de la vista showList desciende de la definici�n de mainLayout pero tiene un valor diferente para titleString y una p�gina body distinta.

  5. Copia ManageForm.java.v1 desde el archivo del c�digo de ejemplo y ponlo en src/WEB-INF/classes/com/abcinc/phonelist como ManageForm.java. La clase ManageForm es una clase form de Struts. Este tipo de clases contienen datos de formularios y permiten a la aplicacion recuperar los datos f�cilmente, de una forma orientada a objetos. Las clases form de Struts se adhieren al est�ndar JavaBean para m�todos accesores y mutadores (m�todos get y set, respectivamente).
  6. Copia ShowListAction.java.v1 desde el archivo del c�digo de ejemplo y ponlo en src/WEB-INF/classes/com/abcinc/phonelist como ShowListAction.java. La clase ShowListAction es una clase action de Struts. Este tipo de clases sirven como clases controladoras, en las que podemos pensar como paneles de mandos. Dirigen el flujo de control de la aplicaci�n y algunas veces pueden realizar l�gica de negocio de aplicaciones para peque�as aplicaciones donde la escalabilidad no es un gran problema.

    Aunque es una forma poco elegante pero r�pida, los datos de ejemplo tambi�n se configuran en la clase ShowListAction para poder tener algunos datos con los que trabajar. Idealmente pondr�amos los datos de ejemplo en un fichero separado fuera de la aplicaci�n Web para que no se desplieguen con la aplicaci�n. El relleno de datos de ejemplo podr�a tratar simplemente con una base de datos e insertar los datos en una tabla vac�a o casi vac�a para probar. Por simplicidad, hay un m�todo sucio y r�pido de relleno de datos en la propia clase ShowListAction.

  7. Copia mainLayout.jsp.v1 desde el archivo del c�digo de ejemplo y ponlo en src/Web como mainLayout.jsp. La p�gina mainLayout.jsp es la plantilla base para todas las dem�s p�ginas JSP de la aplicaci�n. En grandes aplicaciones, tener una plantilla base de la que descienden todas las dem�s ser� mucho m�s �til y promover� la consistencia y uniformidad entre todas las p�ginas de la aplicaci�n.
  8. Copia showList.jsp.v1 desde el archivo del c�digo de ejemplo y ponlo en src/Web como showList.jsp. El fichero showList.jsp es una vista particular para una operaci�n particular. Desciende de mainLayout.jsp. Muestra la lista de tel�fonos de contacto. Tambi�n contiene un formulario que permite al usuario seleccionar varios contactos para borrarlos. La raz�n de que la acci�n del formulario sea una URL parcial (/delete.do) en vez de una URL completa (http://localhost:8080/phonelist/delete.do) es porque Struts genera autom�ticamente la URL completa partiendo del path relativo (/delete.do). Sin embargo, esto es s�lo si utilizas la etiqueta <html:form> de Struts para definir el formulario.
  9. Copia ContactBean.java.v1 desde el archivo del c�digo de ejemplo y ponlo en src/WEB-INF/classes/com/abcinc/phonelist como ContactBean.java. La clase ContactBean es un simple JavaBean que contiene las propiedades de un contacto. Proporciona un m�todo conveniente para almacenar la informaci�n de un contacto y pasar dicha informaci�n entre las partes del c�digo como una sola entidad.
  10. Copia ContactDatabase.java.v1 desde el archivo del c�digo de ejemplo y ponlo en src/WEB-INF/classes/com/abcinc/phonelist como ContactDatabase.java. La clase ContactDatabase es un sencillo almacenamiento en-memoria para ejemplares de ContactBean. Se utiliza ContactDatabase.java en vez de una base de datos relacional para mantener el ejemplo lo m�s simple posible.
  11. Copia Sequence.java.v1 desde el archivo del c�digo de ejemplo y ponlo en src/WEB-INF/classes/com/abcinc/phonelist como Sequence.java. La clase Sequence es un simple contador secuencial que permite generar valores ID �nicos para los nuevos ejemplares de ContactBean.

Despu�s de todos estos cambios, los descriptores struts-config.xml y tiles-defs.xml deeber�an corresponderse con los struts-config.xml.v2 y tiles-defs.xml.v2 que hay en el archivo del c�digo de ejemplo.

.�Poner a Prueba tu Aplicaci�n

Ahora prueba la versi�n revisada del c�digo para ver si la aplicaci�n pasa el test. Realiza los siguientes pasos:

  1. Para Tomcat tecleando ./shutdown.sh en el directorio bin de la distribuci�n de Tomcat.
  2. Cambia al directorio de trabajo ~/projects/phonelist.
  3. Teclea ant undeploy.
  4. Teclea ant deploy.
  5. Arranca Tomcat tecleando ./startup.sh en el directorio bin de la distribuci�n de Tomcat.

Puedes probar la aplicaci�n en http://localhost:8080/phonelist/showList.do. La aplicaci�n deber�a mostrar una lista de contactos.

Vuelve al directorio ~/projects/phonelist y teclea ant test. Ahora se deber�a pasar el test showlist porque la URL que prueba contiene contenido y tiene cuatro o m�s filas en una tabla con el t�tulo Phone List.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO