Mostrando entradas con la etiqueta ajax. Mostrar todas las entradas
Mostrando entradas con la etiqueta ajax. Mostrar todas las entradas

J2EE: Struts2 + log4j + AJAX (III)




Hola a todos,

Como les contaba en los Post anteriores (post 1, post 2), la nueva versión de Struts (Struts2) es muy diferente a su predecesor.

[si es primera vez que ves este post te recomiendo visitar los post anteriores]





Es por esto que voy a explicar en más detalles cómo funciona y configura este framework.
Para ésto me basaré en el proyecto Struts2 publicado en el Grupo de Google (archivo: MVCStruts2.rar).

Lo primero que se debe hacer es editar el descriptor de despliegue (archivo web.xml) para añadir el filtro que permite que Struts2 pueda ejecutarse en nuestro proyecto.
Nuestro web.xml debiese quedar así:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

<display-name>MVCStruts2</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>


<filter>  
<filter-name>struts</filter-name>  
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
</filter>  

<filter-mapping>  
<filter-name>struts</filter-name>  
<url-pattern>/*</url-pattern> 
</filter-mapping>

</web-app>


De esta manera el servidor web (Tomcat en éste caso) sabrá que cualquier petición realizada debe pasar por el filtro FilterDispatcher, el cual es el Controlador de nuesta aplicación Web.

Struts2 nos permite crear un archivo xml de configuración, en el cual podemos especificar qué debe hacer nuestro Controlador según la petición recibida por parte del cliente. Este archivo se llama struts.xml y debe crearse en package por defecto del proyecto Web Resources:src.
El archivo del proyecto podemos escribirlo de la siguiente manera:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">    

<struts>
<include file="login-config.xml" />
</struts>


Como se puede apreciar prácticamente no hay nada de contenido en archivo, esto es porque se está utilizando un tag xml llamado include, el cual permite importar el contenido de otros archivos de configuración xml struts2. De esta forma evitamos que a medida que nuestra aplicación crezca, lo haga al mismo ritmo nuestro archivo struts.xml. Ahora veamos el contenido del archivo login-config.xml (el cual contiene las acciones de login de nuestra aplicación).
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">    

<struts>
<package name="accesopackage" extends="struts-default">
<action name="login" method="validarUsuario" class="cl.struts2.login.action.LoginAction">  
<result name="success">/WEB-INF/home/home.jsp</result>
<result name="error">/WEB-INF/index.jsp</result>
</action>

<action name="logout" method="cerrarSessionUsuario" class="cl.struts2.login.action.LoginAction">
<result name="success">/WEB-INF/index.jsp</result>
</action>
</package>
</struts>


Este archivo lo único que nos dice es que se ejecute la clase 'cl.struts2.login.action.LoginAction' y el método 'validarUsuario()' cuando llegue la acción 'login', y la misma clase pero el método 'cerrarSessionUsuario()' cuando llegue la acción 'logout'.
En la acción 'login', si la ejecución del método es correcta se retornará la acción SUCCES, la cual nos llevará a la página '/WEB-INF/home/home.jsp', en caso contrario o ante un ERROR nos llevará a la página de inicio '/WEB-INF/index.jsp'.

Ahora podemos crear nuestra página index.jsp la cual hará de login de usuario y llamará a la acción 'login'.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Ingresar al sistema</title>
<link rel="stylesheet" href="estilos/estilos.css" type="text/css" />
<script type="text/javascript" language="javascript">
function validar(){
var user = document.form.username.value;
var pass = document.form.password.value;
if( user!=null && pass!=null ){
document.form.submit();
}
else{
alert("Ingrese usuario y contraseña");
}
}
</script>

</head>
<body>
<form method="post" name="form" action="login">
<table class="tabla">
<tr>
<td align="center" colspan="2" class="franja-titulo">
Ingresar al Sistema
</td>
</tr>
<tr>
<td class="texto">
Usuario: 
</td>
<td>
<input type="text" name="username" id="username" class="campo-texto">
</td>
</tr>
<tr>
<td class="texto">
Contraseña: 
</td>
<td>
<input type="password" name="password" id="password" class="campo-texto">
</td>
</tr>
<tr>
<td align="center" colspan="2" class="texto-tabla">
<%
if( request.getAttribute("error")!=null ){
%>
Error al validar los datos
<%
}
%>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="button" value="Aceptar" onclick="validar();">
</td>
</tr>
</table>
</form>
</body>
</html>


Como se puede ver en la imagen, el formulario web de index.jsp redireccionará a la acción 'login'.
Por lo tanto ahora veamos el código de nuestra clase 'cl.struts2.login.action.LoginAction'.
public class LoginAction extends ActionSupport implements ServletRequestAware,ServletResponseAware{

private static final long serialVersionUID = 1L;

private Logger logger = Logger.getLogger( LoginAction.class );

private HttpServletRequest request;
private HttpServletResponse response;


public String validarUsuario(){
if( SessionUtil.existeSession(request, SessionUtil.SESSION_USUARIO) ){
logger.debug("[validarUsuario] usuario ya validado");
return SUCCESS;
}

String username = request.getParameter("username");
String password = request.getParameter("password");

logger.debug("[validarUsuario] se reciben parametros: {usuario = " +username+ ", password = " + password +"}");

Usuario usuario = null;

if( username!=null && password!=null ){
logger.debug("[validarUsuario] se valida usuario");
Usuario usu = new Usuario();
usu.setUsername( username );
usu.setPassword( password );

ServicioUsuarios servicio = new ServicioUsuarios();
usuario = servicio.obtenerUsuario(usu);
}

if( usuario!=null ){
logger.debug("[validarUsuario] validacion correcta");
SessionUtil.crearSession(request, SessionUtil.SESSION_USUARIO, usuario, 15);
return SUCCESS;
}

SessionUtil.cerrarSession(request);
request.setAttribute("error","1");
logger.debug("[validarUsuario] error al validar usuario");
return ERROR;
}



public String cerrarSessionUsuario(){
logger.debug("[cerrarSessionUsuario] Cerrar session de usuario");
SessionUtil.cerrarSession(request);
return SUCCESS;
}


public HttpServletRequest getServletRequest() {
return this.request;
}

public HttpServletResponse getServletResponse() {
return this.response;
}

public void setServletResponse(HttpServletResponse response) {
this.response = response;
}


public void setServletRequest(HttpServletRequest request) {
this.request = request;
}

}


En el código se puede ver la clase LoginAction y su método validarUsuario(), el cual se ejecutará con la acción 'login'. No voy a explicar en detalle el contenido de este método (ya que con el material publicado anteriormente no debiese haber problemas para entender ésto ;)), pero se entiende que de alguna manera valida el usuario y password del usuario. Si la validación es correcta retornará la acción SUCCES, en caso contrario ERROR (si tienes dudas con ésto vuelve a ver la foto del archivo login-config.xml).

Más adelante se detallará cómo funcionan los interceptores y cómo se ejecutan las llamadas AJAX.

Atento a sus dudas o consultas.
Saludos.-


ver post completo...

J2EE: Strus2 + log4j + AJAX (II)




En el post anterior se mostró los distintos frameworks utilizados para desarrollar un proyecto Web Java, el cual puede ser descargado desde el Grupo de Google (archivo: MVCStruts2.rar).





A continuación explicaré la arquitectura del proyecto y cual es la función de cada un de los componentes de éste.
En esta imagen podemos ver el diseño arquitectónico del sistema.

Esta imagen muestra cómo es la división arquitectónica de la aplicación, muestra claramente cómo se aplica el patrón MVC. Además da a conocer el flujo y la forma en que se comunican los distintos componentes que participan en el sistema.

A continuación se definirán los distintos tipos de clases que constituyen el sistema:

HTML y JSP: Básicamente son las páginas Web que muestran gráficamente el sistema al usuario. Los usuarios al ejecutar funciones sobre las páginas Web (capa vista) generan eventos, los cuales son capturados por el Controlador.

Controlador: Es el intermediario entre la capa Vista y la capa Modelo, obtiene los eventos realizados por el usuario en la capa Vista y ejecuta la acción (ActionClases) correspondiente en el Modelo, la cual responderá a la solicitud realizada por el cliente. El controlador está constituido por los archivos de configuración XML (struts.xml) que son interpretados por el framwork Struts2.

InterceptorClases: Son clases que heredan de la interfaz Interceptor que proporciona el framework Struts2. Su función es interceptar las invocaciones que realiza la capa vista sobre el controlador para invocar a las ActionClases (y viceversa), durante ésta interrupción éstas clases pueden realizar validaciones (ejemplo: validar sesión de usuario), etc. y si ésta es correcta el flujo o acción se realiza normalmente.

ActionClases: Heredan de la clase ActionSupport proporcionada por el framework Struts2. Su función (en éste proyecto) es validar la integridad de los datos recibidos e invocar a los diversos Servicios los cuáles le proveerán de la información necesaria para retornar la respuesta requerida por la capa Vista.

Servicios: Son clases de negocio, las cuáles pueden obtener datos a través de la invocación a diversas ClasesDAO, procesarlos y devolver la información solicitada por la capa Web.

ClasesDAO: Estas clases acceden "directamente" a diversos orígenes de datos (Bases de datos, archivos de texto).

ClasesTO: Estas clases proporcionan objetos de transferencia, los cuales "viajaran" a través de la aplicación. Por ejemplo: una clase DAO consultará un origen de datos, y retornará un lista de objetos TO.

ClasesUtil: Son clases utilitarias que proporcionarán funciones que podrán ser utilizadas por todos los componentes del sistema.


ver post completo...



Hola a todos,

Hace unos días me interesé en aprender cómo utilizar Struts2, la nueva versión del
framework de desarrollo web de Java Apache Struts. Me impresionó lo distinta que es ésta con respecto a su predecesor, investigando descubrí que para desarrollarla no se basaron
en Struts 1.x, sino que en otro framework llamado WebWork.




El framework Struts 2 está basado en el patrón MVC. Struts2 puede ser descargado desde éste link AQUÍ.

Por otro lado tenemos log4j, también desarrollado por la fundación Apache. Este framework permite definir la salida de los mensajes de la aplicación en tiempo de ejecución (muy util e implementado en varios lenguajes y organizaciones). Este puede ser descargado desde éste link AQUí .

Por último el proyecto utiliza AJAX, para "facilitar" su implementación y abstraerse del manejo de estado de las llamadas AJAX y de la compatibilidad con Navegadores, es que se utilizó el framework PrototypeJs.

Soy precursor de que se debe aprender haciendo.
Es por eso que he subido al Grupo de Google (archivo: MVCStruts2.rar) un proyecto Web Java hecho sobre el IDE Eclipse con un ejemplo práctico utilizando todas las herramientas nombradas anteriormente. De ésta forma todos podrán tener una base de conocimiento para comenzar cualquier proyecto.

Este proyecto Web corre sobre Tomcat 6.x y como dice el título del post, utiliza log4j, ajax (framework prototypejs) y Struts2.

Cualquier duda o consulta pueden darla a conocer acá mismo, en todo caso más adelante publicaré más información y detalles sobre cómo funcionan las tecnologías mencionadas.

Ah! acá les dejo fotos de cómo se ven las páginas del proyecto.










Para ambientar el proyecto procura tener instalada la máquina virtual de java (JDK), Eclipse IDE y Tomcat 6.x.

Cuando corras el proyecto en tu equipo recuerda editar las variables de entorno que
se definen dentro del archivo web.xml.

El usuario de prueba de la aplicación es: user = egacl; pass = sorete.
Esta información la puedes editar (o agregar más usuarios)
en el archivo usuarios.txt, el cual encontrarás dentro del proyecto.

En ESTE LINK encontrarás el proyecto [nombre archivo = MVCStruts2.rar].

Cualquier duda o consulta la puedes postear aquí.


ver post completo...

top