Index - JSP: Estructura de Un Proyecto Holamundo

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 11

http://localhost:7001/holamundo/Welcome.

do

Estructura de un proyecto holamundo
---------------------------------- index.jsp ---------------------------------
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<logic:redirect forward="welcome"/> //me direcciona a welcome

--------------------------------- welcome.jsp ---------------------------------

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>

<html:html>
<head>
<title><bean:message key="welcome.title"/></title>
<html:base/>
</head>
<body bgcolor="white">

<h3><bean:message key="welcome.heading"/></h3>
<p><bean:message key="welcome.message"/></p>

</body>
</html:html>

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

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<display-name>holamundo</display-name>

<!-- Standard Action Servlet Configuration -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

<!-- The Usual Welcome File List -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

</web-app>
------------------------------ struts-config.xml ----------------------------
<?xml version="1.0" encoding="ISO-8859-1" ?>

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

<struts-config>

<!-- ======================== Global Forward Definitions -->

<global-forwards>
<forward
name="welcome"
path="/Welcome.do"/>
</global-forwards>

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

<action-mappings>
<action
path="/Welcome"
forward="/pages/Welcome.jsp"/>

</action-mappings>

<!-- ====================== Message Resources Definitions -->

<message-resources parameter="abc" />

<!-- ====================== Validator plugin -->

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/org/apache/struts/validator/validator-rules.xml,
/WEB-INF/validation.xml"/>
</plug-in>


</struts-config>

------------------------------ abc.properties ----------------------------

welcome.title=Hola Mundo
welcome.heading=Bienvenido!!
welcome.message=bla bla bla


Nota:
Se declaran dentro de Struts-config.xml

<!-- =============== Message Resources Definitions -->

<message-resources parameter="abc" />

welcome.jsp
Vamos a centrarnos solamente en porque sale el mensaje en castellano, decir a modo de
comentario que struts tiene sus propios tags html van precedidios de html: se pueden ver varios
casos como y despus otras etiquetas.

Vemos que la etiqueta bean:message tiene un atributo key con un valor welcome.title para el
caso del ttulo, lo mismo va a suceder con el encabezado y con mensaje. Lo que hace esta etiqueta
es obtener el valor del fichero de configuracin recin creado.

abc.properties
El formato de este fichero de propiedades es clave=valor

Si nos fijamos en navegador y vemos la url del proyecto arrancado en local, observamos que
termina en Welcome.do, nos est indicando que struts est realizando la accin Welcome.

La accin Welcome.do esta mapeada en la seccin action mapping mediante el nombre de path
igual que la accion pero sin .do path=/Welcome y se reenva a la pgina jsp que viene con el
proyecto struts /pages/Welcome.jsp dentro del directorio pblico WebContent.

FORMULARIO LOGIN STRUTS ECLIPSE
Para hacer este tutorial vamos a partir del proyecto web Holamundo realizado anteriormente.

En este ejemplo se ven con eclipse la utilizacin de los Action y los ActionForm as como la
configuracin del strutsconfing, utilizacin y carga de imgenes y utilizacin de archivos css en
proyectos struts.

No hay conexin para base de datos se deja para otros post y no se utiliza el DynaActionForm que
los veremos en otros post.

Se presenta el interfaz grfico de la
aplicacin para un mejor
entendimiento, tenemos un formulario
de registro que toma el nombre el
apellido y otros dos campos clave y
confirmacin de clave, todos estos
campos deben ser rellenados por el
usuario y se comprueba que la clave y
su confirmacin son iguales. El usuario
tiene la posibilidad de cancelar el
registro y volver a la pgina de registro
desde la de cancelacin.


Ventana de registro

Creacin de la pgina login.jsp con eclipse las dems pginas se realizarn de la misma forma
(cambiamos el nombre de la pgina).

Cdigo correspondiente al fichero login.jsp es el cdigo asociado a la ventana de registro

Una de las caractersticas de struts es que tiene su propios tags para html, vienen siempre con la
palabra html: y despus el nombre de la etiqueta en cuestin.

Para la categora de j2ee de este sitio web ya hicieron ejemplos de integracin de css con j2ee,
comento esto porque hay una diferencia importante con struts. Para mucha gente que viene de
otros lenguajes o de hacer jsp estaran acostumbrados a colocar el archivo css en un determinado
directorio y enlazarlo mediante la etiquela link. Bien para que las css o las imgenes las podamos
incluir en un proyecto struts es necesario incluir en el head de la pgina jsp de struts la etiqueta.

Si nos fijamos en las jsp vemos que aparecen en todas ellas, lo que hace esta etiqueta es
establecer el punto de referencia de la pgina con respecto al resto al resto de recursos del
proyecto.

Ejemplo, si yo soy la pgina login.jsp y me dicen que hay una css en ../css/estilo.css entonces se
que tengo que buscar en mi directorio padre y bajar al directorio css y alli encuentro estilo.css. Si
no tengo la referencia base no puedo encontrar los recursos css ni de imagen.

Adems en la cabecera de la jsp debemos de incluir el
<%@taglib uri="http://struts.apache.org/tagshtml" prefix="html" %>

Se crean dos carpetas nuevas al proyecto llamadas imagenes y css (cada uno las puede llamar
como quiera mientras mantenga la correspondencia con otras partes del proyecto)

EL FICHERO CSS ESTILO.CSS ES EL QUE SE VA A UTILIZAR PARA LA MAQUETACIN DEL EJEMPLO


















---------------------------------- login.jsp----------------------------------
<%@ page language="java" contentType="text/html; charset=UTF8"
pageEncoding="UTF8"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta httpequiv="ContentType" content="text/html; charset=UTF8">
<title><bean:message key="titulo.login" /></title>
<html:base />
<link rel="stylesheet" type="text/css" href="../css/estilo.css" />
</head>
<body>
<div id="contenedor">
<h2>
<bean:message key="titulo.login" />
</h2>
<div id="errores">
<html:errors />
</div>
<div id="imagen">
<html:img srcKey="login.imagen" titleKey="login.imagen.alt" />
</div>
<div id="contenido">
<html:form action="loginAction" focus="nombre" styleId="formulario"
method="post">
<div class="campo">
<bean:message key="login.nombre" />
<html:text property="nombre" />
</div>
<div class="campo">
<bean:message key="login.apellidos" />
<html:text property="apellidos" />
</div>
<div class="campo">
<bean:message key="login.clave" />
<html:password property="clave" maxlength="8" size="8" />
</div>
<div class="campo">
<bean:message key="login.claveConfirmacion" />
<html:password property="claveConfirmacion"
maxlength="8" size="8" />
</div>
<html:submit styleClass="boton" value="enviar" />
<html:cancel styleClass="boton" value="cancelar" />
</html:form>
</div>
<div id="pie">
<p>www.railsymas.com</p>
</div>
</div>
</body>
</html>
--------------------------------- estilos.css --------------------------------------
@CHARSET "ISO-8859-1";

#contenedor {
width: 600px;
margin-left: auto;
margin-right: auto;
}

.campo {
margin-top: 10px;
}

#imagen {
float: right;
}

.boton {
margin: 10px 5px;
background-color: #554444;
color: #fff;
width: 100px;
}

#formulario {
margin-top: 60px;
font-size: 16px;
}

#errores {
background-color: #e6dfd5;
color: #424c56;
}

#errores ul li {
list-style-image: url("../imagenes/flechaderecha.png");
}

#errores ul {
border-color: #f00;
}

h2 {
text-align: center;
}

#pie {
clear: both;
height: 30px;
background-color: #424c56;
}

#pie p {
text-align: right;
font-size: 14px;
background-color: #e6dfd5;
}
---------------------------------------------------abc.properties ------------------------------------------
#claves para login
titulo.login=Registro usuario
login.nombre = nombre
login.apellidos = apellidos
login.claveConfirmacion=confirmacin de password
login.clave=password
login.imagen.alt= icono usuario
login.imagen = ../imagenes/usuario.png;

#claves de error
error.login.nombre = falta el campo nombre
error.login.apellidos = falta el campo apellidos
error.login.clave = falta el campo clave
error.login.claveConfirmacion = falta el campo claveconfirmacion
error.login2 = repite la clave

#claves para satisfactoria
satisfactoria.titulo = Resgistro correcto
satisfactoria.imagen = ../imagenes/correcto.png
satisfactoria.imagen.alt = imagen correcto
satisfactoria.mensaje = Te has registrado correctamente

#claves para cancelada
cancelada.titulo = Registro cancelado
cancelada.mensaje = No te has registrado en el sistema
cancelada.imagen.alt = imagen cancelado
cancelada.imagen = ../imagenes/cancelado.png
cancelada.login = Cancelacin

#claves para welcome
welcome.title=Holamundo Struts
welcome.heading=Bienvenida!
welcome.message=Holamundo Struts

----------------------------------- src/formularios/formularioForm.class ----------------------------------------
package formularios;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMessage;
import javax.servlet.http.HttpServletRequest;

public class formularioForm extends ActionForm {

private static final long serialVersionUID = 1L;

private String nombre;
private String apellidos;
private String clave;
private String claveConfirmacion;
public String getNombre() {
return nombre; }

public void setNombre(String nombre) {
this.nombre = nombre; }

public String getApellidos() {
return apellidos; }

public void setApellidos(String apellidos) {
this.apellidos = apellidos; }

public String getClave() {
return clave; }

public void setClave(String clave) {
this.clave = clave; }

public String getClaveConfirmacion() {
return claveConfirmacion; }

public void setClaveConfirmacion(String claveConfirmacion) {
this.claveConfirmacion = claveConfirmacion; }

// mtodo que permite la validacin de los campos del formulario
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
// creamos un nuevo objeto ActionErrors
ActionErrors errores = new ActionErrors();
if (nombre == null || nombre.length() == 0) {
errores.add("nombre", new ActionMessage("error.login.nombre"));
}
if (apellidos == null || apellidos.length() == 0) {
errores.add("apellidos", new
ActionMessage("error.login.apellidos"));
}
if (clave == null || clave.length() == 0) {
errores.add("clave", new ActionMessage("error.login.clave"));
}
if (claveConfirmacion == null || claveConfirmacion.length() == 0) {
errores.add("claveConfirmacion", new ActionMessage(
"error.login.claveConfirmacion"));
}
if (!clave.equals(claveConfirmacion)) {
errores.add("confirmacion", new ActionMessage("error.login2"));
}
return errores;
}

// mtodo para resetear los campos del formulario
public void reset() {
this.nombre = null;
this.apellidos = null;
this.claveConfirmacion = null;
this.clave = null;
}

}
------------- CDIGO JAVA DE LA CLASE ACTION LA LLAMAMOS ACCIONLOGIN ---------------
package acciones;

import org.apache.struts.action.Action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import formularios.*;

public class AccionLogin extends Action {

// creacin del mtodo execute
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// si el usuario pulsa el botn de cancelado
if (this.isCancelled(request)) {
// como tenemos en el mtodo execute el objeto ActionMapging podemos
// mandar a un reenvio del struts-config
return mapping.findForward("cancelada");
} else {
// creamos un objeto formularioForm
formularioForm formularioform = (formularioForm) form;
return mapping.findForward("satisfactoria");
}
}

}



Si intentamos ejecutar una clase Action sin
su correspondiente ActionForm nos da el
siguiente error al ejecutar el proyeto (sale
mucho ms por pantalla pero son las dos
lneas claves)

javax.servlet.ServletException: Form bean not
specified on mapping for action: "loginAction"

org.apache.jasper.JasperException: Exception in
JSP: /pages/login.jsp







Ventana de errores campos vacos

Error de clave (no son iguales)


En la segunda parte de este ejemplo formulario login struts 2 parte eclipse

Se ven las pginas cancelada.jsp y satisfactoria.jsp as como la cofiguracin del strutsconfig.xml y
explicaciones correspondientes.

Agradecimientos por las imgenes utilizadas a va:
www.webintenta.com
http://www.smashingmagazine.com/2008/08/27/onstageafreeiconset/
http://nick7even.deviantart.com/gallery/















Ventana de cancelacin

You might also like