Welkom bij het Spring MVC Voorbeeld. Enige tijd geleden in de Spring MVC Zelfstudie, legde ik uit hoe je een Spring MVC-toepassing kunt maken met behulp van Spring Tool Suite. Maar vandaag zal ik een eenvoudige hello world Spring MVC-toepassing maken met behulp van maven en Eclipse.
Spring MVC Voorbeeld
Spring MVC is gebaseerd op de Model-View-Controller-architectuur. Onderstaande afbeelding toont de Spring MVC-architectuur op een hoog niveau.
DispatcherServlet
is de front-controllerklasse om alle verzoeken te ontvangen en te starten met verwerken. We moeten het configureren in het web.xml-bestand. Het heeft als taak om het verzoek door te sturen naar de juiste controllerklasse en de reactie terug te sturen wanneer de weergavepagina’s de reactiepagina hebben gerenderd. HomeController.java
zal de enkele controllerklasse zijn in ons voorbeeld van een Spring MVC-toepassing. home.jsp
, user.jsp
zijn de weergavepagina’s in ons voorbeeld van een Spring MVC-hallo wereldtoepassing. User.java
zal de enige modelklasse zijn die we zullen hebben in onze webtoepassing van het voorbeeld van Spring MVC.
Voorbeeld van Spring MVC Hello World Eclipse-project
Onderstaande afbeelding toont ons voorbeeldproject van Spring MVC in Eclipse. Laten we beginnen en ons project helemaal opnieuw maken.
Spring MVC Voorbeeld Eclipse Project Setup
Aangezien het een webtoepassing is en we Maven willen gebruiken voor het beheer van afhankelijkheden, moeten we eerst een dynamische webtoepassing maken en deze vervolgens converteren naar een Maven-project. Onderstaande afbeeldingen laten zien hoe je dit moet doen en hoe je de structuur van ons project skelet gereed kunt maken. Klik met de rechtermuisknop op het projectverkenner-venster en klik op “Nieuw -> Dynamisch Web Project”, zoals weergegeven in onderstaande afbeelding. Geef de naam op als “spring-mvc-example” in het volgende pop-upvenster, de rest van de zaken hoeven niet te worden gewijzigd.
Op de volgende pagina geef je de bronmap op als “src/main/java”. Mogelijk moet je “src” uit de lijst verwijderen voordat je dit toevoegt.
Vervolgens is er de webmodulepagina, geef de context-root van de toepassing op als “spring-mvc-example” en zorg ervoor dat de optie “Genereer web.xml-implementatiebeschrijving” is aangevinkt.
Klik op Voltooien en je hebt een nieuw Dynamisch Web Project in je Eclipse-projectverkenner.
Het converteren van een Dynamisch Webproject naar een Maven-project
We willen Maven gebruiken om onze Spring MVC-afhankelijkheden eenvoudig te beheren. Laten we dus ons webproject converteren naar Maven. Klik met de rechtermuisknop op het project en selecteer “Configureren -> Converteren naar Maven-project”. Vervolgens verstrekken we de configuraties in het pom.xml-bestand zoals hieronder weergegeven.
De skeletcode van ons Maven-webapplicatieproject is gereed. Nu kunnen we wijzigingen aanbrengen en ons voorbeeld van een “Spring MVC Hello World”-toepassing maken.
Spring MVC-afhankelijkheden toevoegen aan pom.xml
We moeten spring-web en spring-webmvc-afhankelijkheden toevoegen aan het pom.xml-bestand, evenals servlet-api, jsp-api en jstl-afhankelijkheden. Ons uiteindelijke pom.xml-bestand ziet er als volgt uit.
<project xmlns="https://maven.apache.org/POM/4.0.0" 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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.journaldev.spring.mvc</groupId>
<artifactId>spring-mvc-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Spring MVC Example</name>
<description>Spring MVC Hello World Example</description>
<!-- Add Spring Web and MVC dependencies -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName> <!-- added to remove Version from WAR file -->
</build>
</project>
Let op de configuratie van finalName
in het buildproces, zodat onze WAR-bestandsnaam geen versiegegevens bevat. Wanneer het project wordt gebouwd met Eclipse, zul je merken dat alle jars verschijnen in de maven-afhankelijkheden sectie.
Spring MVC DispatcherServlet als Front Controller
We moeten het Spring MVC-framework toevoegen aan onze webtoepassing, hiervoor moeten we DispatcherServlet
configureren in web.xml zoals hieronder getoond.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://java.sun.com/xml/ns/javaee" xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>spring-mvc-example</display-name>
<!-- Add Spring MVC DispatcherServlet as front controller -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
contextConfigLocation
init-param wordt gebruikt om de locatie van het voorjaarsbean-configuratiebestand op te geven.
Voorbeeld van Spring MVC Bean-configuratiebestand
De volgende stap is om het Spring bean-configuratiebestand spring-servlet.xml
zoals hieronder getoond, te maken.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="https://www.springframework.org/schema/mvc"
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.xsd
https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
https://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:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
</beans:beans>
Er zijn drie belangrijke configuraties.
annotation-driven
vertelt DispatcherServlet om Controller-klassen te zoeken met behulp van@Controller
annotatie.context:component-scan
vertelt DispatcherServlet waar het moet zoeken naar controllerklassen.InternalResourceViewResolver
bonenconfiguratie om de locatie van de weergavepagina’s en het achtervoegsel te specificeren dat wordt gebruikt. Methoden van de controllerklasse retourneren de naam van de weergavepagina en vervolgens wordt het achtervoegsel toegevoegd om de weergavepagina te bepalen die wordt gebruikt voor het renderen van de respons.
Spring MVC Controller-klasse
We hebben een enkele controllerklasse om te reageren op twee URIs – “/” voor de startpagina en “/gebruiker” voor de gebruikerspagina.
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;
@Controller
public 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";
}
}
Merk op dat ik voor eenvoud geen logboekregistratieraamwerk zoals log4j heb gebruikt.
Spring MVC Modelklasse
We hebben een eenvoudige modelklasse met een enkele variabele en de getter-setter-methoden. Het is een eenvoudige POJO-klasse.
package com.journaldev.spring.model;
public class User {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
Spring MVC-weergavepagina’s
We hebben twee weergavepagina’s zoals hieronder gedefinieerd. 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"%>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Hello world!</h1>
<P>The time on the server is ${serverTime}.</p>
<form action="user" method="post">
<input type="text" name="userName"><br> <input
type="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">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>User Home Page</title>
</head>
<body>
<h3>Hi ${userName}</h3>
</body>
</html>
Merk op dat Spring MVC zorgt voor het koppelen van formuliervariabelen aan variabelen in het modelclass, daarom hebben we dezelfde variabelenaam op beide plaatsen. Dat is het, ons Spring MVC-voorbeeldproject is klaar om te worden ingezet en getest.
Implementatie van Spring MVC Eclipse-project
We kunnen de optie “Exporteren als WAR-bestand” van Eclipse gebruiken om het rechtstreeks naar de webapps-map van een draaiende Tomcat-server te implementeren. U kunt echter ook de opdrachtregel gebruiken om het project te bouwen en het vervolgens naar uw favoriete implementatiemap voor servletcontainers te kopiëren.
Test voorbeeld Spring MVC
Zodra het Spring MVC-project is geïmplementeerd, kunnen we de startpagina openen op https://localhost:8080/spring-mvc-voorbeeld/
. Pas de Tomcat-poort en de context-root dienovereenkomstig aan.
Dat is alles voor het Spring MVC-voorbeeld, ik heb geprobeerd het zo eenvoudig mogelijk te houden. Maar als je toch problemen tegenkomt, laat het me dan weten via opmerkingen en ik zal proberen je te helpen. Je kunt het definitieve Spring MVC-voorbeeldproject downloaden vanaf onderstaande link.
Download Spring MVC-voorbeeldproject
Referenties: Officiële Pagina
Source:
https://www.digitalocean.com/community/tutorials/spring-mvc-example