Hello World en Spring + Thymeleaf + Controller

Esta guía utiliza Spring Tool Suite 4, pero Eclipse(con el ST4 instalado) o IntelliJ pueden hacer el mismo trabajo.

  • La finalidad de esta guia es mostrar un mensaje en una página html con tecnología Thymeleaf.
  • Se mostrará que un controlador puede reconocer el tipo de pedido (request) y luego llamar la vista necesaria.
  • Se aprenderá acerca de algunas anotaciones comunes en Spring.

Repositorio en Bitbucket

git clone https://VALKYRIE7@bitbucket.org/VALKYRIE7/helloworld-spring-thymeleaf.git

Vamos a File/New/Spring Starter Project y llenamos los datos de proyecto

Elegimos Web/Web, Template Engines/Thymeleaf

Si lo desean, puede añadir DevTools, eso permitirá ver los cambios que hagamos en la vista sin necesidad de reiniciar el servidor.

En la arquitectura MVC, el controlador se encarga de procesar los pedidos del usuario

IndexController

Creamos el paquete hwt.controller y dentro la clase IndexController.java. Usamos la anotación @Controller para que Spring reconozca que es un controlador.

package hwt.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class IndexController {

	@GetMapping("/")
	public String verIndex() {
		return "index";
	}
}

@Controller es una especialización de @Component, permite que las clases que lo implementen sean autodetectadas a través del escaneo de la ruta de clase.

En este caso, desde el explorador se realiza el pedido (localhost:8080/) y @Controller recibe el request para «/», luego hace el retorno (return) del nombre de la vista «index». A continuación una vista con dicho nombre se encarga de mostrar el contenido HTML.

@GetMapping es una anotación que mapea pedidos HTTP GET hacia métodos handler (manejadores) específicos. Esta anotación se asegura que el pedido HTTP GET sea mapeado hacia el método verIndex().

index.html

En la carpeta src/main/resources/templates creamos el archivo index.html.

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>Insert title here</title>
</head>
<body>

	<h1>Hello World!</h1>
	<h2>Esto es una prueba</h2>

</body>
</html>

Se usa el namespace xmlns:th=»http://www.thymeleaf.org» para utilizar las características de Thymeleaf, aunque en este caso particular no es necesario porque no estamos haciendo uso de la etiqueta «th». Más adelante aparecerá un ejemplo con esa etiqueta.

Llamando a la vista hw1.html desde varios controladores diferentes

Se puede llamar una vista desde diferentes controladores, además, se puede declarar diferentes tipos de pedidos dentro del controlador.

Creo un hw1.html, similar a index.html, tan solo para tener otro archivo. Tambien el controlador Hw1Controller.java.

package hwt.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class Hw1Controller {

	@GetMapping("/hw1")
	public String pruebaHW1() {
		System.out.println("Llamado desde Hw1Controller");
		return "hw1";
	}
}

En este caso @GetMapping al recibir «/hw1» retornará la cadena «hw1» y este valor se añadirá al objeto Model el cual hará accesible la plantilla de la vista.

Cuando se hace el pedido http://localhost:8080/hw1 el controlador reconoce la cadena «hw1», ejecuta el método pruebaHW1() y con ello ejecuta System.out.println(«Llamado desde Hw1Controller») e imprime el mensaje en consola.

Añadiendo una lista de request al GetMapping

@GetMapping puede tener múltiples pedidos asignados y así llamar a una misma vista con diferentes nombres. Para ello añadimos la lista de nombres de la siguiente manera:

@GetMapping({«cadena1», «cadena2», «etc…»})

package hwt.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

/*
 * Esta versión muestra hw1.html 
 * pero utilizando nombres de dirección diferentes a "hw1" 
*/
@Controller
public class Hw1Version2Controller {

	@GetMapping({"hw1v2", "hw1diferente"})
	public String pruebaHW1Version2() {
		System.out.println("Llamado desde Hw1Version2Controller");
		return "hw1";
	}
}

Enviar un mensaje desde el controlador a la vista usando Model

Creo el archivo hw2.html y HW2Controller.java

El objeto Model permite pasar atributos a la vista.

package hwt.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class Hw2Controller {

	@GetMapping("hw2")
	public String hw2Vista(Model model) {
		model.addAttribute("titulo", "Hello World desde Spring");
		return "hw2";
	}
}

Vista hw2.html usando la etiqueta th para imprimir el título que está en Hw2Controller

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>Insert title here</title>
</head>
<body>
	<h1 th:text="${titulo}"></h1>
</body>
</html>

https://www.tutorialspoint.com/spring/spring_web_mvc_framework.htm

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/stereotype/Controller.html/

https://spring.io/guides/gs/serving-web-content/

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/GetMapping.html

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/ui/Model.html

Anuncio publicitario

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s