SpringMVC

SpringMVC

对于SpringMVC的理解

MVC 是模型(Model)、视图(View)、控制器(Controller)的简写

MVC 是一种设计模式,Spring MVC 可以帮助我们进行更简洁的 Web 层的开发,Spring MVC 下我们一般把后端项目分为 Service 层(处理业务)、Dao 层(数据库操作)、Entity 层(实体类)、Controller 层(控制层,返回数据给前台页面)。

SpringMVC的核心组件以及工作原理

核心组件:

  • DispatcherServlet核心的中央处理器,负责接收请求、分发,并给予客户端响应。
  • HandlerMapping处理器映射器 ,根据 URL 去匹配查找能处理的 Handler ,并会将请求涉及到的拦截器和 Handler 一起封装。
  • HandlerAdapter处理器适配器 ,根据 HandlerMapping 找到的 Handler ,适配执行对应的 Handler
  • Handler请求处理器,处理实际请求的处理器。
  • ViewResolver视图解析器 ,根据 Handler 返回的逻辑视图 / 视图,解析并渲染真正的视图,并传递给 DispatcherServlet 响应客户端

流程说明

  1. 客户端(浏览器)发送请求, DispatcherServlet拦截请求。
  2. DispatcherServlet 根据请求信息调用 HandlerMappingHandlerMapping 根据 URL 去匹配查找能处理的 Handler(也就是我们平常说的 Controller 控制器) ,并会将请求涉及到的拦截器和 Handler 一起封装。
  3. DispatcherServlet 调用 HandlerAdapter适配器执行 Handler
  4. Handler 完成对用户请求的处理后,会返回一个 ModelAndView 对象给DispatcherServletModelAndView 顾名思义,包含了数据模型以及相应的视图的信息。Model 是返回的数据对象,View 是个逻辑上的 View
  5. ViewResolver 会根据逻辑 View 查找实际的 View
  6. DispaterServlet 把返回的 Model 传给 View(视图渲染)。
  7. View 返回给请求者(浏览器)

开后端分离开发:

  • 后端通常不再返回具体的视图,而是返回纯数据(通常是 JSON 格式),由前端负责渲染和展示。

  • View 的部分在前后端分离的场景下往往不需要设置,Spring MVC 的控制器方法只需要返回数据,不再返回 ModelAndView,而是直接返回数据,Spring 会自动将其转换为 JSON 格式。相应的,ViewResolver 也将不再被使用。

  • 使用 @RestController 注解代替传统的 @Controller 注解,这样所有方法默认会返回 JSON 格式的数据,而不是试图解析视图。

    如果你使用的是 @Controller,可以结合 @ResponseBody 注解来返回 JSON

统一异常处理

使用注解的方式统一异常处理,具体会使用到 @ControllerAdvice + @ExceptionHandler 这两个注解

@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {

    @ExceptionHandler(BaseException.class)
    public ResponseEntity<?> handleAppException(BaseException ex, HttpServletRequest request) {
      //......
    }

    @ExceptionHandler(value = ResourceNotFoundException.class)
    public ResponseEntity<ErrorReponse> handleResourceNotFoundException(ResourceNotFoundException ex, HttpServletRequest request) {
      //......
    }
}

这种异常处理方式下,会给所有或者指定的 Controller 织入异常处理的逻辑(AOP),当 Controller 中的方法抛出异常的时候,由被@ExceptionHandler 注解修饰的方法进行处理。

ExceptionHandlerMethodResolvergetMappedMethod 方法决定了异常具体被哪个被 @ExceptionHandler 注解修饰的方法处理异常。

getMappedMethod()会首先找到可以匹配处理异常的所有方法信息,然后对其进行从小到大的排序,最后取最小的那一个匹配的方法(即匹配度最高的那个)

相关推荐
不修×蝙蝠1 天前
SpringMVC(三)请求
spring·springmvc·请求·springmvc请求
mikey棒棒棒2 天前
SSM-SpringMVC
java·ssm·springmvc
不修×蝙蝠3 天前
SpringMVC(二)原理
spring·springmvc·原理·spring框架·配置maven
不修×蝙蝠3 天前
SpringMVC(一)配置
java·spring·ssm·springmvc·配置
不修×蝙蝠4 天前
SpringMVC(六)拦截器
spring·ssm·springmvc·拦截器·登录管理
Ttang235 天前
SpringMVC(1)——SpringMVC配置和基本原理
java·spring·springmvc
不修×蝙蝠5 天前
SpringMVC(五)实现文件上传
java·spring·springmvc·文件管理·文件上传·文件下载
zjw_rp9 天前
springMVC-请求响应
spring·springmvc·请求响应
雷神乐乐10 天前
SpringMVC学习(二)——RESTful API、拦截器、异常处理、数据类型转换
spring·springmvc