博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC之一:SpringMVC原理
阅读量:5072 次
发布时间:2019-06-12

本文共 1990 字,大约阅读时间需要 6 分钟。

 

Spring MVC工作流程图
 
图一

 

 
图二 

 

关键组件:

DispatcherServlet:前端控制器,与大多数基于Java的Web框架一样, Spring MVC所有的请求都会通过一个前端控制器(front controller)Servlet。前端控制器是常用 的Web应用程序模式,在这里一个单实例的Servlet将请求委托给应用程序的其他组件来执行 实际的处理。DispatcherServlet的任务是将请求发送给Spring MVC控制器(controller)。主要工作内容:
  1、查询处理器映射(handler mapping) 来确定请求的下一站在哪里(在典型的应用程序中可能会有多个控制器,DispatcherServlet需要知道应该将请求发送给哪个控制器。所以DispatcherServlet以会查询一个或多个处理器映射(handler mapping) 来确定请求的下一站在哪里。处理器映射会根据请求所携带的URL信息来进行决策。),将请求丢给controller。
  2、将controller返回的逻辑视图
使用视图解析器(view resolver) 来解析匹配为一个特定的视图实现。
  3、将根据特定的视图的实现(可能是JSP) ,在这里dispatcherServlet交付模型数据,由该视图实现来渲染出的结果返回给客户端。
 controller:控制器是一个用于处理请求的Spring组件,主要工作是:
  1、将业务逻辑委托给一个或多个服务对象进行处理,接收服务对象的返回模型数据。
  2、将模型数据打包,并且标示出用于渲染输出的视图名。它接下来会将请求连同模型和视图名发送回DispatcherServlet 。
处理器映射(handler mapping) :配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),供DispatcherServlet调用查询,并以HandlerExecutionChain对象的形式返回。
ModelAndView:控制器在完成逻辑处理后,通常会产生一些信息,这些信息需要返回给用户并在浏览器上显 示。这些信息被称为模型(model)。不过仅仅给用户返回原始的信息是不够的——这些信息需 要以用户友好的方式进行格式化,一般会是HTML。所以,信息需要发送给一个视图(view), 通常会是JSP。
视图解析器(view resolver):将逻辑视图名匹配为一个特定的视图实现,它可能是也可能不是JSP。
Spring工作流程描述
      1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;
      2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回。 DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(
附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
      3.  提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
      HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
      数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
      数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
      数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
      4.  Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
      5.  根据返回的ModelAndView,DispatcherServlet 调用
视图解析器(view resolver),视图解析器会选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet;
      7. ViewResolver 结合Model和View,来渲染视图
      8. 将渲染结果返回给客户端。
 

转载于:https://www.cnblogs.com/duanxz/p/3755788.html

你可能感兴趣的文章
移动端页面开发适配 rem布局原理
查看>>
Ajax中文乱码问题解决方法(服务器端用servlet)
查看>>
会计电算化常考题目一
查看>>
阿里云服务器CentOS6.9安装Mysql
查看>>
剑指offer系列6:数值的整数次方
查看>>
js 过滤敏感词
查看>>
poj2752 Seek the Name, Seek the Fame
查看>>
软件开发和软件测试,我该如何选择?(蜗牛学院)
查看>>
基本封装方法
查看>>
bcb ole拖拽功能的实现
查看>>
生活大爆炸之何为光速
查看>>
bzoj 2456: mode【瞎搞】
查看>>
[Typescript] Specify Exact Values with TypeScript’s Literal Types
查看>>
[GraphQL] Reuse Query Fields with GraphQL Fragments
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>
两种最常用的Sticky footer布局方式
查看>>
Scrapy实战篇(三)之爬取豆瓣电影短评
查看>>
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>