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:

  1. Petición del cliente a una ruta. El patrón será: /controlador/acción/parámetros
  2. La petición se dirige al controlador y acción especificada en la petición, pasándole los parámetros. 
  3. 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:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/view.html#view-jsp-formtaglib

 

 

<%@ 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:

  1. Petición del cliente a una ruta. El patrón será: /controlador/acción/parámetros
  2. La petición se dirige al controlador y acción especificada en la petición, pasándole los parámetros. 
  3. 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.

 

 

 

Made with Slides.com