SpringMvc源码分析1


SpringMvc源码分析1

由于疫情影响,在家正好抽时间整理一下SpringMvc相关源码内容。望疫情早点结束,迎暖阳,赏春光!

一. 架构流程

首先,画了一个大概的springmvc处理请求的流程图。

mvc

1: 客户端发起请求,请求进入DispatcherServlet统一处理;

2-3: DispatcherServlet从内部维护的handlerMappings列表中查找适合的HandlerMapping,然后调用其getHandler(request)方法,返回HandlerExecutionChainHandlerExecutionChain包含了具体的处理器handler和拦截器列表interceptorList;

4: 根据得到的handler从内部维护的handlerAdapters中获取匹配的HandlerAdapter

5-7: 执行HandlerAdapterhandle(HttpServletRequest request, HttpServletResponse response, Object handler)方法,返回ModelAndView;

8-9: 使用从内部维护的viewResolvers得到具体的视图View对象;

10-11: 渲染该视图View,返回给客户端;

二. 接口抽象

我们来关注几个关键的接口

  1. HandlerMapping

该接口主要就是根据请求,来获取处理器执行链——包括具体的处理器和拦截器。

public interface HandlerMapping {
     HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
 }

查看一下接口实现图(已删除一些):

HandlerMapping

之后我们会具体关注RequestMappingHandlerMapping

  1. HandlerAdapter

用来处理具体的handler逻辑,如调用controller里面的代码。

public interface HandlerAdapter {

	boolean supports(Object handler);

	ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;

	long getLastModified(HttpServletRequest request, Object handler);

}

查看一下接口实现图:

HandlerAdapter

之后我们会具体关注RequestMappingHandlerAdapter

这一块内容包括很多,比如参数的绑定,handler方法的执行,返回值的绑定等等。我们先大概了解一下SpringMvc处理请求的流程,接下来我们再查看具体的源码。OK,这一篇先记录到这里。


文章作者: shiv
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 shiv !
评论
  目录