Crear un proyecto web con Spring Boot y JSP
Spring Boot nos facilita empezar a desarrollar un proyecto con las herramientas de Spring sin tener que invertir mucho tiempo en configuraciones iniciales. Hoy vamos a crear un proyecto web con Spring Boot. Para este post estaré usando Apache Netbeans 12.0.
Empezaremos por generar la estructura de un proyecto Maven mediante la herramienta Spring Initializr.En el primer apartado nos da a elegir las opciones de tipo de proyecto, lenguaje y versión de Spring Boot. En Project elegimos un proyecto de tipo Maven. En lenguaje elegiremos Java y en la versión de Spring Boot dejamos la que está seleccionada por defecto, en este caso es la 2.5.1.
Continuamos con el apartado de los metadatos. En grupo ingresaré com.siempreprogramando. En artifact ingreso proyectoweb y añadimos una descripción del proyecto. En packaging selecciono War y la versión de Java que estaré utilizando será la 11.
Finalmente en Dependencias agregamos Spring Web. Damos click en el botón GENERATE para hacer la magia. Nos forzará una descarga con nuestro proyecto en un .zip. Descomprimimos el archivo y lo abrimos con nuestro IDE. File -> Open Project... -> ruta hacia la carpeta.
Vemos que el proyecto tiene la estructura de un proyecto maven.
Spring Boot tiene integración directa con plantillas Thymeleaf, pero para nuestro proyecto usaremos plantillas JSP. Para esto haremos lo siguiente.
En nuestro pom.xml agregamos la siguiente dependencia.
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>
La primera dependencia nos dará soporte para trabajar con JSP y la segunda es para trabajar con JSTL, la cual es una biblioteca que nos proporciona tags con las funcionalidades más comunes al programar este tipo de archivos. Al final nuestro pom.xml quedará de la siguiente manera.
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.siempreprogramando</groupId> <artifactId>proyectoweb</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>proyectoweb</name> <description>Proyecto Web</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Ahora tenemos que crear a manita las carpetas en donde almacenaremos nuestras vistas JSP. En la ruta proyectoweb\src\main creamos la carpeta webapp y dentro de esta carpeta creamos WEB-INF. Hacemos un Clean and Build y el proyecto se actualiza. Vemos que ya aparece la carpeta Web Pages en donde almacenaremos nuestros recursos como vistas, archivos css y archivos JavaScript.
Editamos el archivo application.properties para indicarle a Spring Boot en donde buscará las vistas.
spring.mvc.view.prefix=/WEB-INF/ spring.mvc.view.suffix=.jsp
Ahora crearemos un controlador y una vista. Creamos un nuevo paquete java para el controlador com.siempreprogramando.proyectoweb.controller y creamos un controlador de Spring.
package com.siempreprogramando.proyectoweb.controller; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * * @author luis */ @Controller @Scope("request") public class InicioController { @RequestMapping(value = "/", method = RequestMethod.GET) public String inicio() { return "inicio"; } }
Ahora creamos la vista inicio.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@page contentType="text/html"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Hola Mundo</title> </head> <body> <h1>Hola Mundo desde Spring Boot</h1> </body> </html>
Netbeans espera que le indiquemos un servidor de apliaciones para desplegar nuestra aplicación pero con Spring Boot no aplica ya que tenemos un Tomcat embebido. Vamos a indicárselo a NetBeans. Click derecho en nuestro proyecto -> Properties. En Categories seleccionamos Actions y en el cuadro de Actions seleccionamos Run project.
En el cuadro de Execute Goals escribimos lo siguiente:
org.springframework.boot:spring-boot-maven-plugin:run
Y le damos OK.
Al final en nuestra consola podremos ver el logo de Spring Boot y una serie de información relacionada.
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.5.1) 2021-06-18 19:44:55.756 INFO 8908 --- [ main] c.s.proyectoweb.ProyectowebApplication : Starting ProyectowebApplication using Java 11.0.11 on luis-PC with PID 8908 (C:\Users\luis\Documents\proyectosGit\proyectoweb\target\classes started by luis in C:\Users\luis\Documents\proyectosGit\proyectoweb) 2021-06-18 19:44:55.761 INFO 8908 --- [ main] c.s.proyectoweb.ProyectowebApplication : No active profile set, falling back to default profiles: default 2021-06-18 19:44:57.870 INFO 8908 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2021-06-18 19:44:57.885 INFO 8908 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2021-06-18 19:44:57.885 INFO 8908 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.46] 2021-06-18 19:44:58.299 INFO 8908 --- [ main] org.apache.jasper.servlet.TldScanner : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 2021-06-18 19:44:58.322 INFO 8908 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2021-06-18 19:44:58.323 INFO 8908 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2441 ms 2021-06-18 19:44:58.882 INFO 8908 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2021-06-18 19:44:58.917 INFO 8908 --- [ main] c.s.proyectoweb.ProyectowebApplication : Started ProyectowebApplication in 3.958 seconds (JVM running for 4.759)
Nos indica que Tomcat inició en el puerto 8080. Vamos a nuestro browser y navegamos a http://localhost:8080/
Y tenemos nuestro bonito hola mundo con Spring Boot y plantillas JSP :)
Dejo el código en Github para referencias en GitHub.



Comentarios