Bienvenidos al ejemplo de Spring MVC. Hace algún tiempo, en el Tutorial de Spring MVC , expliqué cómo crear una aplicación Spring MVC con Spring Tool Suite. Pero hoy, crearé una aplicación Spring MVC básica de Hola mundo con Maven y Eclipse.
Ejemplo de Spring MVC
Spring MVC se basa en la arquitectura Modelo-Vista-Controlador. La siguiente imagen muestra la arquitectura Spring MVC en un nivel alto. es la clase controladora frontal para tomar todas las solicitudes y comenzar a procesarlas. Tenemos que configurarlo en el archivo web.xml. Su trabajo es pasar la solicitud a la clase controladora apropiada y enviar la respuesta de regreso cuando las páginas de vista hayan renderizado la página de respuesta. será la única clase controladora en nuestra aplicación de ejemplo Spring MVC. , son las páginas de vista en nuestra aplicación de ejemplo Hello World de Spring MVC. será la única clase modelo que tendremos en nuestra aplicación web de ejemplo Spring MVC. DispatcherServletHomeController.javahome.jspuser.jspUser.java
Ejemplo de Spring MVC Proyecto Hello World Eclipse
La siguiente imagen muestra nuestro proyecto de ejemplo Spring MVC en Eclipse. Comencemos y creemos nuestro proyecto desde cero.
Ejemplo de configuración de un proyecto de Eclipse con Spring MVC
Como es una aplicación web y queremos usar maven para la gestión de dependencias, primero tenemos que crear una aplicación web dinámica y luego convertirla en un proyecto maven. Las imágenes a continuación muestran cómo hacer esto y preparar la estructura del esqueleto de nuestro proyecto. Haga clic derecho en la ventana del explorador de proyectos y haga clic en “Nuevo – Proyecto web dinámico” como se muestra en la imagen a continuación. Proporcione el nombre como “spring-mvc-example” en la siguiente página emergente, no debería ser necesario cambiar el resto de las cosas. En la siguiente página, proporcione la carpeta de origen como “src/main/java”. Es posible que tenga que eliminar la carpeta “src” de la lista antes de agregar esto. A continuación está la página del módulo web, proporcione la raíz de contexto de la aplicación como “spring-mvc-example” y asegúrese de marcar la opción “Generar descriptor de implementación web.xml”. Haga clic en Finalizar y tendrá un nuevo Proyecto web dinámico en su explorador de proyectos de eclipse.
Conversión de un proyecto web dinámico a un proyecto Maven
Queremos usar Maven para administrar fácilmente nuestras dependencias de Spring MVC. Así que vamos a convertir nuestro proyecto web a Maven. Haga clic derecho en el proyecto y seleccione “Configurar – Convertir a proyecto Maven”. A continuación, proporcione las configuraciones de pom.xml como se muestra a continuación. El código de esqueleto de nuestro proyecto de aplicación web Maven está listo. Ahora podemos comenzar a realizar cambios en él y crear nuestra aplicación de ejemplo de Hola mundo de Spring MVC.
Dependencias de Spring MVC para pom.xml
Necesitamos agregar las dependencias spring-web y spring-webmvc en pom.xml, además de las dependencias servlet-api, jsp-api y jstl. Nuestro archivo pom.xml final será como el que se muestra a continuación.
project xmlns_xsi="https://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"modelVersion4.0.0/modelVersiongroupIdcom.journaldev.spring.mvc/groupIdartifactIdspring-mvc-example/artifactIdversion0.0.1-SNAPSHOT/versionpackagingwar/packagingnameSpring MVC Example/namedescriptionSpring MVC Hello World Example/description!-- Add Spring Web and MVC dependencies --dependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion4.3.9.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-web/artifactIdversion4.3.9.RELEASE/version/dependency!-- Servlet --dependencygroupIdjavax.servlet/groupIdartifactIdservlet-api/artifactIdversion2.5/versionscopeprovided/scope/dependencydependencygroupIdjavax.servlet.jsp/groupIdartifactIdjsp-api/artifactIdversion2.1/versionscopeprovided/scope/dependencydependencygroupIdjavax.servlet/groupIdartifactIdjstl/artifactIdversion1.2/version/dependency/dependenciesbuildpluginspluginartifactIdmaven-compiler-plugin/artifactIdversion3.6.1/versionconfigurationsource1.8/sourcetarget1.8/target/configuration/pluginpluginartifactIdmaven-war-plugin/artifactIdversion3.0.0/versionconfigurationwarSourceDirectoryWebContent/warSourceDirectory/configuration/plugin/pluginsfinalName${project.artifactId}/finalName !-- added to remove Version from WAR file --/build/project
Tenga en cuenta la finalNameconfiguración en la compilación, de modo que el nombre de nuestro archivo WAR no tenga detalles de la versión. Cuando Eclipse compile el proyecto, notará que todos los archivos jar aparecen en la sección de dependencias de Maven.
Spring MVC DispatcherServlet como controlador frontal
Tenemos que agregar el marco Spring MVC a nuestra aplicación web, para eso necesitamos configurarlo DispatcherServleten web.xml como se muestra a continuación.
?xml version="1.0" encoding="UTF-8"?web-app xmlns_xsi="https://www.w3.org/2001/XMLSchema-instance" xsi_schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" display-namespring-mvc-example/display-name!-- Add Spring MVC DispatcherServlet as front controller --servlet servlet-namespring/servlet-name servlet-class org.springframework.web.servlet.DispatcherServlet /servlet-class init-param param-namecontextConfigLocation/param-name param-value/WEB-INF/spring-servlet.xml/param-value /init-param load-on-startup1/load-on-startup /servlet servlet-mapping servlet-namespring/servlet-name url-pattern//url-pattern /servlet-mapping /web-app
contextConfigLocationinit-param se utiliza para proporcionar la ubicación del archivo de configuración del bean Spring.
Archivo de configuración de bean de ejemplo de Spring MVC
El siguiente paso es crear un archivo de configuración del bean Spring spring-servlet.xmlcomo se muestra a continuación.
?xml version="1.0" encoding="UTF-8"?beans:beans xmlns_xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns_beans="https://www.springframework.org/schema/beans"xmlns:context="https://www.springframework.org/schema/context"xsi:schemaLocation="https://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsdhttps://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsdhttps://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --!-- Enables the Spring MVC @Controller programming model --annotation-driven /context:component-scan base-package="com.journaldev.spring" /!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --beans:beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"beans:property name="prefix" value="/WEB-INF/views/" /beans:property name="suffix" value=".jsp" //beans:bean/beans:beans
Hay tres configuraciones importantes.
annotation-drivenle dice a DispatcherServlet que busque clases de controlador usando@Controllerla anotación .context:component-scanle dice a DispatcherServlet dónde buscar las clases del controlador.InternalResourceViewResolverConfiguración de bean para especificar la ubicación de las páginas de visualización y el sufijo utilizado. Los métodos de la clase del controlador devuelven el nombre de la página de visualización y luego se agrega el sufijo para determinar la página de visualización que se utilizará para representar la respuesta.
Clase controladora Spring MVC
Tenemos una única clase de controlador para responder a dos URI: “/” para la página de inicio y “/user” para la página de usuario.
package com.journaldev.spring.controller;import java.text.DateFormat;import java.util.Date;import java.util.Locale;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.validation.annotation.Validated;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.journaldev.spring.model.User;@Controllerpublic class HomeController {/** * Simply selects the home view to render by returning its name. */@RequestMapping(value = "/", method = RequestMethod.GET)public String home(Locale locale, Model model) {System.out.println("Home Page Requested, locale = " + locale);Date date = new Date();DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);String formattedDate = dateFormat.format(date);model.addAttribute("serverTime", formattedDate);return "home";}@RequestMapping(value = "/user", method = RequestMethod.POST)public String user(@Validated User user, Model model) {System.out.println("User Page Requested");model.addAttribute("userName", user.getUserName());return "user";}}
Tenga en cuenta que, para simplificar, no he utilizado ningún marco de registro como log4j .
Clase de modelo Spring MVC
Tenemos una clase modelo simple con una sola variable y sus métodos getter-setter. Es una clase POJO simple.
package com.journaldev.spring.model;public class User {private String userName;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}}
Páginas de visualización de Spring MVC
Tenemos dos páginas de visualización como se define a continuación.home.jsp
%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c"%%@ page session="false"%htmlheadtitleHome/title/headbodyh1Hello world!/h1PThe time on the server is ${serverTime}./pform action="user" method="post"input type="text" name="userName"br inputtype="submit" value="Login"/form/body/html
user.jsp
%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"htmlheadmeta http-equiv="Content-Type" content="text/html; charset=UTF-8"titleUser Home Page/title/headbodyh3Hi ${userName}/h3/body/html
Tenga en cuenta que Spring MVC se encarga de asignar las variables de formulario a las variables de clase del modelo, por eso tenemos el mismo nombre de variable en ambos lugares. Eso es todo, nuestro proyecto de ejemplo Spring MVC está listo para implementarse y probarse.
Implementación del proyecto Eclipse de Spring MVC
Podemos utilizar la opción de exportación de Eclipse como archivo WAR para implementarlo directamente en cualquier directorio de aplicaciones web del servidor Tomcat en ejecución. Sin embargo, también puede utilizar la línea de comandos para compilar el proyecto y luego copiarlo en su directorio de implementación de contenedor de servlets favorito.
Ejemplo de prueba de Spring MVC
Una vez que se implementa el proyecto Spring MVC, podemos acceder a la página de inicio en https://localhost:8080/spring-mvc-example/. Cambie el puerto de Tomcat y la raíz del contexto según corresponda. Eso es todo para el ejemplo de Spring MVC. He intentado mantenerlo lo más simple posible. Pero aún así, si enfrenta algún problema, infórmeme a través de los comentarios e intentaré ayudarlo. Puede descargar el proyecto de ejemplo final de Spring MVC desde el siguiente enlace.
Descargar proyecto de ejemplo Spring MVC
Referencias: Página oficial