具体流程
图片解析:
- 首先用户发送request给Dispatcher Servlet(调度servlet),Dispatcher Servlet收到请求以后自己不去处理,而是分派给别的解析器去进行处理。Dispatcher Servlet只是作为一个总的访问点,进行全局的流程控制。
- Dispatcher Servlet----->HandlerMapping。HandlerMapping会将请求映射为HandlerExecutionChain对象(包含一个Handler处理器,多个HandlerInterceptor拦截器)
- Dispatcher Servlet----->HandlerAdapter。HandlerAdapter会把处理器包装为适配器,从而很容易支持很多类型的处理器。
- HandlerAdapter----->Handle。调用真正的处理器去处理方法。
- Dispatcher Servlet----->ViewResolver。ViewResolver把逻辑视图名解析为具体的View
- Dispatcher Servlet----->View。View会根据传进来的Model模型数据进行渲染。
各组件详解
1. 前端控制器Dispatcher Servlet
用于接受请求,响应结果,相当于一个发牌的,属于管理整体调度的。
需要在web.xml文件中配置Dispatcher Servlet:
2. 处理器映射器HandlerMapping
根据请求的URL查找Handler。HandlerMapping负责根据request请求找到对应的Handler处理器以及Interceptor拦截器,将他们封装在HandlerExecutionChain对象中给前端控制器返回
在classpath下的springmvc.xml文件中配置处理器映射器:
多个映射器可以并存,前端控制器判断URL能让哪些映射器映射,就让正确的映射器处理。
RequestMappinghandlerMapping:
注解式处理器映射器,对类中标记@Resquestmapping的方法进行映射,根据 Resquestmapping定义的urI匹配Resquestmapping标记的方法,匹配成功返回HandlerMethod对象给前端控制器, HandlerMethod对象中封装ur对应的方法 Method。
3. 处理器适配器HandlerAdapter
按照特定规则去执行Handler,HandlerAdapter会根据适配器接口对后端控制器进行包装(适配),包装后即可对处理器进行执行,通过扩展处理器适配器可以执行多种类型的处理器,这里使用了适配器设计模式。
在classpath下的springmvc.xml文件中配置处理器适配器:
多个适配器可以并存,前端控制器判断URL能让哪些适配器适配,就让正确的适配器处理。
Requestmapp inghandlerAdapter:
注解式处理器适配器,对标记@ Resquestmapping的方法进行适配。
4. 处理器Handle
需要程序员开发的具体处理方法,需要实现controller接口,才能由HandlerAdapter适配器执行。
在classpath下的springmvc.xml文件中配置处理器:
5. 视图解析器ViewResolver
进行视图解析,根据逻辑视图名解析成真正的视图。
在classpath下的springmvc.xml文件中配置视图解析器:
6. 视图View
View是一个接口,可以实现不同的类型(JSP,PDF…)
编写视图页面:
注解开发:
步骤:
- 创建web工程
- 导入jar包
- 在web.xml中配置 Dispatcher Servlet
- 配置注解映射器和适配器
- 编写注解处理器
- 在 spring容器中加载处理器
- 编写视图
- 配置视图解析器
- 部署调试
配置注解映射器和适配器:
方法一:
方法二:
- 使用mvc:annotation-driven可以代替上边注解映射器和注解适配器配置。
- mvc:annotation-driven默认加载很多的参数绑定方法
- 实际中开发使用mvc:annotation-driven
开发注解Handler
在Spring容器中加载Handler: