Spring MVC 的本质其实就是一个 Servlet,而上一篇提到了 DispatcherServlet,咱们知道 Spring MVC 真正的逻辑实际上是在 DispatcherServlet 中进行的,而 DispatcherServlet 偏偏就是实现 Servlet 接口的实现类。
java
下面是 DispatcherServlet 的继承图:
数据库
其实,DispatcherServlet 的设计大体就是 Spring MVC 总体结构了,下面是他的主要逻辑部分:服务器
咱们在前面的Spring MVC 核心架构方面已经有所说起,下面咱们就着重的介绍。
架构
servlet 是一个 Java 编写的程序,此程序是基于开篇介绍的 HTTP 协议的,在服务器端运行的(如:Tomcat),是按照 servlet 规范编写的一个 Java 类。主要是处理客户端的请求并将其结果发送到客户端。servlet 的生命周期是由 servlet 容器来控制的,它能够分为 3 个阶段:初始化阶段、运行阶段和销毁阶段。框架
初始化阶段:post
servlet 容器加载 servlet 类,把 servlet 类的 .class 文件中的数据读到内存中。spa
servlet 容器建立一个 servletConfig 对象。servletConfig 对象包含了 servletConfig 的初始化配置信息。设计
servletConfig 容器建立一个 servlet 对象。orm
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月写于武汉)