2023最新版(持续更新)
- 一、SpringMVC的高频面试题
- 1. SpringMVC的执行流程
- 2. SpringMVC常见的注解有哪些?
一、SpringMVC的高频面试题
1. SpringMVC的执行流程
前置知识
视图阶段(JSP):
涉及到的重要组件:
-
前端控制器(DispatcherServlet):调度中心,前端发送的所有请求都会经过它,它是被Tomcat容器进行初始化的;
-
处理器映射器(HandlerMapping):
在前端控制器中加载
;主要作用是保存前端访问路径的信息如与控制器(Controller层)中的HTTP方法信息,存入Map中,如:{key:“/user/findById/1”,value:“类名、方法名等”},根据这些信息找到某一个controller中的方法
,这个方法可以理解为处理器;然后给前端控制器返回处理器执行链路(HandlerExecutionChain),也就是该处理器执行会经过哪些地方(执行流程),在此过程中可能还会被拦截器拦截; -
处理器适配器(HandlerAdaport):
在前端控制器中加载
;去执行具体的处理器(Controller内的方法),主要功能是执行该方法(处理器)、处理参数(通过策略者模式,解析控制层方法支持哪些参数,转换参数为后端可接收的格式)、处理返回值(策略者模式,解析方法支持返回哪些类型的值,并处理返回值的格式响应给前端),确定执行哪一个具体的方法,这一寻找对应处理器的过程叫做适配;返回ModuleAndView给前端控制器 -
视图解析器(ViewResolver):
在前端控制器中加载
;主要功能是解析逻辑视图
前后端分离阶段(接口开发、异步请求):
面试时的回答:
视图阶段:
- 用户发送请求到前端控制器Dispatcherservlet;
- DispatcherServlet收到请求调用HandlerMapping(处理器适配器);
- HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DIspatcherServlet;
- DIspatcherServlet调用HandlerAdapter经过适配调用具体的处理器(Handler/Controller)
- Controller执行完成返回ModuleAndView对象
- HandlerAdapter将Controller的执行结果ModuleAndView返回给DispatcherServlet
- DispatcherServlet将ModuleAndView传给ViewResolver(视图解析器)
- ViewResolver解析后返回具体的视图View
- DispatcherServlet根据视图进行渲染视图(将模型数据填充到视图中)
- DispatcherServlet响应用户
前后端分离开发、接口开发阶段
- 用户发送请求到前端控制器Dispatcherservlet;
- DispatcherServlet收到请求调用HandlerMapping(处理器适配器);
- HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DIspatcherServlet;
- DIspatcherServlet调用HandlerAdapter;
- HandlerAdapter经过适配调用具体的处理器(Handler/Controller);
- 方法上添加了@ResponseBody;
- 通过HttpMessageConverter来返回结果(转换为JSON并响应给前端);
2. SpringMVC常见的注解有哪些?
注解 | 说明 |
---|---|
@RequestMapping | 用于映射请求路径,可以定义在类上和方法上。用于类上,则表示类中的所有方法都是以该地址作为父路径 |
@RequestBody | 注解实现接收http请求的json数据,将Json转化为Java对象 |
@RequestParam | 指定请求参数的名称 |
@PathViriable | 从请求路径中获取请求参数:(/user/{id}),传递给方法的形参 |
@ResponseBody | 将Controller内的方法的返回对象转化为Json格式传递给前端 |
@RequestHeader | 获取指定的请求头数据 |
@RestController | @Controller + ResponseBody |