Spring 源码分析(四) ——MVC(四)核心逻辑

from:https://my.oschina.net/kaywu123/blog/648744

DispatcherServlet 的设计

        Spring MVC 的本质其实就是一个 Servlet,而上一篇提到了 DispatcherServlet,我们知道 Spring MVC 真正的逻辑其实是在 DispatcherServlet 中进行的,而 DispatcherServlet 恰恰就是实现 Servlet 接口的实现类。

        下面是 DispatcherServlet 的继承图:

        其实,DispatcherServlet 的设计大致就是 Spring MVC 整体结构了,下面是他的主要逻辑部分:

        我们在前面的Spring MVC 核心架构方面已经有所提及,下面我们就着重的介绍。

Sevrlet 补充说明

        servlet 是一个 Java 编写的程序,此程序是基于开篇介绍的 HTTP 协议的,在服务器端运行的(如:Tomcat),是按照 servlet 规范编写的一个 Java 类。主要是处理客户端的请求并将其结果发送到客户端。servlet 的生命周期是由 servlet 容器来控制的,它可以分为 3 个阶段:初始化阶段、运行阶段和销毁阶段。

        初始化阶段:

            servlet 容器加载 servlet 类,把 servlet 类的 .class 文件中的数据读到内存中。

            servlet 容器创建一个 servletConfig 对象。servletConfig 对象包含了 servletConfig 的初始化配置信息。

            servletConfig 容器创建一个 servlet 对象。

            servletConfig 容器调用 servlet 对象的 ini 方法进行初始化。

        运行阶段:

            当 servlet 容器接收到一个请求时,servlet 容器会针对这个请求创建 servletRequest 和 ServletResponse 对象,然后调用 service 方法。并把这两个参数传递给 servlet 方法。servlet 方法通过 servletRequest 对象获得请求的信息。并处理该请求。再通过 servletResponse 对象生成这个请求的响应结果。然后销毁 servletRequest 和 servletResponse 对象。我们不管这个请求时 post 提交的还是 get 提交的,最终这个请求都会由 servlet 方法来处理。

        销毁阶段:

            当 Web 应用被终止时,servlet 容器会先调用 servlet 对象的 destroy 方法,然后再销毁 servlet 对象,同时也会销毁与 servlet 对象相关联的 servletConfig 对象。我们可以在 destroy 方法的实现中,释放 servlet 所占用的资源,如关闭数据库连接,关闭文件输入输出流等。

            servlet 的框架是由两个 Java 包组成的:javax.servlet 和 javax.servlet.http。在 javax.servlet 包中定义了所有的 servlet 类都必须实现或扩展的通用接口和类,在 javax.servlet.http 包中定义了采用 HTTP 通信协议的 HttpServlet 类。

            servlet 被设计成请求驱动,servlet 的请求可能包含多个数据项,当 Web 容器接收到某个 servlet 请求时,servlet 把请求封装成一个 HttpServletRequest 对象,然后把对象传给 servlet 的对应服务方法。

            HTTP 的请求方式包括 delete、get、options、post、put 和 trace,在 HttpServlet 类中分别提供了相应的服务方法,它们是 doDelete(),doGet()、doOptions()、doPost()、doPut()和 doTrace()。

——水门(2016年3月写于武汉)

猜你喜欢

转载自blog.csdn.net/u010142437/article/details/81743533