Publicado el 22 de Enero del 2019
401 visualizaciones desde el 22 de Enero del 2019
454,3 KB
26 paginas
Creado hace 13a (10/12/2010)
Especialista Universitario Java Enterprise
Struts
Sesión 1. Introducción a Struts: el
controlador y las acciones
© 2010-2011 Depto. Ciencia de la Computación e IA
Especialista Universitario Java Enterprise
Indice
• Introducción a Struts y a MVC
• Instalación de Struts
• El “ciclo de control” en Struts
• Las acciones
• Gestión de errores en las acciones
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 2
Especialista Universitario Java Enterprise
Struts como framework MVC
• ¿Por qué Struts?
• Es un estándar “de facto”. Amplia comunidad de
desarrolladores. Mucha documentación y ejemplos.
• Problema: en muchos aspectos es tedioso (configuración) y
poco flexible. Se ha quedado un poco “antiguo”.
• ¿Hay alternativas?
• JavaServer Faces (centrado en el GUI)
• Spring
• Versiones de Struts
• Veremos la 1.3
• Struts 2: mucho más flexible y sencillo, aunque no ha tenido
tanto éxito
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 3
Especialista Universitario Java Enterprise
Ejemplo real de MVC: pizzas para llevar
Pepperoni y anchoas!
Una 7!
Controlador
Vista
Modelo
© 2011-2010/ Depto. Ciencia de la Computación e IA
MVC y Struts 4
Especialista Universitario Java Enterprise
Ejemplo no tan real (JavaEE)
verPedido.mvc?id=7
Servlet
Controlador
GestorPedidos.getPedido(7)
Pedido
Pedido
pedido.jsp
JDBC
Modelo
Clases Java
Presentación
Lógica de negocio
Acceso a datos
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 5
Especialista Universitario Java Enterprise
Flujo de MVC en Struts
verPedido.mvc?id=7
Servlet (ya hecho en Struts)
Controlador
Ejecutar la acción “ver Pedido”
Clase java propia que debe heredar
de una de Struts
GestorPedidos.getPedido(7)
Acción
“verPedido”
Pedido
Modelo
JDBC
Pedido
pedido.jsp
Clases Java propias
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 6
Especialista Universitario Java Enterprise
Indice
• Introducción a Struts y repaso de MVC
• Instalación de Struts
• El “ciclo de control” en Struts
• Las acciones
• Gestión de errores en las acciones
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 7
Especialista Universitario Java Enterprise
Desarrollar con Struts: instalación
• Incluir una serie de .jar en el WEB-INF
• Crear y mantener el fichero de configuración
principal
• WEB-INF/struts-config.xml
• Crear y mantener ficheros de recursos
(.properties)
• Básicamente mensajes de error, avisos, etc.
• Hay una serie de plugins adicionales. Veremos
el validator.
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 8
Especialista Universitario Java Enterprise
El Servlet controlador
Ya está hecho en Struts
•
• Debemos configurar la aplicación para que todas las
peticiones vayan a parar al mismo servlet (en el web.xml)
<servlet>
<servlet-name>controlador</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>controlador</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 9
Especialista Universitario Java Enterprise
Indice
• Introducción a Struts y repaso de MVC
• Instalación de Struts
• El “ciclo de control” en Struts
• Las acciones
• Gestión de errores en las acciones
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 10
Especialista Universitario Java Enterprise
El trabajo del servlet controlador
1. Recibir la petición: xxx.do
2. Buscar en struts-config.xml “lo que viene antes del .do”
para encontrar una clase que se corresponde con una
acción
login.do Ü es.ua.jtech.struts.presentacion.acciones.AccionLogin
1. Crear un nuevo objeto de esa clase y llamar al método
execute
2. El método execute devolverá un objeto ActionForward que
indica a qué página JSP hay que llamar
3. Volver al paso 1
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 11
Especialista Universitario Java Enterprise
2. Mapeo petición-acción
• En struts-config.xml
<action-mappings>
<!-- hacer login -->
<action path="/login" type="acciones.AccionLogin">
<forward name="OK" path="/personal.jsp"/>
<forward name="errorUsuario" path="/error.html"/>
</action>
<!-- definición de otras acciones -->
</action-mappings>
...
URL
Acción
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 12
Especialista Universitario Java Enterprise
3. Instanciar la acción y llamar a execute
• Clase que hereda de org.apache.struts.action.Action
import javax.servlet.http.*;
import org.apache.struts.action.Action;
//obtener login y password y autentificar al usuario
...
if (...)
public class AccionLogin extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse resp){
}
else
return mapping.findForward("OK");
return mapping.findForward("errorUsuario");
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 13
Especialista Universitario Java Enterprise
4. Mapeo ActionForward-vista
• En struts-config.xml
<action-mappings>
<!-- hacer login -->
<action path="/login" type="acciones.AccionLogin">
<forward name="OK" path="/personal.jsp"/>
<forward name="errorUsuario" path="/error.html"/>
</action>
<!-- definición de otras acciones -->
</action-mappings>
...
Resultados
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 14
Especialista Universitario Java Enterprise
Forwards globales
• En struts-config.xml, accesibles a todas las
acciones
<forward name="errorUsuario" path="/error.html"/>
<global-forwards>
</global-forwards>
<action-mappings>
<!-- hacer login -->
<action path="/login" type="acciones.AccionLogin">
<forward name="OK" path="/personal.jsp"/>
<!-- definición de otras acciones -->
</action-mappings>
</action>
...
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 15
Especialista Universitario Java Enterprise
Las acciones
• Normalmente habrá una clase por caso de uso
• AccionLogin
• AccionSeleccionarLibro
• AccionListarLibros
• También se puede hacer una acción para varias tareas:
AccionLibro, con un parámetro HTTP diferencia entre seleccionar, listar,..
• Las acciones:
• Toman los parámetros de la petición HTTP
• Chequean errores en dichos parámetros
• Le piden al modelo que haga “el trabajo sucio” y devuelva resultados
• Ponen los resultados en un ámbito accesible a los JSP (request,
response, session)
• Ceden el control al controlador
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 16
Especialista Universitario Java Enterprise
Ejemplo de código de acción
…
UsuarioDAO dao = UsuarioDAO.getInstance();
Usuario u = dao.login(request.getParameter(“login”), request.getParameter(“password”));
if (u==null) {
ActionMessages errores = new ActionMessages();
errores.add(ActionMessages.GLOBAL_MESSAGE, new
}
else {
}
…
ActionMessage("error.login"));
saveErrors(request, errores);
//si hay error se debe volver al formulario de login
return mapping.findForward("error");
request.getSession().setAttribute("usuario", u);
//si todo va bien se debe mostrar la lista de tareas (tareas.jsp)
return mapping.findForward("OK");
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 17
Especialista Universitario Java Enterprise
Indice
• Introducción a Struts y repaso de MVC
• Instalación de Struts
• El “ciclo de control” en Struts
• Las acciones
• Gestión de errores en las acciones
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 18
Especialista Universitario Java Enterprise
Gestión de errores: pasos
1. Crear una lista de errores vacía (ActionMessages)
2. Añadir errores (ActionMessage) a la lista
3. Si la lista contiene errores
I. Guardar la lista en la petición HTTP (saveErrors)
II. Devolver un resultado (findForward) indicando error
4. En la página web a la que se salta, habrá
que mostrarlos (<html:messages>)
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 19
Especialista Universitario Java Enterprise
Gestión de errores (II): código de la acción
ActionMessages errores = new ActionMessages();
try {
//código que ejecuta la lógica de negocio.
...
}
catch(Exception e) {
//añadir errores a la lista
errores.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.bd");
}
//comprobar si la lista de errores está vacía
if (!errores.empty()) {
//guardar los errores en la petición HTTP
saveErrors(request, errors);
//devolver un resultado que indique error
return mapping.findForward("error");
}
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 20
Especialista Universitario Java Enterprise
Gestión de errores (III): mostrar los errores
• Se usa una taglib de Struts (HTML)
<!-- referenciar la taglib de Struts que include la etiqueta -->
<%@taglib uri="http://struts.apache.org/tags-html“ prefix="html" %>
...
<!-- mostrar los mensajes almacenados -->
<html:messages id="e">
<ul>
<li>${e}</li>
</ul>
</html:messages>
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 21
Especialista Universitario Java Enterprise
¿Dónde están los mensajes de error?
• NO en el código Java, sino en un .properties
errores.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("error.bd");
• Ficheros de recursos: definidos en struts-config.xml
<message-resources parameter="util.recursos"/>
• En el fichero /WEB-INF/classes/util/recursos.properties
error.bd = se ha producido un error con la base de datos
© 2010-2011/ Depto. Ciencia de la Computación e IA
MVC y Struts 22
Especialista Un
Comentarios de: Sesión 1. Introducción a Struts: el controlador y las acciones (0)
No hay comentarios