文档章节

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

水门-kay
 水门-kay
发布于 2016/03/28 20:31
字数 761
阅读 1275
收藏 7

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月写于武汉)

© 著作权归作者所有

水门-kay
粉丝 460
博文 19
码字总数 59660
作品 0
杭州
后端工程师
私信 提问
Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密...

小致Daddy
2018/08/03
21.2K
1
Spring 源码分析(四) ——MVC(二)概述

前 言 Spring 是一种企业应用开发框架,在实际开发中起到了应用平台的作用,有点像企业应用中的“操作系统”,从而为企业应用资源的使用提供一致的环境。具体来说,Spring 提供的框架特性有 ...

水门-kay
2016/03/23
1K
0
springmvc源码解析合集

更多精彩源码解析文章请关注”天河聊架构“微信公众号。 springmvc源码解析之组件介绍 springmvc源码解析之配置加载SpringServletContainerInitializer springmvc源码解析之配置加载Context...

天河2018
03/27
199
0
Spring 源码分析(四) ——MVC(七)视图呈现

DispatcherServlet 视图设计 前面分析了 Spring MVC 中的 M(Model)和 C(Controller)相关的实现,其中的 M 大致对应 ModelAndView 的生成,而 C 大致对应 DispatcherServlet 和与用户业务...

水门-kay
2016/04/02
791
0
Spring MVC的底层源码

一、Spring MVC请求处理流程 引用spring in action上的一张图来说明了springmvc的核心组件和请求处理流程: DispatcherServlet是springmvc中的前端控制器(front controller),负责接收request...

小致dad
04/27
68
0

没有更多内容

加载失败,请刷新页面

加载更多

记一次项目启动报java.lang.StackOverflowError

项目是spring boot,之前没有问题,突然有一次debug方式启动的时候报这个错误。 因为其他同事没有问题,线上也没有问题,所以先排除了是代码问题。 开始以为电脑开的软件太多,然后给jvm的内存...

chro008
9分钟前
5
0
idea 2019.2免费激活码

亲测有效到2020.6 812LFWMRSH-eyJsaWNlbnNlSWQiOiI4MTJMRldNUlNIIiwibGljZW5zZWVOYW1lIjoi5q2j54mIIOaOiOadgyIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb......

Iverson58
17分钟前
3
0
移动APP开发中的重要注意事项

您的移动app在变化吗?如果没有,请确保遵循这些提示进行移动app开发。大多数行业的IT领导者都优先考虑劳动力和消费者的移动性。实现成功的移动app开发具有挑战性,涉及在app功能开发的基础上...

a429011717
24分钟前
5
0
Qt编写自定义控件69-代码行数统计

一、前言 代码行数统计主要用来统计项目中的所有文件的代码行数,其中包括空行、注释行、代码行,可以指定过滤拓展名,比如只想统计.cpp的文件,也可以指定文件或者指定目录进行统计。写完这...

飞扬青云
42分钟前
10
0
驰骋工作流引擎-ccflow关于 “ 是否自动计算未来的处理人”的功能变更

关键字:流程未来节点处理人 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流 业务背景:一个流程在启动起来后,是可以对一些节点计算出来处理人是谁,流程的走向。对于另...

孟娟
58分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部