SpringBoot分层开发Web应用程序

SpringBoot分层开发Web应用程序

概述

首先介绍 Web 开发中最常用的分层开发的模式 MVC(Model View Controller);然后介绍了视图技术 Thymeleaf ,讲解了如何将 MVC 三者联系起来构建 Web 应用程序;如何用 Validator 实现数据验证。

应用程序分层开发模式 MVC

了解 MVC 模式

Spring Boot 开发 Web 应用程序主要使用 MVC 模式。MVC 是 Model(模型)、View(视图)、Controller(控制器)的简写。

  • Model
    • 是 Java 的实体 Bean ,代表存取数据的对象或 POJO(Plain Ordinary Java Objects,简单的 Java 对象),也可以带有逻辑。
    • 其作用是在内存中暂时存储数据,并在数据变化时更新控制器(如果要持久化,则需要把它写入数据库或磁盘文件中)。
  • View
    • 主要用来解析、处理、显示内容,并进行模板的渲染。
  • Controller
    • 主要用来处理视图中的响应
    • 它决定如何调用 Model 的实体 Bean、如何调用业务层的数据增加、删除、修改和查询等业务操作,以及如何将结果返回给视图进行渲染。
    • 建议在控制器中尽量不放业务逻辑代码。

这样分层的好处是:将应用程序的用户界面和业务逻辑分离,使得代码具备良好的可扩展性、复用性、可维护性和灵活性。

如果不想使用 MVC 开发模式也是可以的, MVC 只是一个非常合理的规范。

MVC 的关系如下:

1.MVC模式

用户通过浏览器访问 MVC 模型的页面时,并不是直接访问视图,而是访问 DispatcherServlet 处理映射和调用视图渲染,然后返回给用户的数据。

整个 Spring MVC 框架中, DispatcherServlet 处于核心位置,继承自 HttpServlet 。它负责协调和组织不同组件,以完成请求处理并返回响应工作。

整个 Spring MVC 工作流程如下:

  1. 客户端发出的请求由 Tomcat(服务器)接收,然后 Tomcat 将请求转交给 DispatcherServlet 处理。
  2. DispatcherServlet 匹配控制器中配置的映射路径,进行下一步处理。
  3. ViewResolver 将 ModelAndView 或 Exception 解析成 View 。然后 View 会调用 render() 方法,并根据 ModelAndView 中的数据渲染出页面。

在 MVC 开发模式中,容易混淆的还有 Model ,它往往被认为是业务逻辑层或 DAO 层。这种理解并不能说是错误的,但并不是严格意义上的 MVC 模式。

MVC 和三层架构的关系

三层架构:就是将整个应用程序划分为表现层(UI)、业务逻辑层(Service)、数据访问层(DAO/Repository)。

  • 表现层:用于展示界面。主要对用户的请求进行接收,以及进行数据的返回。它为客户端提供应用程序的访问接口(界面)。
  • 业务逻辑层:是三层架构的服务层,负责业务逻辑处理,主要是调用 DAO 层对数据进行增删改查等操作。
  • 数据访问层与数据库进行交互的持久层,被 Service 调用。

严格地说,MVC 是三层架构中的 UI 层。通过 MVC 把三层架构中的 UI 层又进行了分层。

由此可见,三层架构是基于业务逻辑或功能来划分的,而 MVC 是基于页面或功能来划分的。

使用视图技术 Thymeleaf

认识 Thymeleaf

Spring Boot 主要支持 Thymeleaf、Freemarker、Mustache、Groovy Templates等模板引擎。

Thymeleaf 语法并不会破坏文档的结构,所以 Thymeleaf 模板依然是有效的 HTML 文档。

模板还可以被用作工作原型,Thymeleaf 会在运行期内替换掉静态值。它的模板文件能直接在浏览器中正确打开并正确显示页面,而不需要启动整个 Web 应用程序。

为什么需要模板引擎:

  • Thymeleaf 解决了前端开发人员要和后端开发人员配置一样环境的尴尬和低效。
  • 它通过属性进行模板渲染,不需要引入不能被浏览器识别的新的标签。
  • 页面直接作为 HTML 文件,用浏览器打开页面即可看到最终的效果,可以降低前后端人员的沟通成本。

使用 Thymeleaf

  • 1.引入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  • 2.在模板文件中加入解析

在加入依赖后,还需要在 HTML 文件中加入 <html lang="en" xmlns:th="http://www.thymeleaf.org"> 命名空间。这样就能完成 Thymeleaf 的标签的渲染。

  • 3.配置视图解析器

Spring Boot 默认的页面映射路径(即模板文件存放的位置)为 classpath:/templates/*.html

静态文件路径为 classpath:/static/ ,其中可以存放CSS、JS等模板共用的静态文件。

application.properties 文件中,可以配置 Thymeleaf 模板解析器属性,如:

# 代表 Thymeleaf 模式
spring.thymeleaf.mode=HTML5
# 编码格式
spring.thymeleaf.encoding=UTF-8
# 文档类型
spring.thymeleaf.content-type=text/html
# 是否启动缓存;为了便于测试,在开发时需要关闭缓存
spring.thymeleaf.cache=false

Thymeleaf 检查 HTML 格式很严格。如果 HTML 格式不对,则会报错。如果想禁止这种严格的语法检查模式,则可以在 application.properties 配置文件中加入 spring.thymeleaf.mode=LEGACYHTML5 来解决。

在开发过程中,一般将模板缓存设置为关闭,否则,修改之后可能不会及时显示修改后的内容。

Thymeleaf示例:

7.thymeleaf示例

使用控制器

在 Spring MVC 中,控制器(Controller)负责处理由 DispatcherServlet 接收并分发过来的请求。它把用户请求的数据通过业务处理层封装成一个 Model ,然后再把该 Model 返回给对应的 View 进行展示。

Controller 无须继承特定的类或实现特定的接口。只需使用 @Controller@RestController 来标记一个控制器,然后用注解 @RequestMapping 定义URL请求和 Controller 方法之间的映射,这样 Controller 就能被外界访问到。它可以包含多个请求处理方法。

常用注解

  • @Controller

  • @RestController

  • @RequestMapping

  • @PathVariable

将 URL 映射到方法

将 URL(统一资源定位符)映射到方法,是通过注解 @RequestMapping 来处理的。

URL 映射其实就是用控制器定义访问的 URL 路径。用户通过输入路径来访问某个方法,如下图所示:

8.控制器处理URL映射

Spring Boot 还提供了更简洁的编写 URL 映射的方法,如 @GetMapping("/") 等价于 @RequestMapping(value="/", method=ReuqestMethod.Get)

  • @GetMapping :处理 GET 请求;
  • @PostMapping :处理 POST 请求;
  • @DeleteMapping :处理删除请求;
  • @PutMapping :处理修改请求。

处理 HTTP 请求的方法

RequestMapping 的 method 类型有 GET、HEAD、POST、PUT、PATCH、DELETE、OPTIONS、TRACE。可以通过这些 method 来处理前端用不同方法提交的数据。

GET:用 GET 方法可以获取资源。

DELETE:如果需要删除一个数据,根据 RESTful 风格则需要使用 DELETE 方法。

POST:如果需要添加对象,那一般使用 POST 方法传递一个 Model 对象。

PUT:如果对象更新,则用 PUT 方法发送请求。

PATCH:是对 PUT 方法的补充,用来对已知资源进行局部更新。

  • 例:更新 User 对象有 id、name、password、sex等属性。如果只需要修改 name 的值,则此时的更新操作可以用 PATCH 方法;使用 PUT 方法提交完整的 User 对象给后端进行修改。

OPTIONS:该方法用于获取当前URL。若请求成功,则会在HTTP头中包含一个名为"Allow"的头,其值是所支持的方法,如值为"GET,POST"。还允许客户端查看服务器的性能。如果遇到"500"错误,则OPTIONS不进行第二次请求。

TRACE:它显示服务器收到的请求,主要用于测试或诊断。

在方法中使用参数

  1. 获取路径中的值,在访问http://localhost/article/123,程序会自动将 URL 中的模板变量{id} 绑定到通过 @PathVariable 注解的同名参数上,即程序获取路径中123的值。

10.获取路径中的值

  1. 获取路径中的参数,对于路径中的参数获取,可以写入方法的形参中。
// 访问 http://localhost/user/?username=chen
public String addUser(String username)
  1. 通过 Bean 接收 HTTP 提交的对象
public String addUser(UserModel user)
  1. 用注解 @ModelAttribute 获取参数,用于从 Model、Form、或 URL请求参数中获取属性的值。
RequestMapping(value="/addUser", method=RequestMethod.POST)
public String addUser(@modelAttribute("user")UserModel user)
  1. 通过 HttpServletRequest 接收参数

11.通过HttpServletRequest接收参数

  1. @RequestParam 绑定入参
@RequestParam(value="username", required=false)
  1. @RequestBody 接收 JSON 数据

12.用RequestBody接收JSON数据

  1. 上传文件 MultipartFile

13.上传文件MultipartFile

理解模型

模型(Model)在 MVC 模式中是实体 Bean ,代表一个存取数据的对象或POJO。它可以带有逻辑,其作用是暂时存储数据(存在内存中),以便进行持久化(存放数据库或写入文件),以及在数据变化时更新控制器。

简单地理解是:Model 是数据库表对应的实体类。

验证数据

认识内置的验证器 hibernate-validator

Hibernate-validator 可实现对数据的验证,它是对 JSR(Java Specification Requests) 标准的实现。

在 Web 开发中,不需要额外为验证再导入其他依赖,只需要添加 Web 依赖即可。 Web 依赖还有如下子依赖:

  • spring-boot-starter
  • spring-web
  • spring-webmvc
  • hibernate-validator
  • spring-boot-starter-tomcat
  • spring-boot-starter-json

由此可见, Web 依赖集成了服务器环境(Tomcat)、JSON、MVC、Validator。在开发 Web 时,只需要关注业务逻辑即可。

Validator验证的常用注解

9.Validator验证的常用注解

总结

Spring Boot 开发 Web 应用程序主要使用MVC 模式

  • Model :是 Java 的实体 Bean ,代表存取数据的对象或 POJO。其作用是在内存中暂时存储数据,并在数据变化时更新控制器
  • View :主要用来解析、处理、显示内容,并进行模板的渲染。
  • Controller :主要用来处理视图中的响应。它决定如何调用 Model 的实体 Bean、如何调用业务层的数据增加、删除、修改和查询等业务操作,以及如何将结果返回给视图进行渲染。

分层的好处是:将应用程序的用户界面和业务逻辑分离,使得代码具备良好的可扩展性、复用性、可维护性和灵活性。

整个 Spring MVC 工作流程如下

  • 客户端发出的请求由 Tomcat 接收,然后 Tomcat 将请求转交给 DispatcherServlet 处理(它负责协调和组织不同组件,以完成请求处理并返回响应工作)。
  • DispatcherServlet 匹配 Controller(控制器) 中配置的映射路径,进行下一步处理,处理完成后返回结果 ModelAndView。
  • ViewResolver 将 ModelAndView 或 Exception 解析成 View 。然后 View 会调用 render() 方法,并根据 ModelAndView 中的数据渲染出页面

MVC 和三层架构的关系

  • 三层架构:就是将整个应用程序划分为表现层(UI)、业务逻辑层(Service)、数据访问层(DAO/Repository)。
    • 表现层:用于展示界面。主要对用户的请求进行接收,以及进行数据的返回。它为客户端提供应用程序的访问接口(界面)。
    • 业务逻辑层:是三层架构的服务层,负责业务逻辑处理,主要是调用 DAO 层对数据进行增删改查等操作。
    • 数据访问层:与数据库进行交互的持久层,被 Service 调用。
  • 严格地说,MVC 是三层架构中的 UI 层。通过 MVC 把三层架构中的 UI 层又进行了分层。

由此可见,三层架构是基于业务逻辑或功能来划分的,而 MVC 是基于页面或功能来划分的

使用 Thymeleaf 模板引擎:

  • Thymeleaf 解决了前端开发人员要和后端开发人员配置一样环境的尴尬和低效
  • 它通过属性进行模板渲染,不需要引入不能被浏览器识别的新的标签。
  • 页面直接作为 HTML 文件,用浏览器打开页面即可看到最终的效果,可以降低前后端人员的沟通成本。

使用控制器:

  • 在 Spring MVC 中,控制器(Controller)负责处理由 DispatcherServlet 接收并分发过来的请求。它把用户请求的数据通过业务处理层封装成一个 Model ,然后再把该 Model 返回给对应的 View 进行展示。
  • 将 URL 映射到方法,是通过注解 @RequestMapping 来处理的。URL 映射其实就是用控制器定义访问的 URL 路径。
  • 处理 HTTP 请求的方法,RequestMapping 的 method 类型有 GET、HEAD、POST、PUT、PATCH、DELETE、OPTIONS、TRACE。可以通过这些 method 来处理前端用不同方法提交的数据。
  • 在方法中使用参数,使用多种方法获取请求中的参数。

理解模型:

  • 模型(Model)在 MVC 模式中是实体 Bean ,代表一个存取数据的对象或POJO。它可以带有逻辑,其作用是暂时存储数据(存在内存中),以便进行持久化(存放数据库或写入文件),以及在数据变化时更新控制器。

验证数据:

  • 使用内置的验证器 hibernate-validator 可实现对数据的验证

公众号

知行chen

参考

《Spring Boot 实战派》 龙中华

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值