- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《Spring_MVC_基础(三)》.pdf
在上一篇文章中,我们给出了构成 SpringMVC 应用程序的三要素以及三要素的设
计过程。让我们来归纳一下整个设计过程中的一些要点:
SpringMVC 将 Http 处理流程抽象为一个又一个处理单元
SpringMVC 定义了一系列组件(接口)与所有的处理单元对应起来
SpringMVC 由DispatcherServlet 贯穿始终,并将所有的组件串联起来
在整个过程中,组件和 DispatcherServlet 总是维持着一个相互支撑的关系:
DispatcherServlet —— 串联起整个逻辑主线,是整个框架的心脏
组件 —— 逻辑处理单元的程序化表示,起到承上启下的作用,是
SpringMVC 行为模式的实际承载者
在本系列接下来的两篇文章中,我们将分别讨论 DispatcherServlet 和组件的相
关内容。本文讨论 DispatcherServlet,而下一篇则重点分析组件。
有关 DispatcherServlet,我们想从构成 DispatcherServlet 的体系结构入手,
再根据不同的逻辑主线分别加以分析,希望能够帮助读者整理出学习 SpringMVC
核心类的思路。
DispatcherServlet 的体系结构
通过不同的角度来观察 DispatcherServlet 会得到不同的结论。我们在这里选取
了三个不同的角度:运行特性、继承结构和数据结构。
【运行主线】
从 DispatcherServlet 所实现的接口来看,DispatcherServlet 的核心本质:是
一个 Servlet。这个结论似乎很幼稚,不过这个幼稚的结论却蕴含了一个对整个
框架都至关重要的内在原则:Servlet 可以根据其特性进行运行主线的划分。
根据 Servlet 规范的定义,Servlet 中的两大核心方法 init 方法和 service 方
法,它们的运行时间和触发条件都截然不同:
1. init 方法
在整个系统启动时运行,且只运行一次。因此,在 init方法中我们往往会对整
个应用程序进行初始化操作。这些初始化操作可能包括对容器
(WebApplicationContext)的初始化、组件和外部资源的初始化等等。
2. service 方法
在整个系统运行的过程中处于侦听模式,侦听并处理所有的 Web 请求。因此,
在 service及其相关方法中,我们看到的则是对 Http 请求的处理流程。
因而在这里,Servlet 的这一特性就被 SpringMVC 用于对不同的逻辑职责加以划
分,从而形成两条互不相关的逻辑运行主线:
初始化主线 —— 负责对 SpringMVC 的运行要素进行初始化
Http 请求处理主线 —— 负责对 SpringMVC 中的组件进行逻辑调度完成
对 Http 请求的处理
对于一个 MVC 框架而言,运行主线的划分非常重要。因为只有弄清楚不同的运行
主线,我们才能针对不同的运行主线采取不同的研究策略。而我们在这个系列中
的绝大多数分析的切入点,也是围绕着不同的运行主线进行的。
注:SpringMVC 运行 主线的划分依据是 Servlet 对象中不同方法的生命周期。
事实上,几乎所有的 MVC 都是以此为依据来进行运行主线的划分。这进一步可以
证明所有的 MVC 框架的核心基础还是 Servlet 规范,而设计理念的差异也导致
了不同的框架走向了完全不同的发展道路。
【继承结构】
除了运行主线的划分以外,我们再关注一下 DispatcherServlet 的继承结构:
在这个继承结构中,我们可以看到 DispatcherServlet 在其继承树中包含了 2 个 Spring 的支持
类:HttpServletBean 和 FrameworkServlet。我们分别来讨论一下这两个Spring 的支持类在这
里所起到的作用。
HttpServletBean 是 Spring 对于 Servlet 最低层次的抽象。在这一层抽象中,Spring 会将这个
Servlet 视作是一个 Spring 的 bean,并将 init-param 中的值作为 bean 的属性注入进来:
Java 代码
public final void init() throws ServletException {
if (logger.isDebugEnabled()) {
logger.debug(Initializing se
您可能关注的文档
- 《SIEMENS_S7-300_PLC_培训资料》.pdf
- 《SilverStone ST65F-G 评测》.pdf
- 《SIMATIC PCS 7 V7 OS单站结构,客户机服务器结构以及冗余配置》.pdf
- 《sjtu_se_212_数据库》.pdf
- 《Skjalm P Spring 二零一六 Catalog(16页)》.pdf
- 《SL104-95水利工程水利计算规范》.pdf
- 《SL204-98开发建设项目水土保持方案技术规范》.pdf
- 《SL358-二零一六农村水电站施工环境保护导则》.pdf
- 《SLEP考试(小托福)官方考试指南》.pdf
- 《SmartFoxServer服务器端用户登录验证》.pdf
文档评论(0)