springMVC(13) springMVC源码阅读总结

前言

已经距离阅读完springMVC的源码过了有一段时间了,一直都没有发现自己到现在还没有对springMVC的学习做一个最终的总结。于是利用这次整理博客的机会正好做一次总结。

springMVC可以整体分为两个部分

  • 初始化部分
  • 处理请求部分

而初始化部分同样可以分为两个部分

  • 初始化根上下文以及初始化spring IoC容器部分
  • 初始化DispatcherServlet部分

处理请求则可以分为如下四个部分

  • 通过HandlerMapping查找请求对应的处理器
  • 使用处理器处理请求
  • 通过ViewResolver将viewName解析成view
  • 调用View处理视图并返回响应

初始化部分

springMVC(13) springMVC源码阅读总结_第1张图片
初始化部分流程图

在初始化部分中,其中初始化根上下文是在ContextLoaderListener中执行,以及spring IoC容器的初始化部分也是在这一块。而DispatcherServlet的初始化则是通过回调servlet的init方法来进行初始化的。

请求处理部分

springMVC(13) springMVC源码阅读总结_第2张图片
请求处理流程图

图中很清晰地表现了请求处理的四个主要流程,至于它们的具体实现可以参考之前的文章。

DispatcherServlet的本质

DispatcherServlet的本质就是一个Servlet,具体地说应该是一个HttpServlet。

一个最普通的HttpServlet可以如下来写:

public class TestServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter out = resp.getWriter();
        out.println("Hello world!");
    }
}

而DispatcherServlet如果沿着其父类一直向上寻找,可以发现,其最终也是重载了HttpServlet的service方法来进行请求处理的。

DispatcherServlet和普通的servlet在xml中的配置也如出一辙,


    test
    study.cayun.login.TestServlet
    1


    test
    /test

那么以我的理解,DispatcherServlet就是一个功能更加复杂的servlet,它可以进行请求分发,可以支持各种配置过滤等。

当然了,也可以部分认为DispatcherServlet是一个调度器,DispatcherServlet会将不同请求转发给不同引擎来处理,例如jsp、velocity、freemark等。

你可能感兴趣的:(springMVC(13) springMVC源码阅读总结)