Uno de los Frameworks más maduros y robustos del medio sin duda es Struts, basado en el patrón MVC (Módelo, Vista, Controlador) es uno de los Frameworks más usados en el mundo de Java.
Aquí un tutorial básico en donde validaremos a un usuario.
Pueden descargar el ejemplo: Proyecto Struts 6.5
Ir a Archivo>Proyecto Nuevo y seleccionar una nueva aplicación Web.
Asignar un nombre al proyecto, luego siguiente.
Asigne un servidor de aplicaciones, en este caso he optado por Apache Tomcat, aunque pueden usar Glasfish que viene instalado con el NetBeans.
Marcar el Framework de Struts y luego terminar.
En Source Packages crear los siguientes paquetes: Controller y Model, no creamos el paquete View ya que son representadas por “Web Pages” en donde tenemos nuestras páginas web.
Bien, ahora agregaremos una página JSP de nombre: “Login”
Agregar los siguientes librerias de Struts en Login.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %> <h1>Inicio Sesión</h1>
En el paquete Model crearemos una clase llamada Users donde tendremos las entidades del negocio.
package Model;
public class Users {
private String nombre;
private String clave;
public Users() {
}
public String getClave() {
return clave;
}
public void setClave(String clave) {
this.clave = clave;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
Para crear las entidades de una manera más rápida
Defina las siguientes variables, seleccionalas, haga click derecho, Reestructurar>Encapsular Campos
private String nombre; private String clave;
En el paquete Controller hacemos click derecho >nuevo> otros> y en la categoría Struts elegir el archivo Struts ActionForm Bean y creamos la clase llamada LoginActionFormBean.java
Escribir el siguiente código en la clase LoginActionFormBean.java, esta clase se encargá de manejar las validaciones que son enviadas desde el formulario. Por ejemplo se encargá de manejar si algún campo está vacío, o si cumple cierto número de carácteres.
package Controller;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
/**
*
* @author Richard
*/
public class LoginActionFormBean extends org.apache.struts.action.ActionForm {
private String usuario;
private String pwd;
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
/**
*
*/
public LoginActionFormBean() {
super();
// TODO Auto-generated constructor stub
}
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)
{
ActionErrors errors = new ActionErrors();
if(usuario.length()<1 ||usuario==null)
errors.add("usu", new ActionMessage("errors.usuario"));
else
{
if(pwd.length()<=0)
errors.add("pwd", new ActionMessage("errors.clave"));
}
mapping.getInputForward();
return errors;
}
}
Si se produce algún error se mostrarán mensajes que son prestablecidos en el archivo ApplicationResource.properties del paquete com.myapp.struts, este archivo se creó automaticamente al crear la aplicación Web.
La modificaremos con el siguiente código:
# -- standard errors --
errors.header=<UL>
errors.prefix=<LI>
errors.suffix=</LI>
errors.footer=</UL>
# -- validator --
errors.usuario=Debe ingresar el Nombre del Usuario
errors.clave=Debe Ingresar la clave del Usuario
errors.impedir=Usuario inexistente
# -- other --
errors.cancel=Operation cancelled.
errors.detail={0}
errors.general=The process did not complete. Details should follow.
errors.token=Request could not be completed. Operation is not in sequence.
# -- welcome --
welcome.title=Struts Application
welcome.heading=Struts Applications in Netbeans!
welcome.message=It's easy to create Struts applications with NetBeans.
Ahora nuevamente agregar un archivo Struts en el paquete Controller, sólo que ahora del tipo Struts Action, le pondremos de nombre LoginAction.
Escribir en Action Path: “/Login” que será una especie de url, luego hacer clic en siguiente.
En la siguiente pantalla presione Browse y elija nuestra página Login.jsp.
Esta clase se encargá de comunicarse con la lógica del negocio que se encuentra en el paquete Modelo y comprobar por ejemplo si el archivo existe en una base de datos, si no es así mostrará en pantalla mensajes, que como sabemos están preestablecidos en nuestro archivo properties.
Añadir el siguiente código a la clase LoginAction:
package Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMessage;
/**import org.apache.struts.action.ActionMessage;
*
* @author richard
*/
public class LoginAction extends org.apache.struts.action.Action {
private Controller.LoginActionFormBean formulario;
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//Obtengo el Formulario
formulario=(Controller.LoginActionFormBean) form;
Model.Users us=new Model.Users();
us.setNombre(formulario.getUsuario());
us.setClave(formulario.getPwd());
ActionForward retorno=new ActionForward();
if(us.getNombre().equals("risharp")&& us.getClave().equals("123456"))
retorno=mapping.findForward("welcome");
else
{
ActionErrors errors = new ActionErrors();
errors.add("no_existe", new ActionMessage("errors.impedir"));
saveErrors(request, errors);
retorno=mapping.getInputForward();
}
return retorno;
}
}
Ahora revisar el archivo “struts-config” ubicado en WEB-INF
Vemos que se han creado las siguientes líneas de código:
<form-beans> <form-bean name="Login" type="Controller.LoginActionFormBean"/> </form-beans>
<action-mappings> <action input="/Login.jsp" name="Login" path="/Login" scope="session" type="Controller.LoginAction"/> <action path="/Welcome" forward="/welcomeStruts.jsp"/> </action-mappings>
Por último agregamos el siguiente código en Login.jsp:
<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %> <!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=UTF-8"> <title>www.datanoia.com</title> </head> <body> <html:form action="Login"> Usuario:<html:text property="user"></html:text><br /> <html:errors property="UserError"/><br/> Clave:<html:text property="password"></html:text><br /> <html:errors property="PasswordError"/><br/> <html:errors property="no_existe"/><br /> <html:submit value="Confirmar"></html:submit> </html:form> </body> </html>
Observemos que nuestro formulario está invocando a “Login”
<html:form action="Login">
Definido en:
<form-beans> <form-bean name="Login" type="Controller.LoginActionFormBean"/> </form-beans>
Luego probamos corremos nuestra página Login.jsp
No related posts.








