M4-UF1 FRAMEWORK SPRING
UNIDAD 6: Spring MVC
eugeniaperez.es
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.1 Arquitectura de la aplicación web
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.1 Arquitectura de la aplicación web
- Request: Una petición es enviada al servidor que será atendida por un dispatcher.
- Invokes: El dispatcher envía las solicitudes al controlador apropiado.
- Service call: El controlador interactúa con la capa de servicio para hacer uso de la capa de persistencia.
- Response: El controlador actualiza el modelo basado en el resultado y responde con la correspondiente vista al usuario.
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.1 Arquitectura de la aplicación web
Para crear un proyecto web Spring (Hello Spring project):
New > Other > Spring > Spring project > Simple Spring Web Maven
Archivos clave:
- WEB-INF/web.xml: fichero de configuración web
- WEB-INF/mvc-config.xml: fichero de configuración de Spring
- src/main/resources/spring/application-config.xml: inyección de dependencias, configuración de BD, etc.
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.1 Arquitectura de la aplicación web
Existe otra alternativa para crear un proyecto web:
New > Spring > Spring MVC Project
Archivos equivalentes:
- WEB-INF/web.xml = web.xml
- WEB-INF/mvc-config.xml =
- WEB-INF/spring/appServlet/servlet-context.xml
- src/main/resources/spring/application-config.xml =
- WEB-INF/spring/root-context.xml
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.1 Arquitectura de la aplicación web
WEB-INF/mvc-config.xml:
<context:component-scan base-package="org.sistema.springmvc.forms.controllers" />
<!-- With this all the content from resources dir will be treated as static
content: js, css, images, -->
<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:annotation-driven />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- Example: '/WEB-INF/jsp/showMessage.jsp' -->
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
Controladores
Vistas
o bien paquete con objetos anotados
Dentro de webapp
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.1 Arquitectura de la aplicación web
El pom.xml contiene las mismas dependencias necesarias para desarrollar mediante Spring:
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.samples.service.service</groupId>
<artifactId>prueba</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
Todo el código necesario para la ejecución del sitio se almacenará en formato comprido en un WAR, que será desplegado en nuestro servidor.
unidad 6: SPRING MVC
eugeniaperez.es
Descarga el código en Bitbucket
Descarga el proyecto hellospring del repositorio de Bitbucket:
Usuario:
Psswd:
URL: https://eugenia_perez@bitbucket.org/eugenia_perez/hellospring.git
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.1 Arquitectura de la aplicación web
Crear un Hello Spring project:
Creando un controlador:
@Controller
NombreController
@RequestMapping("/path")
Método con la acción que retornará la vista
http://localhost:8080/helloSpring/hello
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.1 Arquitectura de la aplicación web
Crear un Hello Spring project:
Creando una vista:
Se crea una vista con extensión JSP que sea HTML plano y que imprima el mensaje retornado en la acción
Se configura el servidor (WildFly basado en JBoss) y se despliega el WAR con Run As > Run on Server
Si el servidor ya está corriendo -> Full Publish
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.1 Arquitectura de la aplicación web
WildFly despliega el WAR tomando el nombre del artefactId + la versión, para luego alojarlo en su propia carpeta:
Para evitarlo, añadiremos en el pom.xml lo siguiente:
</dependencies>
<build>
<finalName>${artifactId}</finalName>
</build>
http://localhost:8080/helloSpring-0.0.1-SNAPSHOT/hello
http://localhost:8080/helloSpring/hello
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.1 Arquitectura de la aplicación web
El flujo es el siguiente:
- Petición del cliente a una ruta. El patrón será: /controlador/acción/parámetros
- La petición se dirige al controlador y acción especificada en la petición, pasándole los parámetros.
- Se ejecuta el código de la acción. La última línea de este código debe enviar el flujo a una vista a mostrar, que será el contenido que le aparezca al usuario en su navegador.
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.1 Arquitectura de la aplicación web
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.1 Arquitectura de la aplicación web
TAGLIB: SPRING PARA VISTAS
La biblioteca core permite iteraciones, condicionales, manipulación de URL y otras funciones generales.
Con esto estamos haciendo un import de core de jstl.
Se utiliza con el prefijo c (podría ser otro) en etiquetas como <c:forEach>,<c:when>, <c:url>, etc... en la vista.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.1 Arquitectura de la aplicación web
TAGLIB: SPRING PARA VISTAS
Spring tiene también una librería de tags para suplantar a las etiquetas HTML utilizadas para formularios:
Todas etiquetas procedentes de esta librería (<sf:form>, <sf:input>, etc) serán traducidas a sus equivalentes en HTML.
Puedes ver mas en:
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.1 Arquitectura de la aplicación web
TAGLIB: SPRING PARA VISTAS
Existen además otro tipo de etiquetas denominadas spring.tld destinadas a la evaluación de errores, establecer temas, formateo y escape de mensajes, internacionalización, etc.
Puedes ver más información al respecto en:
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/spring.tld.html
<%@ taglib prefix="s" uri="http://www.springframework.org/tags"%>
unidad 6: SPRING mvc
eugeniaperez.es
Descarga el código en Bitbucket
Descarga el proyecto spring.forms del repositorio de Bitbucket:
Usuario:
Psswd:
URL: https://eugenia_perez@bitbucket.org/eugenia_perez/spring.forms.git
unidad 6: SPRING mvc
eugeniaperez.es
6.5 Formularios
Realizaremos las operaciones CRUD web sobre un usuario:
unidad 6: SPRING mvc
eugeniaperez.es
6.5 Formularios
Localización de elementos:
- Ficheros de configuración-> mvc-config y application-config
- Entidad User (POJO)
- El controlador de Usuarios accede al DAO y retorna una vista
- Utiliza un objeto model para cargar objetos que mostrarán las vistas
- Inyección del DAO (accede a objetos falsos, en memoria)
- Las vistas utilizan librerías específicas y muestran información
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.5 Formularios
Explicación del proyecto...
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.5 Formularios
El flujo es el siguiente:
- Petición del cliente a una ruta. El patrón será: /controlador/acción/parámetros
- La petición se dirige al controlador y acción especificada en la petición, pasándole los parámetros.
- Se ejecuta el código de la acción. La última línea de este código debe enviar el flujo a una vista a mostrar, que será el contenido que le aparezca al usuario en su navegador.
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.5 Formularios
Probando el funcionamiento...
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.5 Formularios
-
GET: se utiliza para lecturas o para retornar una vista
- Los parámetros SÍ viajan en la URL
- Ejemplos: listar usuarios, detalle usuario, borrar usuario, cargar página inicial de formulario...
-
POST: se utiliza para enviar datos al servidor que van a ser almacenados
- Los parámetros NO viajan en la URL
- Ejemplos: salvar un usuario, actualizar un usuario, etc.
unidad 6: SPRING MVC
eugeniaperez.es
Descarga el código en Bitbucket
LISTADO DE USUARIOS
Descarga el proyecto Spring.formsv1 del repositorio de Bitbucket:
Usuario:
Psswd:
URL: https://eugenia_perez@bitbucket.org/eugenia_perez/spring.formsv1.git
unidad 6: SPRING MVC
eugeniaperez.es
6.5 Formularios
- http://localhost:8080/springFormsv1/users/
- http://localhost:8080/springFormsv1/
unidad 6: SPRING MVC
eugeniaperez.es
Descarga el código en Bitbucket
DETALLE DE USUARIOS
Descarga el proyecto Spring.formsv2 del repositorio de Bitbucket:
Usuario:
Psswd:
URL: https://eugenia_perez@bitbucket.org/eugenia_perez/spring.formsv2.git
unidad 6: SPRING MVC
eugeniaperez.es
6.5 Formularios
http://localhost:8080/springFormsv1/users/1
unidad 6: SPRING MVC
eugeniaperez.es
Descarga el código en Bitbucket
INSERCIÓN DE USUARIOS
Descarga el proyecto Spring.formsv3 del repositorio de Bitbucket:
Usuario:
Psswd:
URL: https://eugenia_perez@bitbucket.org/eugenia_perez/spring.formsv3.git
unidad 6: SPRING MVC
eugeniaperez.es
Descarga el código en Bitbucket
Para que los caracteres introducidos se interpreten como UTF-8, se debe incluir en el web.xml:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
unidad 6: SPRING MVC
eugeniaperez.es
6.5 Formularios
http://localhost:8080/springFormsv1/users/new
Se crea un objeto User que se asociará al formulario en la vista mediante el modelAttribute="user", que asignará los valores de los input a sus variables (debe coincidir el nombre del Path).
unidad 6: SPRING MVC
eugeniaperez.es
6.5 Formularios
http://localhost:8080/springFormsv1/users/new
unidad 6: SPRING MVC
eugeniaperez.es
Descarga el código en Bitbucket
EDICIÓN DE USUARIOS
Descarga el proyecto Spring.formsv4 del repositorio de Bitbucket:
Usuario:
Psswd:
URL: https://eugenia_perez@bitbucket.org/eugenia_perez/spring.formsv4.git
unidad 6: SPRING MVC
eugeniaperez.es
6.5 Formularios
http://localhost:8080/springFormsv1/users/update/2
En la vista se cargan los valores automáticamente
gracias al modelAttribute
unidad 6: SPRING MVC
eugeniaperez.es
Descarga el código en Bitbucket
BORRADO DE USUARIOS
Descarga el proyecto Spring.formsv5 del repositorio de Bitbucket:
Usuario:
Psswd:
URL: https://eugenia_perez@bitbucket.org/eugenia_perez/spring.formsv5.git
unidad 6: SPRING MVC
eugeniaperez.es
6.5 Formularios
http://localhost:8080/springFormsv5/users/delete/4
unidad 6: SPRING MVC
eugeniaperez.es
Descarga el código en Bitbucket
Descarga el proyecto Spring.formsv6 del repositorio de Bitbucket:
Usuario:
Psswd:
URL: https://eugenia_perez@bitbucket.org/eugenia_perez/spring.formsv6.git
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.5 Formularios
Finalmente representaremos las operaciones necesarias para permitir la relación de dos entidades (1-N) entre User y Task -> Los usuarios tendrán un listado de tareas.
Sobre cada tarea se podrán realizar las mismas operaciones que sobre usuarios.
Por lo tanto, deberán existir dos controladores, dos objetos del dominio y dos DAOs.
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.5 Formularios
unidad 6: SPRING MVC
eugeniaperez.es
Descarga el código en Bitbucket
Descarga el proyecto spring.formsv6B del repositorio de Bitbucket:
Usuario:
Psswd:
URL: https://eugenia_perez@bitbucket.org/eugenia_perez/spring.formsv6b.git
UNIDAD 6: SPRING mvc
eugeniaperez.es
6.5 Formularios
Permite trabajar con modelos de vistas adaptados en función de las necesidades del formulario -> DTO.
Se necesitará realizar un mapeo entre los objetos del modelo de dominio y los DTOs, a través de los Mapper.
Unidad 6
By eugenia_perez
Unidad 6
- 1,986