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

SpringMVC中执行流程

时间:2024-07-02 09:03:13浏览次数:15  
标签:执行 请求 SpringMVC 流程 视图 Handler DispatcherServlet

目录

14、SpringMVC执行流程

14.1、SpringMVC常用组件

  1. DispatcherServlet:前端控制器,不需要工程师开发,由框架提供

作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求

  1. HandlerMapping:处理器映射器,不需要工程师开发,由框架提供

作用:根据请求的url、method等信息查找Handler,即控制器方法

  1. Handler:处理器,需要工程师开发

作用:在DispatcherServlet的控制下Handler对具体的用户请求进行处理

  1. HandlerAdapter:处理器适配器,不需要工程师开发,由框架提供

作用:通过HandlerAdapter对处理器(控制器方法)进行执行

  1. ViewResolver:视图解析器,不需要工程师开发,由框架提供

作用:进行视图解析,得到相应的视图,例如:ThymeleafView、InternalResourceView、

RedirectView

  1. View:视图

作用:将模型数据通过页面展示给用户

14.2、DispatcherServlet初始化过程

DispatcherServlet 本质上是一个 Servlet,所以天然的遵循 Servlet 的生命周期。所以宏观上是 Servlet生命周期来进行调度。

①初始化WebApplicationContext

②创建WebApplicationContext

所在类:org.springframework.web.servlet.FrameworkServlet

③DispatcherServlet初始化策略

FrameworkServlet创建WebApplicationContext后,刷新容器,调用onRefresh(wac),此方法在DispatcherServlet中进行了重写,调用了initStrategies(context)方法,初始化策略,即初始化DispatcherServlet的各个组件

所在类:org.springframework.web.servlet.DispatcherServlet

14.3、DispatcherServlet调用组件处理请求

①processRequest()

FrameworkServlet重写HttpServlet中的service()和doXxx(),这些方法中调用了

processRequest(request, response)

所在类:org.springframework.web.servlet.FrameworkServlet

②doService()

所在类:org.springframework.web.servlet.DispatcherServlet

③doDispatch()

所在类:org.springframework.web.servlet.DispatcherServlet

④processDispatchResult()

14.4、SpringMVC的执行流程

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

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

    • 不存在
      1. 再判断是否配置了mvc:default-servlet-handler
      2. 如果没配置,则控制台报映射查找不到,客户端展示404错误
      3. 如果有配置,则访问目标资源(一般为静态资源,如:JS,CSS,HTML),找不到客户端也会展示404错误
    • 存在则执行下面的流程
      1. 根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain执行链对象的形式返回。
      2. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter
      3. 如果成功获得HandlerAdapter,此时将开始执行拦截器的preHandler(…)方法【正向】
      4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)方法,处理请求。在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
        • 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
        • 数据格式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
        • 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
      5. Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象。
      6. 此时将开始执行拦截器的postHandle(...)方法【逆向】。
      7. 根据返回的ModelAndView(此时会判断是否存在异常:如果存在异常,则执行 HandlerExceptionResolver进行异常处理)选择一个适合的ViewResolver进行视图解析,根据Model 和View,来渲染视图。
      8. 渲染视图完毕执行拦截器的afterCompletion(…)方法【逆向】。
      9. 将渲染结果返回给客户端。

标签:执行,请求,SpringMVC,流程,视图,Handler,DispatcherServlet
From: https://www.cnblogs.com/ning23/p/18279188

相关文章

  • SpringMVC接收参数的几种方法
    1.方式一:获取地址栏参数       形式一:@PathVariable//http://127.0.0.1:8080/user/123/roles/222@RequestMapping(value="/user/{userId}/roles/{roleId}",method=RequestMethod.GET)@ResponseBodypublicStringhello(@PathVariable("user......
  • 已解决java.security.acl.NotOwnerException:在ACL中尝试执行非所有者的操作的正确解决
    已解决java.security.acl.NotOwnerException:在ACL中尝试执行非所有者的操作的正确解决方法,亲测有效!!!目录问题分析出现问题的场景用户类和ACL初始化报错原因解决思路解决方法1.验证所有者身份示例代码2.正确设置所有者示例代码完整示例代码主类和ACL管理代码总......
  • 数据库系列-mysql-sql执行示例
    数据库定义语言--数据库查询语句模板--!数据库创建--创建数据库test,如果存在则不创建,默认字符集为utf8,不区分大小写,cs为大小写敏感,也可以使用utf8_bin,字符采用二进制存储CREATEDATABASEIFNOTEXISTS`test`DEFAULTCHARACTERSETutf8COLLATEutf8_general_ci;......
  • 流程控制
    流程控制1、Scanner输入 //创建一个scanner对象,用于接收键盘数据Scannerscanner=newScanner(System.in);//判断用户有没有输入字符串if(scanner.hasNext()){Strings=scanner.next();System.out.println("输出的......
  • 1-3.文本数据建模流程范例
    文章最前:我是Octopus,这个名字来源于我的中文名–章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github;这博客是记录我学习的点点滴滴,如果您对Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。importos#mac系统上pytorch和matplotlib在ju......
  • SpringMVC中的注解配置
    目录13、注解配置springmvc13.1、创建初始化的类,代替web.xml13.2、使用流程声明一个类来继承AbstractAnnotationConfigDispatcherServletInitializer,并且实现他的抽象方法实现配置SpringConfig的java文件实现SpringMvcConfig的java文件13.3、实例代码1.继承AbstractAnnotationConf......
  • SpringMVC的数据获取问题
    在传统的javaweb中我们获取数据是通过HttpServletRequest中的getParameter或者getHeader等方法来获取相关的信息。由此我们引出了以下问题:在SpringMVC中应该如何获取请求提交的数据呢?在SpringMVC中又应该如何获取请求头信息呢?在SpringMVC中又应该如何获取客户端提交的Cookie......
  • 2024年深圳市重点小巨人企业申报流程及材料准备要点
    面对2024年深圳市重点小巨人企业的申报机遇,众多中小企业正蓄势待发。这一政策旨在筛选具有专业化、精细化、特色化和创新力的领军企业,为他们提供政策支持和市场认可。然而,申报过程并非易事,它要求企业准确理解申报方式,严格遵守材料要求。那么,究竟需要采取哪些步骤,准备哪些材料,才......
  • Linux下二进制可执行文件分析 (nm,readelf,objdump 命令使用)
    最近在调试一些问题,发现几个命令很实用,记录一下。一 背景    也许大家都遇到过这种场景,就是有二进制代码,比如深度分析下此文件到底是什么格式的图片等,这篇文章就记录我分析下二进制可执行文件的过程,已经自己读写二进制文件的一些坑。分析的二进制执行文件为linux下......
  • 小程序视频下载:简化流程,提升体验
    引言微信小程序的便利性是显而易见的,但视频内容的下载限制也是一个值得关注的问题,需要用户寻找合适的解决方案。为了便于用户操作,我们提供了软件下载及说明书的电子版本。我们鼓励用户下载并体验软件的免费版本,以便更好地了解我们的产品和服务。说明书和软件下载地址:下载高......