likes
comments
collection
share

《面试1v1》SpringMVC

作者站长头像
站长
· 阅读数 61

我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。


《面试1v1》 连载中...


面试官: 早上好!我是今天的面试官,请问你叫什么名字,对 SpringMVC 了解吗?

候选人: 早上好面试官!我叫小明,对 SpringMVC 有一定的了解,它是 Spring Framework 的一部分,是基于 Java 的 MVC 轻量级 Web 框架。

面试官: 那你能解释一下 SpringMVC 的工作原理吗?

候选人: SpringMVC 的工作原理是:

  1. 用户发送请求至前端控制器 DispatcherServlet。
  2. DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler。
    //HandlerMapping
    public interface HandlerMapping {
        HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
    }
  1. HandlerMapping 返回 HandlerExecutionChain 对象,包含 Handler 处理器和 HandlerInterceptor 拦截器。
  2. DispatcherServlet 调用 HandlerAdapter 进行 Handler 适配。
    //HandlerAdapter
    public interface HandlerAdapter {
        boolean supports(Object handler);
        ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
    }  

  1. HandlerAdapter 执行 Handler 和 HandlerInterceptor,并返回 ModelAndView。
  2. ViewResolver 解析 ModelAndView,返回 View。
  3. 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 的请求处理流程示意图:

《面试1v1》SpringMVC

详细流程说明:

  1. 用户发送请求到 DispatcherServlet。
  2. DispatcherServlet 根据请求信息调用 HandlerMapping,解析 Handler。
  3. HandlerMapping 返回一个 HandlerExecutionChain,包含 Handler 和 HandlerInterceptor 列表。
  4. DispatcherServlet 调用 HandlerAdapter 执行 Handler。
  5. Handler 返回一个 ModelAndView。
  6. ViewResolver 解析 ModelAndView 中的 View 名称,获取 View 对象。
  7. View 对象负责填充 Model 数据并渲染视图。
  8. DispatcherServlet 响应用户。

在这个流程中,HandlerMapping 根据请求找到正确的 Handler;HandlerAdapter 负责具体 Handler 的执行;ViewResolver 找出正确的 View;View 负责数据填充和呈现结果。

DispatcherServlet 作为整个流程的控制器,把请求转发到各个组件,并最终返回响应。所以 DispatcherServlet 是 SpringMVC 的核心,负责将请求映射到对应的处理器,并把响应返回给客户端。

面试官: 非常精彩!你通过详细的说明和示意图,让我完全明白了 SpringMVC 的请求处理流程,而且你对每个组件的职责也描述得非常透彻。看来你对 SpringMVC 有很深入的理解,这对一个入门的开发者来说很难得。

《面试1v1》SpringMVC

最近我在更新《面试1v1》系列文章,主要以场景化的方式,讲解我们在面试中遇到的问题,致力于让每一位工程师拿到自己心仪的offer,感兴趣可以关注JavaPub追更!

🎁目录合集:

Gitee:https://gitee.com/rodert/JavaPub

GitHub:https://github.com/Rodert/JavaPub

javapub.net.cn

转载自:https://juejin.cn/post/7239717981348724791
评论
请登录