0% found this document useful (0 votes)
13 views

Spring MVC

aprenda spring mvc sin trabas

Uploaded by

Armando Garcia
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views

Spring MVC

aprenda spring mvc sin trabas

Uploaded by

Armando Garcia
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 36

Desarrollo de aplicaciones Web con Spring MVC

Jesús Arias Fisteus

Aplicaciones Web (2023/24)

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 1


Parte I

El patrón Modelo Vista Controlador

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 2


El patrón Modelo–Vista–Controlador

El patrón Modelo–Vista–Controlador (MVC) es un patrón


de diseño de software para interfaces de usuario que divide la
aplicación en tres componentes: modelo, vista y
controlador.

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 3


El patrón Modelo–Vista–Controlador

El componente del modelo gestiona los datos, lógica y reglas


de la aplicación, incluyendo normalmente, en el caso de las
aplicaciones Web, el almacenamiento de datos en una base de
datos.

El componente de la vista presenta los datos a los usuarios


(normalmente con HTML y CSS en el caso de las aplicaciones
Web) y recoge la entrada de los usuarios.

El componente del controlador acepta la entrada de los


usuarios e invoca la funcionalidad apropiada en los
componentes del modelo y de la vista.

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 4


El patrón MVC en aplicaciones Web

petición HTTP
navegador Controlador Modelo

re
sp
ue dato
st
a
HT dato
TP

Vista

Base de
datos

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 5


El patrón MVC en aplicaciones Web

1. Mediante una página HTML creada por la vista anterior, el


cliente envı́a una petición HTTP al servidor.
2. El controlador recibe la petición e interacciona con el modelo.
3. El controlador invoca a la vista con los datos que necesita
presentar al usuario.
4. La vista recoge dichos datos, crea la página HTML que los
presenta y construye la respuesta HTTP a enviar al cliente.

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 6


Parte II

Spring MVC

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 7


Spring MVC

Spring MVC1 es un framework que permite el desarrollo de


aplicaciones Web que siguen el patrón MVC sobre Spring
Framework.

Spring Framework2 es un entorno para el desarrollo de


aplicaciones empresariales para diversos entornos (no solo
Web) sobre la plataforma de Java, en lenguajes como Java,
Kotlin o Groovy.

1
https:
//docs.spring.io/spring-framework/reference/web/webmvc.html
2
https://spring.io/projects/spring-framework
Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 8
Spring Boot

Spring Boot3 es una extensión de Spring Framework que


proporciona un entorno de ejecución de aplicaciones para
Spring Framework preconfigurado conforme a distintos
convenios y buenas prácticas, con el objeto de simplificar el
desarrollo y despliegue de las aplicaciones.

3
https://spring.io/projects/spring-boot
Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 9
El componente del modelo

El componente del modelo suele construirse en frameworks


Web sobre bibliotecas de persistencia de objetos, conocidas
normalmente como ORM4 , las cuales proporcionan
automáticamente el código necesario para crear, leer,
actualizar y borrar (CRUD) objetos en la base de datos.

4
ORM: mapeo objeto relacional.
Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 10
El componente del modelo

Sin embargo, también existen alternativas a los ORM


ampliamente usadas, como son:

▶ Construir consultas SQL directamente desde el código de


la aplicación (por ejemplo, en Java, sobre JDBC).
▶ Usar bases de datos no basadas en el modelo relacional ni
en el lenguaje SQL (por ejemplo, MongoDB).

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 11


El componente del modelo en Spring MVC

El componente del modelo en Spring MVC se suele construir


sobre Spring Data JPA5 , el cual trabaja, a su vez, sobre
implementaciones de Jakarta Persistence6 (anteriormente
conocido como Java Persistence API o JPA).

La implementación por defecto de Jakarta Persistence en


Spring es Hibernate ORM7 .

5
https://spring.io/projects/spring-data-jpa
6
https://jakarta.ee/specifications/persistence/
7
https://hibernate.org/orm/
Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 12
El componente del modelo con Spring Data JPA
/*
* Declaraci ó n de una clase del modelo
*/
@Entity
public class User {
@Id
@ Ge ne ra t ed Va lu e ( strategy = Gener ationTyp e . AUTO )
private Integer id ;
@Column ( nullable = false )
@NotBlank
@Size ( max = 64)
private String name ;
@Column ( unique = true , nullable = false )
@Email
@NotBlank
@Size ( max = 128)
private String email ;
public Integer getId () {
return id ;
}
public void setId ( Integer id ) {
this . id = id ;
}
(...)
}
Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 13
El componente del modelo con Spring Data JPA

/*
* Declaraci ó n de una clase repositorio
*/
public interface U serRepos itory
extends CrudRepository < User , Integer > {
User findByEmail ( String email ) ;
}

// Inserci ó n de un objeto
User user = new User () ;
user . setName ( " Mary " ) ;
user . setEmail ( " mary@example . com " ) ;
user Reposito ry . save ( user ) ;

// Obtenci ó n de un objeto desde la base de datos


User user = userRep ository . findByEmail ( " mary@example . com " ) ;

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 14


El componente de la vista

Las vistas suelen ser construidas en frameworks Web


mediante plantillas HTML que, a partir de un conjunto de
variables que contienen los datos a mostrar, producen la
página HTML que los presenta.

Las plantillas consisten fundamentalmente en marcado HTML


con pequeños fragmentos de código incrustado para inyectar
datos, mostrar contenido condicionalmente, iterar sobre los
datos de una colección, etc.

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 15


El componente de la vista en Spring MVC

Las aplicaciones Spring MVC usan normalmente los lenguajes


de plantillas Thymeleaf 8 o Java Server Pages (JSP).

8
https://www.thymeleaf.org/
Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 16
Thymeleaf

< div class = " messages " >


< div class = " message " th : each = " post ␣ : ␣ $ { posts } " >
< div class = " text " th : text = " $ { post . getText () } " >
Text of the post
</ div >
< div class = " metadata " >
< span class = " author "
th : text = " $ { post . getUser () . getName () } " >
Author ' s name
</ span >
< span class = " date "
th : text = " $ { post . getTimestamp () } " >
Timestamp
</ span >
</ div >
</ div >
</ div >

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 17


El componente del controlador

Normalmente se programan los controladores mediante


estructuras normales de código (métodos / funciones) en el
lenguaje de programación del framework.

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 18


El componente del controlador

Cada método o función se mapea a una o más rutas de


peticiones HTTP, recibe todos los datos que necesite de la
petición HTTP, interacciona con el modelo y, finalmente,
selecciona la plantilla a ser presentada y le pasa a esta los
parámetros que necesite.

Cuando el framework recibe una petición HTTP, decide,


conforme a la ruta de la petición, qué método o función del
controlador necesita ser invocado.

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 19


Controladores en Spring MVC

@Controller
@ Re qu es t Ma pp i ng ( path = " / " )
public class M e s s a g e C o n t r o l l e r {
@Autowired
private M e s s a g e R e p o s i t o r y m e s s a g e R e p o s i t o r y ;
@GetMapping ( path = " / message /{ messageId } " )
public String viewMessage (
@PathVariable ( " messageId " ) int messageId ,
Model model ) {
Message message = m e s s a g e R e p o s i t o r y . findById ( messageId ) ;
if ( message != null ) {
model . addAttribute ( " message " , message ) ;
return " view_message " ;
} else {
throw new R e s p o n s e S t a t u s E x c e p t i o n (
HttpStatus . NOT_FOUND , " Message ␣ not ␣ found " ) ;
}
}
(...)
}

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 20


Controladores en Spring MVC

@PostMapping ( path = " / post " )


public String postMessage (
@ Mo de lA t tr ib ut e Message message ,
Principal principal ) {
User user =
user Reposito ry . findByEmail ( principal . getName () ) ;
message . setUser ( user ) ;
message . setTimestamp ( new Date () ) ;
m e ss a g e R e p o s i t o r y . save ( message ) ;
return " redirect : message / " + message . getId () ;
}

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 21


Parte III

Leyendo datos desde formularios

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 22


Controles en formularios HTML

Cuando el usuario presiona el botón de envı́o de un formulario


HTML, el navegador lee los valores de todos los controles del
mismo y los encapsula en una petición HTTP como una
colección de parámetros nombre–valor. La URL de la
petición se toma del atributo action del elemento form.
El nombre de cada parámetro se toma del atributo name del
control correspondiente.
El valor de cada parámetro se toma de la entrada del usuario
en dicho control.

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 23


Controles en formularios HTML

< form action = " find - user " method = " get " >
< label >
Search user :
< input type = " email " name = " email "
placeholder = " email ␣ address " >
</ label >
< input type = " submit " value = " Search " >
</ form >

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 24


Lectura de parámetros de la petición en Spring MVC

Spring proporciona a los métodos del controlador los


parámetros de la petición HTTP directamente como
argumentos del método si estos se declaran mediante la
anotación @RequestParam.

@GetMapping ( path = " / find - user " )


public String findUser (
@RequestParam ( name = " email " ) String email ,
Model model ) {
User user = userRep ository . findByEmail ( email ) ;
model . addAttribute ( " user " , user ) ;
return " view_user " ;
}

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 25


Lectura de parámetros de la petición en Spring MVC

También es posible recibir como argumento un bean9 , cuyos


atributos se inicializan con los valores de los parámetros de la
petición que coincidan en nombre con los mismos, mediante la
anotación @ModelAttribute.

@PostMapping ( path = " / signup " )


public String signUp ( @M od e lA tt ri b ut e ( " user " ) User user ) {
if ( userRepo sitory . findByEmail ( user . getEmail () ) != null ) {
return " redirect : register ? d up l ic at e _e ma il " ;
}
userService . register ( user ) ;
return " redirect : login ? registered " ;
}

9
Los beans son clases Java que encapsulan datos (propiedades) y siguen el
convenio de proporcionar un constructor sin argumentos y métodos de acceso
(getters y setters) a las propiedades.
Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 26
Parte IV

Plantillas Thymeleaf

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 27


Expresiones

Se inyecta el resultado de evaluar una expresión en un lugar


concreto de la página HTML mediante la sintaxis ${}.

<p >
Your name is < span th : text = " $ { user . name } " > John </ span >
and you are from
< span th : text = " $ { user . country } " > Nowhere </ span >.
</ p >

(Los valores “John” y “Nowhere” se mostrarán solo si se abre la


plantilla directamente en un navegador, sin ejecutarla. Si se ejecuta
la plantilla pidiendo el recurso al servidor, son reemplazados por el
resultado de cada expresión.)

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 28


Bucles

Se definen bucles sobre colecciones de datos con la sintaxis


th:each. El elemento que contenga dicha directiva se
presenta tantas veces como elementos tenga la colección.

< ul >
< li th : each = " user ␣ : ␣ $ { users } " th : text = " $ { user . name } " >
John Doe
</ li >
</ ul >

< div class = " message " th : each = " message ␣ : ␣ $ { messages } " >
< div class = " text " th : text = " $ { message . getText () } " >
Text of the post
</ div >
< div class = " metadata " >
< span class = " author "
th : text = " $ { message . getUser () . getName () } " >
Author ' s name
</ span >
</ div >
</ div >

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 29


Condicionales

Se definen condicionales con la sintaxis th:if. El elemento


que contenga dicha directiva solo aparece si la condición se
evalúa a valor cierto.

<p >
< span th : text = " $ { user . getName () } " > John Doe </ span >
< span th : if = " $ { user . isAdmin () } " >
( admin )
</ span >
</ p >

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 30


Parte V

Rutas relativas

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 31


Rutas relativas

Una aplicación web generalmente consiste en muchos recursos,


tanto estáticos como dinámicos. Sus URLs generalmente
comparten el mismo esquema y autoridad, es decir, suele
accederse a ellas a través del mismo protocolo, nombre de
dominio y puerto TCP.

Una página HTML generalmente hace referencia a otros


recursos en la misma aplicación web a través de hipervı́nculos,
formularios, imágenes, referencias a hojas de estilo, referencias
a archivos JavaScript, etc.

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 32


Rutas relativas

En una página HTML a la cual se accede a través de una URL


dada, las rutas relativas permiten a los creadores evitar tener
que especificar URLs completas, proporcionando simplemente
la parte que cambia con respecto a la URL de la página
HTML actual.

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 33


Rutas relativas

https://www.example.com/app/main.html

<html>
<head>
(...)
</head>
<body>
<p>
<img src="foto.jpg"
alt="Una foto"> https://www.example.com/app/foto.jpg
</p>
</body>
</html>

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 34


Rutas relativas

En la mayorı́a de los casos se deberı́a usar rutas relativas para


hacer referencia a otras URLs de la misma aplicación:

▶ Las páginas HTML son más compactas y fáciles de leer, y los


errores en URLs son menos frecuentes.
▶ Se pueden mover las aplicaciones a otro esquema o autoridad
sin necesidad de actualizar los enlaces en cada página HTML.
▶ Durante la fase de desarrollo, se puede acceder a los recursos
en despliegues de la aplicación en local o en servidores que no
son de producción.

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 35


Referencias

▶ Shameer Kunjumohamed, Hamidreza Sattari, Alex Bretet,


Geoffroy Warin. Spring MVC: Designing Real-World Web
Applications, Packt Publishing (2016):
▶ Online access at O’Reilly through UC3M Library

Aplicaciones Web (2023/24) Desarrollo de aplicaciones Web con Spring MVC 36

You might also like