广告
返回顶部
首页 > 资讯 > 数据库 >springMVC执行流程详解
  • 819
分享到

springMVC执行流程详解

servletjavamvc运维mysql 2023-08-18 09:08:21 819人浏览 独家记忆
摘要

springMVC执行流程 一,springmvc执行流程 1,MVC架构的由来 主要由model层,view层和controller层组成。 1.1,jsp模型 主要是结构简单,开发这个小型项目的效率高,主要是由这个jsp和javaBea

springMVC执行流程

一,springmvc执行流程

1,MVC架构的由来

主要由model层,view层和controller层组成。

1.1,jsp模型

主要是结构简单,开发这个小型项目的效率高,主要是由这个jsp和javaBean组成。但是jsp同时负责了controller层和view层,因此所有的代码都写在这个jsp里面,导致这个代码的重用性很低,维护不方便,因此这种架构被淘汰。

1.2,servlet模型

对上一个模型进行了一次改良,将这个controller层和view层进行了这个分离,让每个部分各司其职。请求由controller控制器完成,jsp就是专门用来展示数据,提高了代码可重用性和易维护性。

2,springMVC执行流程

1,客户端发送请求到这个DispatcherServlet前端控制器

2,前端控制器会通过这个HandlerMapping处理器映射器,找到合适的处理器,就是通过这个输入的url,找到对应的handler

3,返回处理器的执行链,里面会包含多个拦截器的信息,以及需要查找的处理器handler的信息

4,找处理器适配器HandlerAdapter,这一步开始就会去调用handler里面的方法

5,通过执行这个handler里面的方法,会去找具体的controller方法

6,找到具体的controller之后,会返回一个modelAndView给这个HanderAdapter给处理器适配器

7,处理器适配器获取到ModelAndView之后,会将这个结果返回给DispatcherServlet前端控制器

8,通过这个ViewResolver视图解析器进行解析这个ModelAndView

9,解析完成之后,会将这个view返回给前端DispatcherServlet前端控制器

10,将model中的数据填充到这个view视图里面,最后去渲染视图

二,源码分析

1,首先打开这个DispatcherServlet类,可以发现这个类是继承了FrameworkServlet

public class  DispatcherServlet  extends  FrameworkServlet{ ...}

2,这个类里面有一个doService方法,里面有一个比较重要的方法,叫doDispatch方法

doDispatch(request, response);

3,进入这个**doDispatch()**方法里面,可以看到以下几行代码,主要是来返回这个处理器执行链,处理器适配器等操作。

//处理器执行链HandlerExecutionChain mappedHandler = null;//检测当前请求是否需要做文件上传processedRequest = checkMultipart(request);//获取需要的映射器以及拦截器等mappedHandler = getHandler(processedRequest);if (mappedHandler == null) { noHandlerFound(processedRequest, response);return;}//找这个处理器适配器HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());//调用拦截器 mappedHandler.applyPreHandle(processedRequest, response);//适配器开始调用这个handlermv = ha.handle(processedRequest, response, mappedHandler.getHandler());//处理这个结果集processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);

4,接下来所有的分析都基于这个**doDispatch()**方法,来对里面的方法做一个具体的描述。

接下来看看这个getHandler方法,主要是通过这个request请求,来获取对应handler。

protected HandlerExecutionChain getHandler(httpservletRequest request) throws Exception { if (this.handlerMappings != null) {         //遍历全部获取到的处理器映射器for (HandlerMapping hm : this.handlerMappings) {             //通过这个请求进行匹配,找到这个handlerHandlerExecutionChain handler = hm.getHandler(request);            //找到则返回if (handler != null) { return handler;}        }}return null;}

5,接下来看看这个获取处理器适配器getHandlerAdapter的方法,适配器也有多种,会根据不同的handler适配不同的适配器。

protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException { if (this.handlerAdapters != null) { for (HandlerAdapter ha : this.handlerAdapters) { if (ha.supports(handler)) { return ha;}}}throw new ServletException();}

6,再看这个doDispatch方法中的handle方法,可以点进去发现具体的实现如下。最终会以一个controller的对象返回

public  ModelAndView  handle(HttpServletRequest request,  HttpServletResponse response,  Object handler)  throws  Exception  { //以一个controller的方式返回 return ((Controller) handler).handleRequest(request, response);}

7,可以自定义重写这个handleRequest方法,最后以一个ModelAndView的格式返回给这个处理适配器,处理器适配器将这个ModelAndView返回给前端控制器。

@Overridepublic  ModelAndView  handleRequest(HttpServletRequest request,  HttpServletResponse response)  throws  Exception  { ModelAndView mv = new ModelAndView();mv.setViewName("success");mv.addObject("hello","zhs");return mv;}

8,接下来看看这个前端控制器处理这个ModelAndView的视图解析,主要是通过这个processDispatchResult方法来实现。

if (mv != null && !mv.wasCleared()) {     //如果这个modelAndView不为空,就会开始进入正式的解析render(mv, request, response);if (errorView) { WEBUtils.clearErrorRequestAttributes(request);}}

再进入这个render方法里面,可以发现这个视图解析器会对这个视图进行一个具体的解析,并且会将解析的view返回给这个DispatcherServlet里面,最终会将这个数据进行一个转发或者重定向,对这个view进行一个渲染,最终响应到这个客户端。

//会进行一个具体的解析view = resolveViewName(viewName, mv.getModelInternal(), locale, request);//解析view.render(mv.getModelInternal(), request, response);//输出renderMergedOutputModel(mergedModel, getRequestToExpose(request), response);//对这个获取的数据进行转发或者重定向RequestDispatcher rd = getRequestDispatcher(request, dispatcherPath);

来源地址:https://blog.csdn.net/band_mmbx/article/details/126314832

您可能感兴趣的文档:

--结束END--

本文标题: springMVC执行流程详解

本文链接: https://www.lsjlt.com/news/373800.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • springMVC执行流程详解
    springMVC执行流程 一,springMVC执行流程 1,MVC架构的由来 主要由model层,view层和controller层组成。 1.1,jsp模型 主要是结构简单,开发这个小型项目的效率高,主要是由这个jsp和javaBea...
    99+
    2023-08-18
    servlet java mvc 运维 mysql
  • SpringMVC 执行流程
    SpringMVC 的执行流程 SpringMVC 框架 ​ SpringMVC 是一个基于 Java 的实现了 MVC 设计模式的请求驱动类型的轻量级 Web 框架,通过把 Model,View,...
    99+
    2023-09-04
    java 后端 mvc
  • SpringMvc框架的简介与执行流程详解
    目录一、SpringMvc框架简介 1、Mvc设计理念2、SpringMvc简介 二、SpringMvc执行流程 1、流程图解2、步骤描述 3、核心组件 三、整合Spring框架配置...
    99+
    2022-11-12
  • SpringMVC执行过程详细讲解
    目录SpringMVC常用组件DispatcherServlet初始化过程SpringMVC的执行流程SpringMVC常用组件 DispatcherServlet:前端控制器,不需...
    99+
    2022-11-13
  • SpringMVC的执行流程有哪些
    今天就跟大家聊聊有关SpringMVC的执行流程有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。#简易版客户发送请求经过 DisPatcherServlet 核心过滤器DisPa...
    99+
    2023-05-31
    springmvc
  • Java从源码角度解析SpringMVC执行流程
    SpringMVC执行流程在面试中经常会被问到,本篇文章通过源码的方式简单的了解一下SpringMVC执行流程。 先看流程 先看一下SpringMVC执行流程再看源码,有助理解: ⽤...
    99+
    2023-05-16
    Spring MVC SpringMVC执行流程
  • 详解JavaScript引擎V8执行流程
    目录一、V8来源二、V8的服务对象三、V8的早期架构四、V8早期架构的缺陷五、V8的现有架构六、V8的词法分析和语法分析七、V8 AST抽象语法树八、字节码九、Turbofan一、V...
    99+
    2022-11-12
  • SpringCloud Gateway中GatewayFilterChain执行流程详解
    上一节我们把FilteringWebHandler中handle方法的过滤器统一排序的那部分逻辑讲完了 接着就是生成过滤器器链,执行过滤方法 return new DefaultGa...
    99+
    2022-11-13
    SpringCloud GatewayFilterChain SpringCloud Gateway
  • SpringMVC执行步骤、Model的使用详解
    目录第一个SpringMvc HelloWorld无启动类前端操作后台执行步骤第二个SpringMvc项目项目简介知识点整合代码实例:SpringMvc02SpringMvc对res...
    99+
    2022-11-12
  • 详解PHP的执行原理和流程
    目录简介PHP启动第一步PHP启动第二步PHP关闭第一步PHP关闭第二步PHP底层工作原理①Zend引擎②Extensions③Sapi④上层应用构架思想Apache和php的关系A...
    99+
    2022-11-12
  • MySQL执行SQL语句的流程详解
    目录1、通常sql执行流程1.1 问题1:mysql谁去处理网络请求?1.2 问题2:MySQL如何执行sql语句?1.3 查询解析器1.4 查询优化器1.5 存储引擎1.6 执行器2、总结1、通常sql执行流程 用户...
    99+
    2022-09-25
  • Mysql表连接的执行流程详解
    目录1. 前言1.1 mysql连接的原理1.2 show warnings命令2. 准备工作3. inner join内连接on、where的区别4. left join左连接on、where的区别...
    99+
    2022-08-25
  • web.xml SpringBoot打包可执行Jar运行SpringMVC加载流程
    目录部署到webapps目录启动web.xml文件context-paramContextLoaderListener初始化Spring Context。创建ApplicationC...
    99+
    2023-05-14
    web.xml SpringBoot打包Jar SpringMVC加载流程
  • SpringMVC集成FastJson使用流程详解
    目录一、json数据格式回归1.什么是json2.Json数组格式3.Json对象格式4.数组对象相互嵌套格式二、FastJson介绍三、FastJson序列化API四、FashJs...
    99+
    2023-02-06
    SpringMVC集成FastJson SpringMVC FastJson
  • 关于MVC与SpringMVC的介绍、区别、执行流程
    目录介绍区别两者执行流程MVC执行流程:Spring MVC执行流程:介绍 MVC(Model-View-Controller)是一种软件架构模式,其中应用程序被划分为三个部分:模型...
    99+
    2023-05-19
    MVC SpringMVC区别 SpringMVC执行流程
  • MySql执行流程与生命周期详解
    目录一、mysql 客户端二、MySQL 服务端1. 查询缓存2. SQL 解析器3. 查询优化器4. SQL 执行器总结我们经常会在一起讨论怎样优化 SQL、怎样优化数据库,那么请问你知道执行一条 SQL 的过程中都经...
    99+
    2022-09-13
  • mysql 执行流程解析
    Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核 心服务功能,以及所有的内置函数,所有跨存储引 擎的功能都在这一层实现,比如存储过程、触发器、视图等 而存储引擎层负责数据的存储和提取。其架构模式是...
    99+
    2021-01-18
    mysql 执行流程解析
  • Python执行流程控制详情
    目录一 引子二 分支结构2.1 什么是分支结构2.2 为什么要用分支结构2.3 如何使用分支结构2.3.1 if语法2.3.2 if应用案例三 循环结构3.1 什么是循环结构3.2 ...
    99+
    2022-11-10
  • SpringMVC核心DispatcherServlet处理流程分步详解
    目录处理流程接收客户端请求创建请求对象处理请求映射调用控制器渲染视图源码解析初始化处理请求处理请求映射渲染视图示例解析创建控制器配置 DispatcherServlet配置视图解析器...
    99+
    2023-05-15
    SpringMVC DispatcherServlet SpringMVC DispatcherServlet处理流程
  • MyBatis详细执行流程的介绍
    本篇内容介绍了“MyBatis详细执行流程的介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Mybatis简介MyBatis 是一款优秀的...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作