乐趣区

关于spring-mvc:6-SpringBoot工程中Spring-MVC模块的应用

一. 背景剖析

当我的项目做的越来越来大时, 我的项目中业务就会变得越来越简单, 如果咱们只应用一个对象去解决
所有的业务, 这个对象的复杂度就会更高并且难以保护, 生存中和理论我的项目中对相似问题的解
决计划往往 ” 分而治之 ” 的思维. 来升高业务复杂度, 进步其可维护性. 那当初的问题的是如何分,
依照什么规定去分, 这就须要有肯定的设计, 于是 MVC 设计思维诞生.

二.MVC 是什么?

MVC 是一种软件架构设计思维, 基于 MVC 架构将咱们的应用软件进行分层设计和实现, 例如能够分为视图层(View), 管制层(Controller), 模型层(Model), 通过这样的分层设计让咱们程序具备更好的灵活性和可可扩展性. 因为这样能够将一个简单应用程序进行简化, 实现各司其职, 各尽所能. 比拟适宜一个大型利用的开发。

1)是一种分层架构设计思维,也是一种套路工设计模式。
2)是 Model,View,Controller 单词的缩写。
Model(业务逻辑对象,业务层)
View(显示逻辑对象,体现层)
Controller(管制逻辑对象,管制层)

程序中的 MVC? (Web 利用)

1. 传统的 web 利用?
企业中业务零碎 ->CRM,BOSS,ERP,EBanking,…

2. 互联网利用?
领取零碎, 网约车,…

三.Spring 框架中 Web 模块中的 MVC 设计

Spring MVC 是 MVC 设计思维在 Spring 框架中的一种实现,基于这样的思维 spring 框架设计了一些相干对象,用于更好的基于 MVC 架构解决申请和响应,其繁难架构如图所示:

其外围组件有:

1.DispathcherServlet(外围控制器,前端控制器,Controller)

是客户端所有申请解决的入口, 负责申请转发。

2.RequestMapping(申请映射)

负责存储申请 url 到后端 handler 对象之间的映射。

3.Handler(申请处理器)

用于解决 DispatcherServlet 对象转发过去的申请数据。

4.ModelAndView(业务数据和视图信息的对象)

用于封装业务数据和视图信息的对象

5.ViewResolver(视图解析器,View)

负责解决所有 Handler 对象响应后果中。

四.SpringBoot 工程中 Web MVC 疾速入门实现

筹备工作

第一步:创立我的项目 module,根本信息如图所示:

第二步:增加我的项目依赖(能够在 module 创立时,也能够创立后),代码如下:

Spring Web 依赖(提供了 spring mvc 反对并且会嵌入一个 tomcat)

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Thymeleaf 依赖(提供了以 html 作为页面模板进行解析和操作的相干对象)

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

第三步:启动我的项目检测控制台启动状态,是否运行胜利

static 目录剖析及利用

static 目录为 springboot 工程创立时增加了 web 依赖当前主动创立的目录,此目录中能够存储 html、css、js、image,这些资源能够在启动服务器当前,间接在浏览器进行拜访。

例如:

第一步:在 static 目录下创立一个 index.html 页面,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>The static directory index.html page</h1>
</body>
</html>

第二步:启动服务器并间接进行拜访测试, 如图所示

templates 目录剖析及利用

templates 目录为 springboot 工程创立时增加了 thymeleaf 依赖当前主动创立的目录,此目录中要存储一些 html 模板,这个模板页面不能间接通过浏览器 url 进行拜访,须要基于后端控制器,在办法中定义页面响应,例如:

第一步:定义 TemplateController 及办法,代码如下:

package com.cy.pj.health.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TemplateController {@RequestMapping("doTemplate")
      public String doTemplateUI(){return "default";}
}

第二步:在 templates 目录中定义模板页面 default.html,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>The template directory default page</h1>
</body>
</html>

其中, 如果 default.html 要在放在 templates 子目录中, 则还须要在配置文件中配置 thymeleaf 的前缀, 例如:

# 配置 thymeleaf 前缀、后缀
spring.thymeleaf.prefix=classpath:/templates/modules/
# spring.thymeleaf.suffix=.html  thymeleaf 默认是.html

第三步:启动服务进行拜访测试,如图所示:

FAQ?

1. 说说 spring web 模块申请的处理过程?

1)基于域名获取 ip 地址 (例如:127.0.0.1)
2) 基于 ip 地址找到网络中计算机 (ip 地址是网络中计算机的惟一标识)
3) 基于端口找到 tomcat 服务 (port 是计算机中利用的惟一标识)
4)tomcat 服务会基于 thread 并借助 io 读取网络 http 协定中申请数据
5)tomcat 外部会创立申请(request) 和响应 (response) 对象,用于封装申请和响应信息
6)tomcat 会调用 Filter 对象对 request 数据进行过滤。
7)Filter 对 request 过滤当前,会将申请交给 DispatcherServlet 进行解决?
8)DispatcherServlet 读取申请中的 url,并基于 url 从 requestMapping 中找到对应的 handler 以及办法。
9)DispatcherServlet 基于反射技术调用 handler 办法。
10)DispatcherServlet 会将 handler 办法返回的 view 等相干信息进行封装,而后交给视图解析器进行解析。
11)ViewResolver 视图解析器对为 view name 增加前缀,后缀,并将 model 中数据填充到 view 中。
12)DispatcherServlet 将视图解析器解析的后果封装到 response 对象,并将其响应到客户端。

2.templates 目录存储什么文件

html 模板文件

3.templates 目录的 html 页面能够在浏览器间接拜访吗?

不能够

4.static 目录下个别能够放什么资源?

html/css/js/images

5.templates 目录和 static 目录下寄存的 html 文件有什么不同吗?

1)static 目录下的 html 能够间接在浏览器拜访但不能被 spring 中视图解析器进行解析
2)templates 目录的 html 页面不能够在浏览器间接拜访但能够被 spring 的视图解析器进行解析,从而为 html 赋予更多的能力(例如 thymeleaf 表达式, 分支语句,循环语句,…)

6.thymeleaf 是什么?

是一个以 html 作为模板的模板引擎,此引擎为 html 元素增加额定属性并进行解析,而后对其进行赋能。springboot 工程中对 thymeleaf 做了默认的反对与配置

7.springboot 工程中 thymeleaf 默认的前缀和后缀配置别离是什么?

1)前缀:spring.thymeleaf.prefix=classpath:/templates/
2)后缀:.html

8.springboot 工程中 thymeleaf 的前缀能够本人指定吗?

(能够,例如 spring.thymeleaf.prefix=classpath:/templates/)

9.SpringBoot 工程中的 static 和 templates 目录中的 html,默认对其内容批改当前,不重启服务,而后刷新拜访地址,能够看到批改的内容吗?

不能够,如果心愿看到,咱们须要批改 idea 和 springboot 的配置文件

1)如果是 static 目录, 则须要让我的项目反对主动编译 (build) 和运行时编译 (compiler.automake.allow.when.app.running)。
2) 如果是 templates 目录,则需在以上两个步骤的根底上,增加一个缓存配置(spring.thymeleaf.cache=false)。

退出移动版