1.MVC分层介绍一下
“Spring MVC 采用经典的三层架构,通过 Controller(控制层) 接收请求,调用 Service(业务逻辑层) 进行逻辑处理,最后由 Repository/DAO(持久层) 与数据库交互。这种设计实现了请求处理、业务逻辑和数据访问的彻底解耦。”
2.了解SpringMVC的处理流程吗?
“Spring MVC 的核心是一个中央调度器 DispatcherServlet,它的执行流程可以概括为:
-
请求分发:请求到达
DispatcherServlet后,它会通过 HandlerMapping 找到处理该请求的具体方法(Handler)。 -
适配执行:通过 HandlerAdapter 调用该方法,执行业务逻辑并获取结果。
-
结果处理:如果是前后端分离(Restful),直接通过
HttpMessageConverter将对象转为 JSON 返回;如果是传统开发,则由 ViewResolver 解析逻辑视图名并渲染返回。”
2. 关键组件的功能(应对追问)
如果面试官问具体组件的作用,一句话总结:
-
DispatcherServlet:中央控制枢纽,解耦各个组件。
-
HandlerMapping:负责“找人”,建立 URL 和 Controller 的映射。
-
HandlerAdapter:负责“干活”,支持多种格式的 Controller 运行(适配器模式)。
-
HttpMessageConverter:负责“转码”,把 Java 对象和 JSON/XML 互转。
3. 与过滤器的区别(避坑指南)
“过滤器(Filter)是 Servlet 层的,负责全局请求过滤(如跨域、字符集); 拦截器(Interceptor)是 Spring MVC 层的,它能获取到具体的 Handler 信息,更适合做权限校验和业务日志。”
4.Handlermapping 和 handleradapter有了解吗?
1. HandlerMapping(处理器映射器)—— “找人的”
-
一句话定义:它负责根据用户请求的 URL 找到对应的 Handler(通常就是我们写的 Controller 方法)。
-
核心逻辑:Spring 启动时,它会扫描所有
@RequestMapping注解,建立 URL 与方法的映射表。 -
面试话术:
“HandlerMapping 就像一个导航仪。当请求进来时,
DispatcherServlet问它:‘这个 URL 归谁管?’,它就会返回一个执行链(包含 Controller 方法和拦截器 Interceptor)。”
2. HandlerAdapter(处理器适配器)—— “干活的”
-
一句话定义:它负责真正去 调用/执行 找到的那个 Handler。
-
设计模式:使用了 适配器模式。
-
核心逻辑:因为 Controller 的写法有很多种(注解式、实现接口式、甚至原生的 Servlet),DispatcherServlet 不知道怎么直接调用它们,必须通过适配器来转换。
-
面试话术:
“HandlerAdapter 就像一个万能转换插头。由于 Handler 的类型多样,
DispatcherServlet不需要关心具体的调用细节,只需统一调用适配器的handle方法,由适配器去处理参数转换和方法反射调用。”