• 【Java八股文总结】之Spring MVC


    Spring MVC

    1、Spring MVC介绍

    Spring MVC和Servlet技术类似,均属于 web层开发技术(表现层框架)
    Spring MVC是一种基于Java实现MVC模型的轻量化Web框架,相较于Servlet,使用更加简单、灵活性更强。

    2、Spring MVC的核心组件

    • DispatcherServlet前置控制器,是整个流程控制的核心,控制其他组件的执行,进行统一调度,降低组件之间的耦合性,相当于总指挥。
    • Handler处理器,完成具体的业务逻辑,相当于 Servlet 或 Action。
    • HandlerMapping:DispatcherServlet接收到请求之后,通过HandlerMapping将不同的请求映射到不同的Handler。
    • HandlerInterceptor处理器拦截器,是一个接口,如果需要完成一些拦截处理,可以实现该接口。
    • HandlerExecutionChain:处理器执行链,包括两部分内容:Handler 和 HandlerInterceptor(系统会有一个默认的 HandlerInterceptor,如果需要额外设置拦截,可以添加拦截器)。
    • HandlerAdapter处理器适配器,Handler 执行业务方法之前,需要进行一系列的操作,包括表单数据的验证、数据类型的转换、将表单数据封装到 JavaBean 等,这些操作都是由 HandlerApater 来完成,开发者只需将注意力集中业务逻辑的处理上,DispatcherServlet 通过 HandlerAdapter 执行不同的 Handler。
    • ModelAndView:装载了模型数据和视图信息,作为 Handler 的处理结果,返回给 DispatcherServlet。
    • ViewResolver视图解析器,DispatcheServlet 通过它将逻辑视图解析为物理视图,最终将渲染结果响应给客户端。

    3、Spring MVC工作流程

    在这里插入图片描述

    1. 客户端向服务端发送一次请求,这个请求会先到前端控制器DispatcherServlet(也叫中央控制器)。
    2. DispatcherServlet接收到请求后会调用HandlerMapping处理器映射器。由此得知,该请求该由哪个Controller来处理(并未调用Controller,只是得知)。
    3. DispatcherServlet调用HandlerAdapter处理器适配器,告诉处理器适配器应该要去执行哪个Controller。
    4. HandlerAdapter处理器适配器去执行Controller并得到 ModelAndView(数据和视图),并层层返回给DispatcherServlet。
    5. DispatcherServlet将ModelAndView交给ViewReslover视图解析器解析,然后返回真正的视图。
    6. DispatcherServlet将模型数据填充到视图中。
    7. DispatcherServlet将结果响应给客户端。

    4、Spring MVC Restful风格的接口的流程?

    Restful接口,响应格式是json,这就用到了一个常用注解:@ResponseBody 。加入了这个注解后,整体的流程上和使用 ModelAndView 大体上相同,但是细节上有一些不同:
    在这里插入图片描述

    1. 客户端向服务端发送一次请求,这个请求会先到前端控制器 DispatcherServlet 。
    2. DispatcherServlet 接收到请求后会调用 HandlerMapping 处理器映射器。由此得知,该请求该由哪个 Controller 来处理。
    3. DispatcherServlet 调用 HandlerAdapter 处理器适配器,告诉处理器适配器应该要去执行哪个 Controller。
    4. Controller被封装成了ServletInvocableHandlerMethod,HandlerAdapter处理器适配器去执行invokeAndHandle方法,完成对 Controller的请求处理
    5. HandlerAdapter执行完对Controller的请求,会调用 HandlerMethodReturnValueHandler 去处理返回值,主要的过程:
      ①调用RequestResponseBodyMethodProcessor,创建 ServletServerHttpResponse(Spring 对原生 ServerHttpResponse 的 封装)实例。
      ②使用 HttpMessageConverter 的 write 方法,将返回值写入 ServletServerHttpResponse 的 OutputStream 输出流中。
      ③在写入的过程中,会使用 JsonGenerator(默认使用 Jackson 框架)对 返回值进行 Json 序列化。
    6. 执行完请求后,返回的ModealAndView为null,ServletServerHttpResponse里也已经写入了响应,所以不用关心View的处理。

    5、Spring MVC请求参数的种类

    在这里插入图片描述
    补充:

    1. 请求参数(传递json数据)

    json数组、json对象(POJO)、json数组(POJO)

    2. 日期类型参数传递

    日期类型数据基于不同系统格式也不尽相同,接收形参时,根据不同的日期格式设置不同的接收方式。

    6、Spring MVC开发中用到的工具

    PostMan(可以用来进行接口的测试)

    7、Spring MVC中的异常处理器

    出现异常现象的常见位置与常见诱因如下:框架内部抛出的异常(因使用不合规导致)、数据层抛出的异常(因外部服务器故障导致,如服务器访问超时)、业务层抛出的异常(因业务逻辑书写错误导致,如遍历业务书写操作,导致索引异常等)、表现层抛出的异常(因数据收集、校验等规则导致,如不匹配的数据类型间导致异常)、工具类抛出的异常(因工具类书写不严谨不够健壮导致,如必要释放的连接长期未释放等)
    解决思路:AOP思想(避免再每个方法中单独书写)。异常处理器,集中统一的处理项目中出现的异常。

    8、拦截器

    拦截器(Interceptor)是一种动态拦截方法调用的机制。主要在指定的方法调用前后执行预先设定后的的代码,阻止原始方法的执行。

    Q:拦截器与过滤器区别
    • 归属不同:过滤器属于Servlet技术;拦截器属于SpringMVC技术。
    • 拦截内容不同:过滤器对所有访问进行增强;拦截器仅针对SpringMVC的访问进行增强。
    Q:多拦截器的执行顺序

    在这里插入图片描述
    拦截器链的运行顺序:preHandle(与配置顺序相同,必定运行)、postHandle(与配置顺序相反,可能不运行)、afterCompletion(与配置顺序相反,可能不运行)。

    9、Spring MVC注解

    在这里插入图片描述

    Q:@RequestBody、@RequestParam以及@PathVariable区别
    • 区别
      ① @RequestParam用于接收url地址传参或表单传参;
      ② @RequestBody用于接收json数据(application/json);
      ③ @PathVariable用于接收路径参数,使用{参数名称}描述路径参数应用。
    • 应用
      ① 后期开发中,发送请求参数超过1个时,以发送json格式数据为主,@RequestBody应用较广;
      ② 如果发送非json格式数据,选用@RequestParam接收请求参数;
      ③ 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值。
  • 相关阅读:
    携创教育:速速收藏!2022成人高考大纲来了
    机器学习基础(三)监督学习的进阶探索
    LeetCode 面试题 05.03. 翻转数位
    OpenXlab应用部署踩坑记录
    Python循环写文件结尾不带换行
    【Delphi】IOS 15 UDP 广播消息(局域网)
    存在重复元素 II[简单]
    简单说说ConcurrentHashMap的结构和实现
    k8s 读书笔记 - 详解 Pod 调度(Ⅱ卷)
    Redis-主从复制、Sentinel、Cluster集群【随笔四】
  • 原文地址:https://blog.csdn.net/qq_46111316/article/details/127940943