1、如何理解Spring中的MVC设计?
- MVC是一种
分层架构
设计思想,是Model,View,Controller的缩写,是为了将复杂问题简单化
而提出的一种分而治之的设计套路,基于这种套路来提高代码的可维护性
和可扩展性
。Spring MVC 仅仅是Spring 框架中WEB模块基于MVC设计思想的落地实现,简化了web请求和响应
的处理过程。 - 流程图:
- 前端请求经过 过滤器 筛选满足程序要求的请求
- 解析请求,抽象路径经过DispatcherScervlet (前端控制器,解析抽象路径,作为统一访问点,进行全局的流程控制)
- 被解析的抽象路径在 HandlerMapping 中映射为HandlerExecutionChain对象(包含一个Handler处理器对象、多个HandlerInterceptor拦截器)
- DispatcherScervlet 调用HandlerMapping方法,由抽象路径得到了业务对象,对应的业务方法,并执行方法 (反射机制)
- 方法执行后,返回响应:
1. 前后端分离:执行结束后原路返回到 DispatcherScervlet
2. 前后端不分离:执行后找到 对应的 网页资源(视图解析器和视图) 回到 DispatcherScervlet (目前大多数都是前后端分离项目,所以了解即可) - DispatcherScervlet 发出响应给浏览器 (过滤器过滤)
2、Spring MVC中的异常是如何处理的?
- Spring工程中Web模块可以基于@RestControllerAdvice注解定义全局异常处理类,然后借助全局异常处理规范进行异常处理(大多数处理方法)
- 局部异常处理方法(业务类内部抛出,不建议)
忌控制器,持久层抛出异常
大概过程如图所示:抛异常,由DispatcherScervlet 统一处理异常
3、说几个Spring中用于定义组件的注解?
- @Component :通用注解在不满足其他定义组件注解时使用
- @Service : 作用于 业务逻辑层注解
- @Controller : 作用于 控制器层注解
- @Configuration :作用于 配置类注解
- @Repository : 作用于 持久层注解
- @Bean : 作用于方法上,产生一个对象,交由Spring容器管理
4、说几个Spring MVC中描述方法的注解?
- @RequestMapping // 注解映射通用请求 //参数如果在请求体中需加RequestParam或RequestBody
- @PostMapping // 注解映射POST请求 数据在请求体内
- @GetMapping // 注解映射GET请求 数据在请求头上
- @DeleteMapping // 移除某个资源 //数据在请求头上
- @PutMapping // 执行大规模的替换操作 //数据在请求体内
- @PatchMapping // 对资源数据打补丁或局部更新
- @ResponseBody // 将返回值转为json格式的数据响应
5、说几个Spring MVC中描述方法参数的注解?
- @RequestParam //接收的参数是来自HTTP请求体或请求url的QueryString中,用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容
- @PathVariable 接收请求路径中占位符的值 RESTful风格
- @RequestBody //接收的参数是来自requestBody中,即请求体,用来处理json格式
- @RequestPart //用在multipart/form-data表单提交请求的方法上。
- @Vaild/ @Vaildated 让参数进行验证
6、说说Spring MVC中的拦截器?
- Spring框架中定义的拦截器属于Spring MVC模块执行链中的一个对象,其类型为HandlerInterceptor,基于这个类型的拦截器可以对后端@Controller注解描述的对象进行请求和响应的拦截。用于进行一些预处理操作。