spring mvc 处理流程整理
1、 首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;
2、 DispatcherServlet——>HandlerMapping,HandlerMapping 将会把请求映射为 HandlerExecutionChain 对象(包含一个 Handler 处理器(页面控制器)对象、多个 HandlerInterceptor 拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
3、 DispatcherServlet——>HandlerAdapter.Controller(HandlerAdapter 将会把Controller包装为适配器,HandlerAdapter 将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理);
4、 业务处理方法(Service)
5、 HandlerAdapter.Controller返回一个 ModelAndView 对象(包含模型数据、逻辑视图名);
6、 ModelAndView 的逻辑视图名——> ViewResolver, ViewResolver 将把逻辑视图名解析为具体的 View,通过这种策略模式,很容易更换其他视图技术;
7、 View——>渲染,View 会根据传进来的 Model 模型数据进行渲染,此处的 Model 实际是一个 Map 数据结构,因此很容易支持其他视图技术;
8、 返回控制权给 DispatcherServlet,由 DispatcherServlet 返回响应给用户,到此一个流程结束。
开发步骤:
1、 DispatcherServlet 在 web.xml 中的部署描述,从而拦截请求到 Spring Web MVC
2、 HandlerMapping 的配置,从而将请求映射到处理器
4种HandlerMapping的配置方式:
2.1 基于注解:
<!--Spring3.1开始的注解 HandlerMapping -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--Spring3.1开始的注解 HandlerAdapter -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
2.2 显示的指定url对应关系:
prop的key值->请求,后面指定处理这个请求的Controller
<!-- 3:SimpleUrlHandlerMapping -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/springMVC.d">/HelloWorld</prop>
</props>
</property>
</bean>
2.3 基于BeanName找到Controller:
<!-- 4:BeanNameUrlHandlerMapping -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
2.4 基于Controller的Class Name找到Controller:
<!-- 5:ControllerClassNameHandlerMapping -->
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
3、 HandlerAdapter 的配置,从而支持多种类型的处理器
1.DispatcherServlte会根据配置文件信息注册HandlerAdapter,如果在配置文件中没有配置,那么DispatcherServlte会获取HandlerAdapter的默认配置,如果是读取默认配置的话,DispatcherServlte会读取DispatcherServlte.properties文件,该文件中配置了三种HandlerAdapter:HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter和AnnotationMethodHandlerAdapter(3.1以后已经过时,使用RequestMappingHandlerAdapter)。DispatcherServlte会将这三个HandlerAdapter对象存储到它的handlerAdapters这个集合属性中,这样就完成了HandlerAdapter的注册。
2.DispatcherServlte会根据handlerMapping传过来的controller与已经注册好了的HandlerAdapter一一匹配,看哪一种HandlerAdapter是支持该controller类型的,如果找到了其中一种HandlerAdapter是支持传过来的controller类型,那么该HandlerAdapter会调用自己的handle方法,handle方法运用java的反射机制执行controller的具体方法来获得ModelAndView,例如SimpleControllerHandlerAdapter是支持实现了controller接口的控制器,如果自己写的控制器实现了controller接口,那么SimpleControllerHandlerAdapter就会去执行自己写控制器中的具体方法来完成请求。
4、 ViewResolver 的配置,从而将逻辑视图名解析为具体视图技术
4.1 InternalResourceViewResolver:
配置表示,将在Controller返回的ModelAndView的基础上,加上目录前缀/WEB-INF/jsp/,
加后文件名称后缀.jsp,由此等待下个页面如/WEB-INF/jsp/showCats.jsp
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property>
<property name="prefix"><value>/WEB-INF/jsp/</value></property>
<property name="suffix"><value>.jsp</value></property>
</bean>
4.2 ResourceBundleViewResolver:
在properties文件中维护class与视图资源的配置关系
5、 处理器(页面控制器)的配置,从而进行功能处理
最新文章
- 《PHP字符串函数》笔记
- CS0103: The name ‘Scripts’ does not exist in the current context解决方法
- mac上的git completion
- powerdesigner奇淫技
- 实现viewpager下的圆点滑动
- mongodb的python接口pymongo使用
- delete drop truncate
- Java随机生成定长纯数字或数字字母混合数
- 用UIKIT的模态对话框要注意的地方
- Ansible hostvars
- mac 辅助接口
- centos7 yum相关的常用命令
- keeplived
- 【转】mysql热备
- nginx配置打印请求响应内容
- BasicConverter 基本数据类型转换器
- spoj COT - Count on a tree (树上第K小 LCA+主席树)
- Vue项目中如何使用Element-UI以及如何使用sass
- 《Lua程序设计》9.3 以协同程序实现迭代器 学习笔记
- 第四课(1)——MySQL体系结构
热门文章
- EasyUI combobox 中文无法检索最终解决方案!
- (转)关于eclipse的TestNG的插件安装方法
- .NET CORE——Console中使用依赖注入
- opnet的simple_source模块学习 分类: opnet 2014-05-18 09:50 170人阅读 评论(0) 收藏
- 关于vue组件的一个小结
- Java 三目运算符表达式的一些问题
- FaceRank-人脸打分基于 TensorFlow 的 CNN 模型
- PPK提供的浏览器类型及版本检测方法
- Mybatis-Generator生成Mapper文件中<;if test=";criteria.valid";>;的问题解答
- 原生JS元素怎么取消事件