这篇文章将深入探讨Spring框架的一部分——Spring Web MVC的强大功能及其内部工作原理。
项目安装
在本文中,我们将使用最新、最好的Spring Framework 5。我们将重点介绍Spring的经典Web堆栈,该堆栈从框架的第一个版本中就崭露头角,并且现在依然是用Spring构建Web应用程序的主要方式。
对于初学者来说,为了安装测试项目,最好使用Spring Boot和一些初学者依赖项;还需要定义parent:
<parent><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-parentartifactId><version>2.0.0.M5version><relativePath/>parent><dependencies><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-webartifactId>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-thymeleafartifactId>dependency>dependencies>
请注意,为了使用Spring 5,我们还需要使用Spring Boot 2.x。截止到撰写本文之时,这依然是里程碑发布版,可在Spring Milestone Repository中找到。让我们把这个存储库添加到你的Maven项目中:
<repositories><repository><id>spring-milestonesid><name>Spring Milestonesname><url>https://repo.spring.io/milestoneurl><snapshots><enabled>falseenabled>snapshots>repository>repositories>
你可以在Maven Central上查看Spring Boot的当前版本。
示例项目
为了理解Spring Web MVC是如何工作的,我们将通过一个登录页面实现一个简单的应用程序。为了显示登录页面,我们需要为上下文根创建带有GET映射的@Controller注解类InternalController。
hello()方法是无参数的。它返回一个由Spring MVC解释为视图名称的String(在示例中是login.html模板):
import org.springframework.web.bind.annotation.GetMapping;@GetMapping("/")public String hello() {
return "login";
}
为了处理用户登录,需要创建另一个用登录数据处理POST请求的方法。然后根据结果将用户重定向到成功或失败的页面。
请注意,login()方法接收域对象作为参数并返回ModelAndView对象:
import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.servlet.ModelAndView;@PostMapping("/login")public ModelAndView login(LoginData loginData) {
if (LOGIN.equals(loginData.getLogin())
&& PASSWORD.equals(loginData.getPassword())) {
return new ModelAndView("success",
Collections.singletonMap("login", loginData.getLogin()));
} else {
return new ModelAndView("failure",
Collections.singletonMap("login", loginData.getLogin()));
}
}
ModelAndView是两个不同对象的持有者:
Model——渲染页面数据的键值映射
View——填充模型数据的页面模板
连接这些是为了方便,这样控制器方法可以一次返回它们。
要渲染HTML页面,使用Thymeleaf作为视图模板引擎,该引擎具有可靠和开箱即用的与Spring的集成。
Servlet作为Java Web应用程序的基础
那么,当在浏览器中输入http:// localhost:8080/时,按Enter键,然后请求到达Web