【Java八股文总结】之Spring MVC

news2024/12/23 1:05:23

文章目录

  • Spring MVC
      • 1、Spring MVC介绍
      • 2、Spring MVC的核心组件
      • 3、Spring MVC工作流程
      • 4、Spring MVC Restful风格的接口的流程?
      • 5、Spring MVC请求参数的种类
        • 1. 请求参数(传递json数据)
        • 2. 日期类型参数传递
      • 6、Spring MVC开发中用到的工具
      • 7、Spring MVC中的异常处理器
      • 8、拦截器
        • Q:拦截器与过滤器区别
        • Q:多拦截器的执行顺序
      • 9、Spring MVC注解
        • Q:@RequestBody、@RequestParam以及@PathVariable区别

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值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22391.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SRM采购管理系统投标管理模块:阳光招采,助力建筑材料企业智慧采购

在建筑行业企业材料管理的四大业务环节即采购、运输、储备和供应,采购是首要环节,没有采购,就没有材料供应,就没有施工生产的顺利进行,因此采购是决定其他三项业务环节的基础因素。 随着流通环节的不断发展壮大&#…

[go学习笔记.第十六章.TCP编程] 1.基本介绍以及入门案例

1.基本介绍 Golang 的主要设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端程序必不可少也是至关重要的一部分. 网络编程有两种户 (1).TCP Socket 编程,是网络编程的主流。之所以叫TCP Socket 编程,是因为底层是基于 TCP/IP 协议…

镍离子去除专业吸附技术,深度除镍工程段工艺设计

含镍废水具有较大的复杂性,难以利用单一的处理方法进行有效处理,现多采用综合处理技术来实现其达标排放及资源的综合利用。 现有的含镍废水处理技术可分为传统化学法、物理法以及电化学法三类。 传统的化学法包括化学沉淀法以及絮凝法等,是通…

因果推理专题讨论01:因果推理概述

因果推理本质属于统计学范畴,并试图从根源上对基于相关性的统计学进行改革。当年诞生统计学科时就发生过分歧,因果被压下去了。直到最近,基于相关性的统计方法几乎发展到尽头,人工智能进一步发展,目前的统计工具已经难…

HTML5期末大作业:仿商城网站设计—— 绿色特产商城购物Html+Css+javascript的网页制作

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

外卖好评回复模板

好评回复很重要,客户花费时间写好评,如果可以得到商家用心的回复,会更增加客户的好感度,从而将客户转化为店铺忠实粉丝的概率会更大。 前言 在外卖评价上,很多店铺老板都比较重视差评回复,反而会比较忽视好…

【ML】关于什么是概率图模型?

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

Java程序员该如何进阶?资深阿里P8通过十年经验送你一些经验和建议!

献给迷茫中的你 我相信很多人都有过自己迷茫期,在开始学习之前会迷茫,会不知道自己要学什么,学这些有什么用;学习之后,学的不扎实,得不到认可,觉得自己白学了;真正找到一份还凑合的…

力扣(LeetCode)27. 移除元素(C++)

双指针 删除 valvalval 等价于将不等于 valvalval 的数按原来的顺序插入数组。 判断当前数和 valvalval 是否相等 。相等则跳过,向右遍历。不相等,则遇到非 valvalval 的数,插入待插入位置,待插入位置向右一位。 jjj 指向待插入…

【OpenDDS开发指南V3.20】第六章:内置主题

介绍 在 OpenDDS 中,默认情况下会创建和发布内置主题,以交换有关在部署中运行的 DDS 参与者的信息。 当使用 DCPSInfoRepo 服务在集中式发现方法中使用 OpenDDS 时,内置主题由该服务发布。 对于 DDSI-RTPS 发现,在进程中实例化的内部 OpenDDS 实现填充内置主题数据读取器…

es5下载安装x-pack修改密码

1.下载和es相同版本的x-pack 如果不是相同的版本会报错,页面会显示main问题 下载地址如下 Download X-Pack: Extend Elasticsearch and Kibana | Elastic 2.将下载下来的安装包传入到需要配置密码的服务器中 3.在es中安装xpack插件 记住x-pack插件无需解压 cd /…

计算机专业毕业论文设计与实现(论文+源码)_kaic

jspSSM201大学生第二课堂学分成绩活动报名vue.mp4jspSSM205旅游信息景点酒店购物车vue.mp4jspSSM206 篮球NBA周边商城vue.mp4jspSSM207办公OA考勤请假健康设备系统.mp4jspSSM208停车位短租系统vue.mp4jspSSM209大学生兼职跟踪系统vue.mp4jspSSM210的KTV点歌系统.mp4jspSSM211的…

高项 整体管理论文

六个过程: 1、制定项目章程:编写一份正式文件的过程,这份文件就是项目章程。通过发布项目章程,正式地批准项目并授权项目经理在项目活动中使用组织资源。 2,制定项目管理计划:定义、准备和协调所有子计划…

用busybox构建最小根文件系统详解

1、busybox源码获取 (1)busybox官网下载地址:https://busybox.net/; (2)建议下载busybox的版本:尽量和你使用的编译环境(比如:Ubuntu)的版本相近,版本差太多可能需要解决一些编译时候的兼容问题; 2、busybo…

从零开始做一款Unity3D游戏<二>——移动,相机控制与碰撞

移动玩家 玩家对象的创建 理解向量 获取玩家输入 相机跟随 使用Unity的物理系统 刚体运动 碰撞体和碰撞 使用碰撞体触发器 总结 本文主要来自<<C#实践入门>>哈里森.费隆 著&#xff0c;仅用为做笔记。 当玩家开始玩一款新的游戏时&#xff0c;要做的第一…

第3章 数据结构中树的概念

文章目录文档配套视频讲解链接地址第03章 树3.1 二叉树创建1. 实例20 二叉树创建3.2 二叉树遍历1. 二叉树的遍历2. 三种遍历算法3. 实例21 二叉树的遍历文档配套视频讲解链接地址 腾讯课堂视频链接地址 : 24_树与二叉树_树的理解腾讯课堂视频链接地址 : 25_树与二叉树_二叉树遍…

论文精读:End-to-End Semi-Supervised Object Detection with Soft Teacher

https://arxiv.org/pdf/2106.09018.pdf 半监督学习重在流程&#xff0c;而不在网络细节 Abstract 本文提出了一种端到端半监督目标检测方法&#xff0c;不同于以往更复杂的多阶段方法。端到端训练逐渐提高了训练过程的伪标签质量&#xff0c;越来越准确的伪标签进而有利于目…

法大大携手企企科技,助力企业实现全生命周期合同管理

伴随着企业信息化高速发展&#xff0c;打破信息孤岛实现全业务信息化的需求日益凸显&#xff0c;企企科技携手法大大&#xff0c;完善了客户从签署到项目管理全场景的信息化解决方案&#xff0c;全面助力客户实现项目管控信息化。“数字化技术对项目管理具有多角度、全方位的影…

6-JS的Fetch 跨域问题

跨域访问 只要协议、主机、端口之一不同&#xff0c;就不同源&#xff0c;例如 http://localhost:7070/a 和 https://localhost:7070/b 就不同源 同源检查是浏览器的行为&#xff0c;而且只针对 fetch、xhr 请求 如果是其它客户端&#xff0c;例如 java http client&#xff…

oracle开启归档日志并修改归档日志路径

一、归档日志概念 归档日志&#xff1a;非活动的重做日志&#xff0c;用来保存所有的重做历史记录。 什么时候写归档日志&#xff1a;当数据库处于archivelog模式并重做日志切换的时候&#xff0c;后台进程ARCH会启动将重做日志的内容完整的保存到归档日志中。 日志操作模式…