首页 > 其他分享 >SpringMVC执行流程流程版

SpringMVC执行流程流程版

时间:2023-08-23 11:56:55浏览次数:40  
标签:请求 处理 SpringMVC 流程 default Handler 执行 servlet

1.用户向服务器发送请求,请求被SpringMVC前端控制器DispatcherServlet捕获。

2.DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI),判断请求URI对应的映射:

a.不存在

i.再次判断是否配置mvc:default-servlet-handler

ii:如果开启default-servlet-:会先交给DispatherServlet处理,处理不了交给default-servlet处理,404

  细节:

    开启了mvc:annotation-driven:先交给前端控制器处理,处理不了交给default-servlet处理。

    没有开启mvc:annotation-driven:全部交给default-servlet处理。

iii:如果没有配置mvc:default-servlet-handler

  前端控制器处理不了

 

b.存在执行下面的流程:

3.根据URI,调用HandlerMappring获得该Handler配置得所有相关的对象(包含Handler对象以及Handler对象对应的拦截器),最后HandlerExecutionChain执行链对象的形式返回。

4.DispatcherServlet根据获得的Handler,选择合适的HandlerAdapter。

5.如果成功获得HandlerAdapter,此时将开始执行拦截器的preHandler(...)方法【正向】

6.提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)方法,处理请求。在填充Handler的入参过程中,根据您的配置,Spring将帮你做一些额外的各种:

a) HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

b) 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

c) 数据格式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等

d) 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

7.Handler执行完成后,向DispatcherServlet返回一个ModleAndView对象。

8.此时将开始执行拦截器的postHandle(...)方法【逆向】

9.根据返回的ModleAndView(此时会判断是否存在异常,如果存在异常,则执行HandlerExceptionResolver进行异常处理)选择一个合适的ViewResolver进行视图解析,根据Model和View,来渲染视图.

10.渲染视图完毕执行拦截器的afterCompletion(...)方法【逆向】

 

标签:请求,处理,SpringMVC,流程,default,Handler,执行,servlet
From: https://www.cnblogs.com/topb3222/p/17650818.html

相关文章

  • 3、oracle迁移到postgres-执行动态sql传参不同
    目录oracle迁移到postgres-执行动态sql传参不同1、oracle使用的是:12、postgres使用的是$1oracle迁移到postgres-执行动态sql传参不同在sql字符串中,会动态传入值,使用阿拉伯数据定义传参的个数。1、oracle使用的是:1executeimmediate'select*fromsys_stuwherestu_name=......
  • 1、oracle迁移到postgres-执行sql方式execute不同
    目录oracle迁移到postgres-执行sql方式execute不同1、oracle使用executeimmediate2、postgres使用executeoracle迁移到postgres-执行sql方式execute不同1、oracle使用executeimmediateexecuteimmediate'sql';2、postgres使用executeexecuteimmediate'sql';......
  • SpringMVC执行流程注解版
    下面是SpringMVC执行流程的注解版:存在的问题:·1.web.xml文件需要存在(不然Tomcat(log->GBK编码)的War包构建不成功,部署会失败).2.spring和springmvc需要加载bean会有冲突的问题,可以统一管理Bean等WebInit(代替web.xml)//代替web.xmlpublicclassWebInitextends......
  • StoneDB 读、写操作的执行过程
    StoneDB是一款兼容MySQL的开源HTAP数据库。StoneDB的整体架构分为三层,分别是应用层、服务层和存储引擎层。应用层主要负责客户端的连接管理和权限验证;服务层提供了SQL接口、查询缓存、解析器、优化器、执行器等组件;Tianmu引擎所在的存储引擎层是StoneDB的核心,数据的组织......
  • 执行流程
    packagecom.mytest;importorg.junit.jupiter.api.*;importstaticorg.junit.jupiter.api.Assertions.assertEquals;publicclassCase2Test{//前置条件,只执行一次,方法必须时static@BeforeAllstaticvoidsetUpAll(){System.out.println("所有......
  • java流程控制01.Scanner
    用户交互ScannerScanner交互,在之前的基本语法学习中,并没有实现程序和人的交互,但是Java给我们提供了一个工具类,我们可以获取用户的输入。java.util.Scanner是java5的新特征,我们可以通过Scanner类来获取用户的输入。基本语法:Scanners=newScanner(System.in);通过Scanner......
  • SpringMVC 中中文乱码解决
    请求中文乱码在web.xml中配置spring自带的过滤器org.springframework.web.filter.CharacterEncodingFilter,只可以解决请求<!--spring自带的解决中文乱码的filter--><filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.fil......
  • Hive执行计划详解
    什么是HiveSQL执行计划HiveSQL执行计划描绘了SQL实际执行的整体轮廓,即SQL转化为对应计算引擎的执行逻辑;毫无疑问,这一块对于HiveSQL的优化是非常重要的。HiveSQL早期是基于规则的方式生成执行计划,在Hive0.14及之后,集成了ApacheCalcite,使得Hive能够基于成本代价来生成执行计......
  • pyinstaller打包成exe可执行文件
    1.安装pipinstallpyinstaller注意项目开发时,最好先创建一个虚拟环境。2.基本命令和参数#1.1依赖的文件,打包进exepyinstaller--hidden-importyour_moduleyour_script.pypyinstaller--hidden-importutilsmain.py#1.2添加依赖pyinstaller--add-data"dependen......
  • Hello, SpringMVC
    springMVC的执行流程 具体流程(1)当用户通过浏览器发起一个HTTP请求,请求直接到前端控制器DispatcherServlet;(2)前端控制器接收到请求以后调用处理器映射器HandlerMapping,处理器映射器根据请求的URL找到具体的Handler,并将它返回给前端控制器;(3)前端控制器调用处理器适配器Handle......