Spring Boot 2系列教程4 - SpringMVC

先说说什么是MVC

MVC(Model, View, Controller) 是模型(model)-视图(view)-控制器(controller)的缩写.

模型(model): 通俗的讲就是数据建立的模型. 可以看做是一组数据集合.

视图(View): 页面响应的内容.

控制器(Controller): 主要控制视图和模型做最后的处理的一层.

Spring Boot 2系列教程4 - SpringMVC

MVC的出现更好的避免原先代码和视图否揉在一起的群魔乱舞的时代.

描述一下这个场景, 当有用户访问我们的URL的时候, 需要做的就是找到该URL对应的Controller方法. 并把Controller方法里面做的处理, 返回给用户.

这里有个关键点, 就是我们怎么找到Controller方法, 并怎么返回给请求的对象. 这个时候, 我们就需要了解一下SpringMVC框架. 其实它和其他的框架大同小异, SpringMVC属于请求驱动. 就是说: 所有的设计都围绕一个中央的Servlet来处理. 它在负责把所有的请求分发到对应的控制器. 相当于找了一个大管家. 你有什么要求, 就向它提. 这个时候, 他就负责给你找对应的控制器. 该控制器的名字叫做: DispatcherServlet. 来自: org.springframework.web.servlet.DispatcherServlet 担任重要职责. 分析代码可以看出来. 该类, 就是一个前端控制器模式.

DispatcherServlet: 看父类王上翻, 发现它其实就是一个Servlet(基类为HTTPServlet). 所以, 如果想要使用它, 你要做的就是配置web.xml 或者是Servlet3.x之后的Java Config 方式配置. 如果不使用SpringBoot 你会看到如下的代码. 或者是与此类似的.

Spring Boot 2系列教程4 - SpringMVC

编程的方式(JavaConfig)

Spring Boot 2系列教程4 - SpringMVC

那在SpringBoot中, 如何加载的呢? 这里就需要知道一个问题, 就是SpringBoot的所有自动化配置,

该包为: spring-boot-autoconfigure-2.1.0.RELEASE.jar 并以*AutoConfiguration.java命名.

所以找到包: org.springframework.boot.autoconfigure.web.servlet; 找到对应的DispatcherServletAutoConfiguration

Spring Boot 2系列教程4 - SpringMVC

具体的加载代码:

Spring Boot 2系列教程4 - SpringMVC

SpringBoot中web的依赖, 其实就是SpringMVC, 它并没有新创建什么, 只是在原来的基础上. 做了自动化. 什么是自动化呢? 就是把一系列有规则的动作, 按照规则运行并使用.

Spring Web MVC

其实大家都是叫做SpringMVC, 但是官方文档全程为Spring Web MVC. 就相当于JavaScript 叫做js一样. 接下来我们引用SpringMVC框架.

加入对应的依赖. 这一个依赖就是完成了SpringMVC的依赖. 加入该依赖不需要写一行配置文件, 就可以启动一个Web项目.

Spring Boot 2系列教程4 - SpringMVC

这里我们需要引用一个模板引擎. thymeleaf. 也是Spring官方推荐使用的.

Spring Boot 2系列教程4 - SpringMVC

从Spring Boot 2.x开始, 已经是基于thymeleaf的3.x版本了. 如下:

Spring Boot 2系列教程4 - SpringMVC

我们先看一下我们现在的项目架构图.

Spring Boot 2系列教程4 - SpringMVC

目录结构说明:

src/main/java 代表存放的是java源代码

src/main/resources 代表是存放的配置文件, 或者是mybatis, hibernate的xml配置文件

src/test/java 代表存放的是Java的测试代码

src/test/resources 代表存放测试代码的配置文件

默认情况下 src/main/resources 是没有目录和文件的, 这个时候, 我们创建2个目录, 一个叫做 static 一个叫做templates

static: springboot的默认静态资源目录. 可以在配置文件中修改.

templates: springboot的默认模版文件目录. 可以在配置文件中修改.

新调整目录如下:

Spring Boot 2系列教程4 - SpringMVC

接下来我们编写页面文件. 在templates 中加入 index.html

Spring Boot 2系列教程4 - SpringMVC

编写Controller

Spring Boot 2系列教程4 - SpringMVC

这个时候, 我们访问http://localhost:8080 或者 http://localhost:8080/index.html 就可以看到下面的效果.

Spring Boot 2系列教程4 - SpringMVC

我们简单的描述一下这个流程. 我们在访问该路径时, 找到对应的Controller: @RequestMapping(value= {"", "index.html"})

根据该Controller返回了一个页面. index, 该目录的查找方式为: src/main/resources/templates/ + "index" + .html

我们如何引用一个js和css呢? 先在static 目录中常见2个目录 css 和 js 分别在目录里面创建 index.css 和 index.js

目录结构如下:

Spring Boot 2系列教程4 - SpringMVC

这个时候, 我们在index.js里面打开一个弹出框 在index.css中加入北京颜色为蓝色.

Spring Boot 2系列教程4 - SpringMVC

然后, 我们在html中加入该引用.

Spring Boot 2系列教程4 - SpringMVC

这里的路径是从 src/main/resources/static/ 开始寻找. 路径为:

  • src/main/resources/static/css/index.css
  • src/main/resources/static/js/index.js

页面的效果为:

Spring Boot 2系列教程4 - SpringMVC

接下来我们就根据实际项目开发中的案例. 进行创建目录.

Spring Boot 2系列教程4 - SpringMVC

然后我们从顶至下的说明. 先看HomeController.java

Spring Boot 2系列教程4 - SpringMVC

@Controller: 代表着这个是SpringMVC的一个控制器, SpringBoot会自动扫描该类.

Spring Boot 2系列教程4 - SpringMVC

可以看其源码得知这是一个类注解. 并且使用了Spring IoC @Component代表是一个组件.

@RequestMapping: 代表具体的请求URI地址.

Spring Boot 2系列教程4 - SpringMVC

这是一个类和方法注解, 所以, 可以作用在类上也可以注解到方法上.

该注解主要有一下几个方法:

Spring Boot 2系列教程4 - SpringMVC

name: 指定一个名称给映射.

path: 在使用@RequestMapping("uri") 的情况下, 等同于path="uri"

Spring Boot 2系列教程4 - SpringMVC

value: 请求的URI路径 可以是一组数据也可以是匹配符, 或者正则表达式

Spring Boot 2系列教程4 - SpringMVC

method: 请求的方法. 类型是: RequestMethod[] 这是一个枚举数组.

Spring Boot 2系列教程4 - SpringMVC

params: 请求的参数

headers: Http的请求头 例如: headers = "content-type=text/*"

consumes: 允许的媒体类型 例如: consumes = "text/plain" 或者 consumes = {"text/plain", "application/*"} 请求的类型必须匹配才能访问.

produces: 响应的媒体类型, 例如: produces = "text/plain" produces = {"text/plain", "application/*"}, 相当于HTTP的Accept字段.

继续完善代码

Spring Boot 2系列教程4 - SpringMVC

使用@Autowired代码把HomeService接口注入到当前控制器中. 用来操作HomeService.

Model 是向视图传递数据用的对象. 常用的方法就是一个Key Value键值对.

Service接口:

Spring Boot 2系列教程4 - SpringMVC

实现类:

Spring Boot 2系列教程4 - SpringMVC

这里不在完善dao的类, 后续加入数据库在详细的演示该操作.

页面代码:

Spring Boot 2系列教程4 - SpringMVC

然后访问结果为:

Spring Boot 2系列教程4 - SpringMVC

具体的更加详细的内容可以参考:

https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/web.html

github地址送上:

https://github.com/xymiao/book-springboot2jingsui


分享到:


相關文章: