美文网首页
springMVC(13) springMVC源码阅读总结

springMVC(13) springMVC源码阅读总结

作者: 谷和阿秋 | 来源:发表于2018-01-12 22:01 被阅读0次

    前言

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

    springMVC可以整体分为两个部分

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

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

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

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

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

    初始化部分

    初始化部分流程图

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

    请求处理部分

    请求处理流程图

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

    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中的配置也如出一辙,

    <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>study.cayun.login.TestServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
    

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

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

    相关文章

      网友评论

          本文标题:springMVC(13) springMVC源码阅读总结

          本文链接:https://www.haomeiwen.com/subject/ahdqoxtx.html