Download 8CM1 Practica 7: Aplicación minima usando el framework Struts

Document related concepts
no text concepts found
Transcript
INSTITUTO POLITECNICO
NACIONAL
Escuela Superior de Computó
Desarrollo de aplicaciones para la web II
Maestro: Cifuentes Álvarez Alejandro Sigfrido.
Alumno: Ruiz Hernández Alfredo
Grupo: 8CM1
Practica 7: Aplicación minima usando el
framework Struts
Abril de 2012
Introducción.
Cuando se inventaron los Servlets Java, muchos programadores se dieron cuenta de que eran más
rápidos y más potentes que el CGI estándar, portables, y extensibles infinitamente. Pero escribir
infinitas sentencias println() para enviar HTML al navegador era problemático. La respuesta fueron
las JavaServer Pages, que nos dejaron escribir servlets dentro de ellas. Ahora los desarrolladores
podían mezclar fácilmente HTML con código Java, y tener todas las ventajas de los servlets. Las
aplicaciones web Java se convirtieron rápidamente en "centradas-en-JSP". Esto, por sí sólo no era
malo, pero no hacía nada por resolver problemas de control de flujo y otros problemas propios de
las aplicaciones Web. Claramente se necesitaba otro modelo. Algunos desarrolladores se dieron
cuenta que las JavaServer Pages y los servlets se podrían usar juntos para desplegar aplicaciones
web. Los servlets podrían ayudar con el control de flujo, y las JPS’s podrían enfocarse en escribir
HTML. Usar JSP y servlets juntos se ha dado a conocer como el Modelo 2 (cuando usar sólo JSP’s
era el Modelo 1).El proyecto Struts lo lanzó en Mayo del 2000, Craig R. McClanahan para
proporcionar un framework MVC estándar a la comunidad Java.
¿Qué es Struts?
“Es un framework de la capa de presentación que implementa el patrón de patrón MVC (modelovista Controlador) en Java”
Evidentemente, como todo framework intenta simplificar notablemente la implementación de una
arquitectura según el patrón MVC. El mismo separa muy bien lo que es la gestión del workflow de
la aplicación, del modelo de objetos de negocio y de la generación de interfaz
Objetivo de la práctica: Conocer las características básicas de una aplicación web usando el
framework Struts.
Desarrollo de la práctica.
Crear un nuevo proyecto en Netbeans (ArchivoProyecto Nuevo)
En categoría elegir Java Web, y en proyectos seleccionar Web Applicaction
Escribir el nombre del proyecto y dar clic en siguiente
Elegir el Servidor web a utilizar y clic en continuar (Se debe de tener configurado correctamente el
servidor que se elija).
En la opción de elegir framework, elegir Struts, dejar las opciones por defecto y finalizar.
La estructura de nuestro proyecto será:
Crear una Pagina JSP llamada login.jsp en el proyecto ubicada en la raíz del proyecto, y otra página
JSP llamada success.jsp ubicada dentro de la carpeta WEB-INF, esto se hace por que las páginas a
las que no pueden tener acceso cualquier usuario no deben estar en la raíz de la página web. La
estructura del proyecto quedara de la siguiente manera.
La página success.jsp debe tener el siguiente contenido:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF8">
<title>Login exitoso</title>
<link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>
<body>
<h1>Felicidades!!</h1>
<p>Te has registrado como:</p>
<p>Tu nombre es: <bean:write name="LoginForm"
property="name"/>.</p>
<p>Tu e-mail es: <bean:write name="LoginForm"
property="email"/>.</p>
</body>
</html>
Y la página de login.jsp debe contener lo siguiente:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF8">
<title>Página de inicio</title>
<link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>
<body>
<html:form action="/login">
<table border="1">
<tbody>
<tr>
<td colspan="2">
<bean:write name="LoginForm" property="error"
filter="false"/>
</td>
</tr>
<tr>
<td>Escribe tu nombre:</td>
<td><html:text property="name"/></td>
</tr>
<tr>
<td>Escribe tu corre e-mail:</td>
<td><html:text property="email"/></td>
</tr>
<tr>
<td></td>
<td><html:submit value="Login"/></td>
</tr>
</tbody>
</table>
</html:form>
</body>
</html>
Crearemos un Struts ActionForm Bean en la categoría de Struts
Lo llamaremos LoginForm y elegiremos que sea parte del paquete com.myapp.struts
El contenido de LoginForm.java será:
package com.myapp.struts;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
public class LoginForm extends org.apache.struts.action.ActionForm {
private String name;
private String email;
private String error;
public String getError() {
return error;
}
public void setError() {
this.error = "<span style='color:red'>Por favor llena los campos
con datos validos</span>";
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public LoginForm() {
super();
}
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if (getName() == null || getName().length() < 1) {
errors.add("name", new ActionMessage("error.name.required"));
}
return errors;
}
}
Después crear un Struts Action
Nombrarlo LoginAction y en la casilla ActionPath escribir “/login” como se muestra en la imagen,
de igual forma elegir como paquete com.myapp.struts
En la siguiente ventana se deben hacer 3 cosas:
-
Borrar la diagonal invertida en la casilla de Input Resource
Elegir Request en la opcion Scope
Desactivar la casilla para validar el Action Form Bean
La ventana debe quedar como se muestra a continuación (Recuerda elegir LoginForm en la opción
LoginForm Bean Name):
El código de LoginAction.java debe ser el siguiente:
package com.myapp.struts;
import
import
import
import
import
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpServletResponse;
org.apache.struts.action.ActionForm;
org.apache.struts.action.ActionForward;
org.apache.struts.action.ActionMapping;
public class LoginAction extends org.apache.struts.action.Action {
private static final String SUCCESS = "success";
private static final String FAILURE = "failure";
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
LoginForm formBean = (LoginForm)form;
String name = formBean.getName();
String email = formBean.getEmail();
if((name == null) || email == null || name.equals("") ||
email.indexOf("@") == -1){
formBean.setError();
return mapping.findForward(FAILURE);
}
return mapping.findForward(SUCCESS);
}
}
Ahora se deben de agregar las entradas en el archivo struts-config.xml
Ir a la parte del código donde dice:
<action-mappings>
<action name="LoginForm" path="/login" scope="request"
type="com.myapp.struts.LoginAction" validate="false"/>
<action path="/Welcome" forward="/welcomeStruts.jsp"/>
</action-mappings>
En la palabra LoginFormdar clic derecho, en el menú seleccionar Struts y dentro de él elegir add
forward
En el cuadro que aparece llenar la casilla de name forward con success, la casilla de Resource File
elegir el archivo de success.jsp y en Action elegir /login como se muestra en la imagen
Dar clic en add y el código ahora será el siguiente:
<action-mappings>
<action name="LoginForm" path="/login" scope="request"
type="com.myapp.struts.LoginAction" validate="false">
<forward name="success" path="/WEB-INF/success.jsp"/>
</action>
<action path="/Welcome" forward="/welcomeStruts.jsp"/>
</action-mappings>
Agregar otra etiqueta para la acción de error, si los campos no son llenados de manera correcta se
mostrara nuevamente la página de login, asi que ahora aremos lo hecho anteriormente pero la
ventana quedara de la siguiente forma:
Y ahora el código será el siguiente:
<action-mappings>
<action name="LoginForm" path="/login" scope="request"
type="com.myapp.struts.LoginAction" validate="false">
<forward name="success" path="/WEB-INF/success.jsp"/>
<forward name="failure" path="/login.jsp"/>
</action>
<action path="/Welcome" forward="/welcomeStruts.jsp"/>
</action-mappings>
Ahora para poder ejecutar la aplicación debemos de abrir el archivo web.xml y en la pestaña de
pages en la casilla de WelcomeFiles escribir login.jsp, esto se hace para que se esta página
aparezca como inicio cuando ejecutemos el proyecto.
Si ahora nos cambiamos a la etiqueta de vista xml podremos ver que la etiqueta welcome-file es
login.jsp
Para que la página aparezca con estilo lo aremos con la siguiente hoja de estilos (llamada
stylesheet.css), este archivo estará guardado dentro de la carpeta web dentro del proyecto.
body {
font-family: Verdana, Arial, sans-serif;
font-size: smaller;
padding: 50px;
color: #555;
width: 650px;
}
h1 {
letter-spacing: 6px;
font-size: 1.6em;
color: #be7429;
font-weight: bold;
}
h2 {
text-align: left;
letter-spacing: 6px;
font-size: 1.4em;
color: #be7429;
font-weight: normal;
width: 450px;
}
table {
width: 550px;
padding: 10px;
background-color: #c5e7e0;
font-family: sans-serif;
}
td {
padding: 10px;
}
a {
color: #be7429;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.popupBox {
position: absolute;
top: 170px;
left: 140px;
}
.popupCell {
background-color: #fffafa;
}
.popupCell:hover {
background-color: #f5ebe9;
}
.popupItem {
color: #333;
text-decoration: none;
font-size: 1.2em;
}
La línea que agrega la hoja de estilos es:
<link rel="stylesheet" type="text/css" href="stylesheet.css">
Esta línea está ubicada dentro del archivo login.jsp y success..jsp
La estructura de nuestro proyecto quedara de la siguiente forma:
Ahora si ejecutamos el proyecto aparecerá la página de inicio:
Si no llenamos los campos o si el correo electrónico no contiene la arroba (@) saldrá la misma
página diciéndonos que ha ocurrido un error:
Si por el contrario llenamos los campos correctamente, entonces se mostrara la página de
success.jsp
Bibliografía:
http://es.scribd.com/doc/97147/introduccion-al-framework-struts
http://netbeans.org/kb/docs/web/quickstart-webapps-struts.html#overview