Manual Básico de Struts

El Model comprende todos los Objetos de Negocio donde se implementa la l�gica de negocio (el "how it's done") y donde se debe soportar todos los requisitos funcionales del Sistema sin mezclarlo con partes correspondientes al workflow (el "what to do") que corresponden al Controller.

.�Action Bean

Generalmente, los Action Beans siempre realizan las siguientes acciones:

  1. Obtener los valores necesarios del Action Form, JavaBean, request, session o de donde sea.
  2. Llamar a los objetos de negocio del Model.
  3. Analizar los resultados, y seg�n los mismos retornar el ActionForward correspondiente.

Veamos entonces un ejemplo de Action Bean:

public final class LogonAction extends Action {
 public ActionForward perform(ActionMapping mapping, 
                              ActionForm form, 
                              HttpServletRequest request, 
                              HttpServletResponse response) 
         throws IOException, ServletException {

 // Obteniendo atributos

  Locale locale = getLocale(request);
  MessageResources messages = getResources();
  User user = null;

 // Validando los par�metros

  ActionErrors errors = new ActionErrors();
  String username = ((LogonForm) form).getUsername();
  String password = ((LogonForm) form).getPassword();
  try {
   DataSource dataSource = servlet.findDataSource(null);
   Connection myConnection = dataSource.getConnection();
  } catch (SQLException e) {
   errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.database.missing"));
   saveErrors(request, errors);
   return (new ActionForward(mapping.getInput()));
  }
  UserFactory userFactory = new UserFactory(database);
  user = userFactory.getUser(username, password);
  if (user == null) {
   errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.password.mismatch"));
   saveErrors(request, errors);
   return (new ActionForward(mapping.getInput()));
  }

  // Guardando el usuario en la sesion

  HttpSession session = request.getSession();
  session.setAttribute(Constants.USER_KEY, user);
  
  // Eliminando el form bean obsoleto

  if (mapping.getAttribute() != null) {
   if ("request".equals(mapping.getScope()))
    request.removeAttribute(mapping.getAttribute());
   else
    session.removeAttribute(mapping.getAttribute());
  }
  // Pasando el control a la siguiente p�gina
  return (mapping.findForward("success"));
 }
}

.�System State Beans

Los System State Beans son el conjunto de objetos de negocio que representan el estado actual del sistema, por ejemplo: el carrito de la compra que el usuario va modificando a lo largo de su interacci�n con la aplicaci�n. Estos objetos de negocio ser�n t�picamente JavaBeans o EJBs de los que se guardar� referencia en la sesi�n del usuario, que ser�n modificados desde los Action y que ser�n consultados desde las JSPs.

Esta clase de objetos no debiera tener ning�n conocimiento de la View.

.�BusinessLogic Beans

Los objetos de negocio son los que implementan la l�gica de negocio, el c�mo hacer las cosas y su propia persistencia. Estos objetos de negocio no debiera tener ning�n conocimiento de la View o el Controller de forma que debieran ser perfectamente reutilizables para implementar soporte a distintas interfaces y hasta para incluirse en nuevas aplicaciones.

.�Accediendo a BD

Con Struts se puede definir un datasource para una aplicaci�n desde el struts-config.xml (m�s informaci�n en la secci�n "The Action Mappings Configuration File" del "Struts User Manual"). Este datasource nos permite obtener una connection desde un Action y desde all� utilizarlo o pasarlo al Model. Muy pr�ctico.

Este es un ejemplo de acceso a una conexi�n desde un Action:

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

 javax.sql.DataSource dataSource;
 java.sql.Connection myConnection;
 ...
 try {
   dataSource = servlet.findDataSource(null);
   myConnection = dataSource.getConnection();
   ...
 } catch (SQLException sqle) {
   getServlet().log("Connection.process", sqle);
 } finally {
   ...
   try {
     myConnection.close();
   } catch (SQLException e) {
     getServlet().log("Connection.close", e);
   }
 }
}

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP