SpringMVC
我是 javapub,一名 Markdown
程序员从👨💻,八股文种子选手。
: 早上好!我是今天的面试官,请问你叫什么名字,对 SpringMVC 了解吗?
早上好面试官!我叫小明,对 SpringMVC 有一定的了解,它是 Spring Framework 的一部分,是基于 Java 的 MVC 轻量级 Web 框架。
: 那你能解释一下 SpringMVC 的工作原理吗?
SpringMVC 的工作原理是:
- 用户发送请求至前端控制器 DispatcherServlet。
- DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler。
//HandlerMapping
public interface HandlerMapping {
HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
}
- HandlerMapping 返回 HandlerExecutionChain 对象,包含 Handler 处理器和 HandlerInterceptor 拦截器。
- DispatcherServlet 调用 HandlerAdapter 进行 Handler 适配。
//HandlerAdapter
public interface HandlerAdapter {
boolean supports(Object handler);
ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
}
- HandlerAdapter 执行 Handler 和 HandlerInterceptor,并返回 ModelAndView。
- ViewResolver 解析 ModelAndView,返回 View。
- DispatcherServlet 根据 View 进行视图渲染,响应用户。
: 你对 SpringMVC 的类和接口还挺了解的嘛!那你说说 DispatcherServlet、HandlerMapping、HandlerAdapter、ViewResolver 分别是什么?
好的,以下是这几个组件的详细说明: DispatcherServlet:前端控制器,接收请求并相应结果,整个流程控制的中心,由它调用其它组件处理用户的请求。
public class DispatcherServlet extends FrameworkServlet {
// ...
}
HandlerMapping:请求映射到 Handler 的适配器,根据请求信息匹配 Handler。
public interface HandlerMapping {
// 根据请求返回 HandlerExecutionChain 对象
HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
}
HandlerAdapter:Handler 适配器,调用Handler 处理请求,封装请求信息,返回 ModelAndView。
public interface HandlerAdapter {
boolean supports(Object handler);
// 调用 Handler 处理请求
ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
}
ViewResolver:View 解析器,将逻辑视图名解析为具体 View 实现。
public interface ViewResolver {
View resolveViewName(String viewName, Locale locale) throws Exception;
}
所以,这四个组件协同工作,将请求发送给适合的 Handler,Handler 返回处理结果 ModelAndView,再由 ViewResolver 解析为View,最后由 DispatcherServlet 将结果响应给用户。
DispatcherServlet 如同总指挥,负责转发请求到各个组件,真正干活的其实是 HandlerMapping、HandlerAdapter 和 ViewResolver 这三个家伙。
: 原来如此,你解释的很透彻,让我对 SpringMVC 的工作原理有了更深的理解。那么 SpringMVC 的请求处理流程你能画一个示意图来表示一下吗?
这里是 SpringMVC 的请求处理流程示意图:
详细流程说明:
- 用户发送请求到 DispatcherServlet。
- DispatcherServlet 根据请求信息调用 HandlerMapping,解析 Handler。
- HandlerMapping 返回一个 HandlerExecutionChain,包含 Handler 和 HandlerInterceptor 列表。
- DispatcherServlet 调用 HandlerAdapter 执行 Handler。
- Handler 返回一个 ModelAndView。
- ViewResolver 解析 ModelAndView 中的 View 名称,获取 View 对象。
- View 对象负责填充 Model 数据并渲染视图。
- DispatcherServlet 响应用户。
在这个流程中,HandlerMapping 根据请求找到正确的 Handler;HandlerAdapter 负责具体 Handler 的执行;ViewResolver 找出正确的 View;View 负责数据填充和呈现结果。
DispatcherServlet 作为整个流程的控制器,把请求转发到各个组件,并最终返回响应。所以 DispatcherServlet 是 SpringMVC 的核心,负责将请求映射到对应的处理器,并把响应返回给客户端。
: 非常精彩!你通过详细的说明和示意图,让我完全明白了 SpringMVC 的请求处理流程,而且你对每个组件的职责也描述得非常透彻。看来你对 SpringMVC 有很深入的理解,这对一个入门的开发者来说很难得。
最近我在更新《面试1v1》系列文章,主要以场景化的方式,讲解我们在面试中遇到的问题,致力于让每一位工程师拿到自己心仪的offer,感兴趣可以关注公众号JavaPub追更!
🎁目录合集:
Gitee:https://gitee.com/rodert/JavaPub
GitHub:https://github.com/Rodert/JavaPub