目录
  1. 前言
  2. 初始化部分
  3. 请求处理部分
  4. DispatcherServlet的本质
springMVC(13) springMVC源码阅读总结

前言

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

springMVC可以整体分为两个部分

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

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

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

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

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

初始化部分

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

请求处理部分

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

DispatcherServlet的本质

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

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

1
2
3
4
5
6
7
8
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中的配置也如出一辙,

1
2
3
4
5
6
7
8
9
<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等。

文章作者: 谷河
文章链接: https://www.lyytaw.com/spring/springMVC%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB%E6%80%BB%E7%BB%93/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 谷河|BLOG