José Urzúa Reinoso
    Memoria

Next: Funcionamiento del Sistema Up: Implementación Previous: Metodología   Índice de Contenidos

Archivos Útiles

En general, los archivos mas útiles e importantes del sistema son los que manejan e implementan las acciones y los mapeos. En primer lugar, un mapeo mal definido provocará que las acciones y los datos no se comuniquen, aunque estén bien validados los datos y bien implementadas las acciones. El archivo struts-config.xml, define toda la comunicación del sistema, especificando las entradas, salidas, acciones y validaciones que se deben realizar en cada proceso definido en él.

Los archivos que implementan los servlets, ejecutan el núcleo de la acción. Son los que se comunican con las bases de datos, seleccionando, insertando y actualizando datos. Además, son los que retornan la respuesta necesaria para saber que acción sigue con el control del requerimiento. En general, son acciones distintas para casos de error o de éxito.

La estructura típica de un archivo de configuración del sistema, (típicamente llamado: struts-config.xml) es de la forma:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">

<struts-config>

  <!-- ========== Form Bean Definitions =================================== -->
  <form-beans>
    <form-bean      name=""
                    type=""/>
  </form-beans>


  <!-- ========== Global Forward Definitions ============================== -->
  <global-forwards>
    <forward   name=""            path=""/>
  </global-forwards>

  <!-- ========== Action Mapping Definitions ============================== -->
  <action-mappings>

    <action    path=""
               type=""
               name=""
              scope=""
              input="">
      <forward name=""     path=""/>
    </action>

  </action-mappings>

</struts-config>

Este archivo define 3 configuraciones por separado, la de los form-beans, en la cual se dice que un nombre dado como parámetro de la opción 'name', tendrá la validación del archivo dado en el campo 'type'.

Para el caso de los global-forwards, se define un nombre, por medio del parámetro 'name', asociado a un archivo JSP (típicamente), definido en el parámetro 'path'. De esta forma, se obtiene un nombre que puede ser referenciado desde cualquier JSP y hará la correspondiente referencia al archivo definido en el global-forwards.

Finalmente, se definen los action-mappings, que posee los parámetros que define el nombre de la acción con el parámetro 'path', el servlet que ejecutará las acciones correspondientes con el parámetro 'type', el nombre del FormBean que validará los datos con el parámetro 'name' (el que se definió dentro de los tags form-beans), el alcance que tendrán esos datos con el parámetro 'scope', desde donde será referenciada la acción con el parámetro 'input' y quien desplegará los datos para cada ActionForward definidos en el servlet con el tag 'forward'.

La estructura típica de un archivo que implementa un servlet de este sistema es la siguiente:

public final class NombreDelServletAction extends org.apache.struts.action.Action {

    public ActionForward perform(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response)
        throws IOException, ServletException {

        //Obtención de la internacionalizacion de la clase
        //(pais e idioma)
        Locale locale = getLocale(request);          

        ActionErrors errors = new ActionErrors();

        //recuperación de la sesión
        HttpSession session = request.getSession();

        
        //configuración del usuario que esta conectado
        UserContext uctx =
            (UserContext)session.getAttribute("UserContext");

        //si no se obtiene se reenvía a la pantalla de ingreso 
        if (uctx == null)
            return (mapping.findForward("logon"));

        try {
            //se comienza con la interaccion con la base de datos para
            //realizar lo que el servlet debe hacer

            uctx.resetConnection();

            //herramienta que presta la utilidad de los mensajes para varios
            //idiomas

            ResourceBundle config = uctx.getConfig();


            //luego de que realizó todas las tareas, sin que ocurriese
            //una exepción se retorna un mensaje de que todo funcionó OK
            return (mapping.findForward("success"));

        //captura y procesamiento de las exepciones
        } catch (Exception e) {
            errors.add(ActionErrors.GLOBAL_ERROR,
                       new ActionError("error.db.connection"));
            try {
                //mensaje de error que se almacena en el contexto del usuario
                //en una tabla de la base de datos.
                uctx.error("PorEnviarFacturasAction: error: "+e);
            } catch (Exception e2) {
                servlet.log("PorEnviarFacturasAction: error: "+e2);
            }
            saveErrors(request, errors);
            return (new ActionForward(mapping.getInput()));
        }
    }

Tal como en el código se comenta, este archivo en su forma más genérica debe comenzar obteniendo las configuraciones de la sesión. En primer lugar, obtiene el tipo de internacionalización que se está usando por medio de la clase Locale. Luego, se recupera la sesión que trae asociada el requerimiento, para de ella obtener el 'contexto' en el que está inmerso el usuario, si no se obtiene se reenvía el requerimiento a la pantalla de ingreso del sistema (la sesión podría haber expirado). Luego se obtiene la herramienta que se utiliza para obtener los mensajes del idioma adecuado, que en el sistema implementado, también se usa para obtener las sentencias que se usarán para interactuar con la base de datos.

Una vez que se tiene el ResourceBundle, se puede comenzar con la interacción con la base de datos y ejecutar todas las acciones que debe cumplir este servlet, para el correcto funcionamiento del sistema. Si todo funciona correctamente se retornará la respuesta adecuada para que tome el control la siguiente acción definida en el struts-config.xml. Si ocurre algún problema, la 'excepcion' capturada generará un mensaje de error adecuado, ya sea dentro de la sesión, dentro del contexto del usuario o en el log del servlet.

En la sección  8.5.2 del anexo de esta memoria, se muestra y explica de manera más extensa los archivos que definen los mapeos y los que implementan los servlets, entregando ejemplos con los valores que se usaron en el sistema implementado.


Next: Funcionamiento del Sistema Up: Implementación Previous: Metodología   Índice de Contenidos
2003-01-14
 


Estudios
Curriculum
Tesis Magister
Paper
Memoria
DTEs
CADCC 2002

Personal
Blog
Rugby
Xblast!
Parcela 31
Contacto


Inicio
Valid HTML 4.01! View Jose Urzua's profile on LinkedIn