org.springframework.web.servlet.DispatcherServlet

继承结构

  • HttpServletBean是Spring对HttpServlet最底层的抽象,在这里Spring把Servlet视作一个Bean
  • FrameworkServlet是对HttpServletBean的进一步抽象,真正初始化一个Spring的容器(WebApplicationContext)
  • DispatcherServlet对容器(容器用于管理组件)进行初始化以达到对组件进行逻辑调用的目的

SpringMVC自身对于组件并未实现一套完整的管理机制,而是借用了Spring Framework核心框架中容器的概念,将所有的组件纳入到容器中进行管理。一个组件的多种行为模式可以在容器中共存,容器将负责对这些实现类进行管理。

数据结构

  • 红线以上是参数配置,控制SpringMVC组件的初始化行为方式
  • 红线以下是核心组件,SpringMVC的核心逻辑处理组件

DispatcherServlet是程序的入口,在web.xml中配置
在之前Servlet模式中,web.xml配置项目的所有请求-响应映射关系。项目规模扩大之后,请求-响应的映射关系全部定义在web.xml中,将造成web.xml的不断膨胀而变得难以维护。针对这一点,SpringMVC提炼一个核心的Servlet覆盖对所有Http请求的处理,也就是DispatcherServlet。
要做到能分发所有的请求,核心分发器需要做到:①能够根据一定的规则对不同的Http请求分发到不同的Servlet对象上去进行处理②能够建立起一整套完整的对所有Http请求进行规范化处理的流程(不同协议之间的转化,从Http协议到Java)。
为了做到这2点,SpringMVC所提出2点:

  • 处理流程规范化 —— 将处理流程划分为若干个步骤(任务),并使用一条明确的逻辑主线将所有的步骤串联起来
  • 处理流程组件化 —— 将处理流程中的每一个步骤(任务)都定义为接口,并为每个接口赋予不同的实现模式

其中流程步骤为:
1)对Http请求进行初步处理,查找与之对应的Controller处理类(方法)——HandlerMapping接口(组件)
2)调用相应的Controller处理类(方法)完成业务逻辑——HandlerAdapter接口(组件)
3)对Controller处理类(方法)调用时可能发生的异常进行处理——HandlerExceptionResolver接口(组件)
4)根据Controller处理类(方法)的调用结果,进行Http响应处理——ViewResolver接口(组件)
这4个步骤对应的4个接口就是Spring的组件,而DispatcherServlet就是把这些组件串联在一起,实现分发请求的功能。那么SpringMVC要怎么管理这些组件呢?我们必须借助一个有效的手段对整个SpringMVC的组件进行定义,而这一点正是通过核心配置文件来完成的。

组件是处理流程的抽象化,因而所有组件都是接口,接口最重要意义是定义操作规范,一个接口可以有多个不同的实现类,代表的是对于相同的逻辑语义的不同解读方式。或者说一个接口的每一个不同的实现分支,代表了相同操作规范的不同行为模式。举个例子,根据Http请求查找与之对应的Controller的组件HandlerMapping的树形实现体系:

  • BeanNameUrlHandlerMapping —— 根据Spring容器中的bean的定义来指定请求映射关系
  • SimpleUrlHandlerMapping —— 直接指定URL与Controller的映射关系,其中的URL支持Ant风格
  • DefaultAnnotationHandlerMapping —— 支持通过直接扫描Controller类中的Annotation来确定请求映射关系
  • RequestMappingHandlerMapping —— 通过扫描Controller类中的Annotation来确定请求映射关系的另外一个实现类

由此可以看出,组件化(接口化)体系是SpringNVC对行为模式的扩展的有效途径,SpringMVC是一个基于组件的开发框架

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值