SpringMVC工作流程
来源:互联网 发布:linux 桌面虚拟化 编辑:程序博客网 时间:2024/05/24 05:34
Spring Web MVC核心架构图
核心架构的具体流程步骤如下:
1、 首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;
2、 DispatcherServlet——>HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
3、 DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;
4、 HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);
5、 ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;
6、 View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;
7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。
Spring工作流程描述
1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;
2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
数据根式化:对请求消息进行数据格式化。如将字符串转换成格式化数字或格式化日期等
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
5. Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
6. 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
7. ViewResolver 结合Model和View,来渲染视图
8. 将渲染结果返回给客户端。
- 【SpringMVC】SpringMVC的工作流程
- springMVC工作流程
- SpringMVC的工作流程
- SpringMVC的工作流程
- SpringMVC的工作流程
- springMVC的工作流程
- 浅谈SpringMVC工作流程
- SpringMVC的工作流程
- SpringMVC工作流程分析
- SpringMVC工作流程
- SpringMVC的工作流程
- Springmvc的工作流程
- SpringMVC的工作流程
- springmvc工作流程
- springmvc的工作流程
- springmvc的工作流程
- SpringMVC工作流程
- 详解SpringMVC 工作流程
- 关于nodejs express4.X框架不支持layout模板的问题解决
- 考试系统web服务器
- 《ES6标准入门》:数组的扩展
- The Joy of Clojure.pdf 英文原版 免费下载
- Hibernate的load()和get()区别
- SpringMVC工作流程
- Spring MVC基本环境搭建
- A星算法详解(个人认为最详细,最通俗易懂的一个版本)
- LeetCode 693. Binary Number with Alternating Bits
- Python in Practice.pdf 英文原版 免费下载
- mysql 高可用性
- 趣图丨哇哦!2018年就要来了!
- Python的各种库函数的管理及一些常用库的安装例如OpenCV和Numpy等
- Kotlin知识笔记(1)