Spring MVC
前言
这里的内容熟读几遍就好了,重点的内容我会标注出来的。
热门题目
- 什么是 Spring MVC ?(了解)
- Spring MVC 的原理及执行流程?(重点)
- Spring MVC 中如何处理表单数据?(了解)
- Spring MVC 实现文件上传?(了解)
- Spring MVC 拦截器?(重点)
- Spring MVC 的异常处理机制?(重点)
- Spring MVC 如何实现跨域?(重点)
- Spring MVC 的生命周期?(重点)
见招拆招
1、什么是 Spring MVC ?(了解)
是 Spring 框架中的一个模块,主要用于构建 web 应用。MVC 其实就是一种软件设计架构,M 是 Model 的缩写,代表模型层;V 是 View 的缩写,代表视图层;C 是 Controller 的缩写,代表控制器层。它们按照一定的流程运行,相互配合,实现职责的解耦。
2、Spring MVC 的原理及执行流程?(重点)
Spring MVC 依赖于底层的各个组件分工合作,处理用户的请求。流程还是比较复杂的,我这里简单的说一下吧:
用户发送的请求会被 DispatcherServlet 捕获,DispatcherServlet 根据请求 URL 到 HandlerMapping 中去查找对应的处理器,也就是 Controller 嘛。DispatcherServlet 根据 HandlerMapping 返回的结果,到 HandlerAdapter 中找到对应的处理器适配器。然后的话,处理器适配器调用实际的处理器执行对应的业务逻辑,返回一个 ModelAndView 对象给 DispatcherServlet ,DispatcherServlet 根据 ModelAndView 中的视图名称,到 View Resolver 中找到对应的视图实体类。View Resolver 根据 ModelAndView 中的数据和视图模板渲染视图,返回给 DispatcherServlet ,最后由 DispatcherServlet 将渲染后的视图返回给客户端。
(一般来说,你这么巴拉巴拉的说,面试官基本上没有听进去的,他只是想试探你是否知道整个流程,以及后续组件的询问)
如果面试官继续追问你各个组件的详细功能和职责,这个时候没必要和他纠缠,我这里列出个人理解版:
DispatcherServlet
我觉得它的最大作用就是分发各种各样的任务,起到一个集中中转的作用,协调整个请求的处理流程
HandlerMapping
找到对应的处理器来处理这个请求嘛
HandlerAdapter
主要是根据处理器的类型和具体实现,找到具体的处理方法
View Resolver
根据控制器返回的视图名称,找到相应的视图资源,渲染成页面,然后返回
具体的实现我就不太清楚了,只是了解它们职责和执行流程,嗯。
3、Spring MVC 中如何处理表单数据?(了解)
可以使用 @ModelAttribute 将表单的字段参数绑定到一个模型对象上。当然,这个注解不仅能绑定表单的,还能够绑定 URL 的 query 参数。
4、Spring MVC 实现文件上传?(了解)
首先要在进行配置,比如设置最大上传文件的大小,如果是 SpringBoot 的话,可以直接在配置文件中配置。然后用一个 MultipartFile 类型的对象承接就行了。
5、Spring MVC 拦截器?(重点)
我个人的理解就是,所谓的拦截器,其实就是 Spring MVC 处理请求时,调用的一些钩子函数。一个拦截器会实现HandlerInterceptor 接口,这个接口提供了三个方法:preHandle、postHandle、afterCompletion 。preHandle 会在请求处理之前执行,postHandle 在请求处理之后、视图渲染之前执行,afterCompletion 在整个请求完成之后执行,一般用于资源的清理工作嘛。
配置拦截器的流程:
- 拦截器类实现 HandlerInterceptor 接口
- 创建配置类,实现 WebMvcConfigurer 接口,并在其中注册拦截器
(当然,传统的 xml 文件也可以)
6、Spring MVC 的异常处理机制?(重点)
无论是我们主动抛出的异常还是说程序抛出的异常,最终都会被 DispatcherServlet 捕获,并交给异常处理器进行处理。我了解和实践过的异常处理器的实现方法有两种,一种是实现 HandlerExceptionResolver 接口,另一种就是 @Controllervice + @ExceptionHandler 注解了,当然,后者的使用频率更多一些。避免将一些不必要的信息暴露给前端嘛。
7、Spring MVC 如何实现跨域?(重点)
可以使用 @CrossOrigin 注解 或者 实现 WebMvcConfigurer 接口。后者我使用得要多一些,前者的话控制粒度更细一些。
8、Spring MVC 的生命周期?(重点)
大致可以分为 初始化阶段、请求处理阶段、错误处理阶段、销毁阶段:
初始化阶段
这个阶段做的事情就是根据配置去初始化各种组件了,比如说 DispatcherServlet、HandlerMapping 、HandlerAdapter 等。
请求处理阶段
其实就是 Spring MVC 的执行流程嘛,DispatcherServlet 进行任务的分发和调度,其他的组件各司其职,相互配合嘛。
错误处理阶段
在请求处理的过程中,如果抛出了异常,那么 DispatcherServlet 会进行捕获并查找对应的方法来处理异常。
销毁阶段
Spring MVC 依赖于 Spring 嘛,所以当 Spring 容器销毁时,所有的 Bean 对象都会被销毁,自然 DispatcherServlet 和 其他组件也会被销毁,一般出现在应用程序退出的时候
总结
基本上就这些了,也没有什么好问的,其他那些问题都比较无聊的。
2024/01/11
writeBy kaiven