原创内容,转载请注明出处
1、概述
下面这张图是Spring mvc处理请求的整体流程,其中Front controller指的是DispatcherServlet类。
1.客户端所有的请求都会发送到DispatcherServlet,由DispacherServlet处理。
2.DispacherServlet将请求分发到不同的Controller类,由Controller类去处理对应的请求。
3.Controller类将对应的请求处理完后,将处理后对应的model或者视图信息给将DispatcherServlet类。
4.DispatcherServlet将这些信息交由视图模版解析。
5.视图模版解析到的对应视图信息等传给DispacherServlet。
6.最后由DispacherServlet将视图信息推送响应给客户端。
因此可以看出DispatcherServlet类在Spring mvc框架中占据了一个非常重要的地位,它接收所有请求,然后将对应的请求分发到对应的功能类实例去处理,然后将处理后结果响应给客户端。
2、Dispatcher分发处理请求
在DispatcherServlet的子类FrameworkServlet中,可以看到它已经重写了父类HttpServlet的所有请求方式的对应方法。这些方法最后都调用processRequest方法去处理请求,该方法对请求做了简单处理后又调用了doService方法,该方法由父类DispatcherServlet实现。
在DispatcherServlet类的doService方法中,首先为Request请求设置了一些对应的属性实例,然后调用doDispatch方法去分发处理请求。以下是实际处理过程
1.在doDispatch方法中,调用checkMultipart方法去判断该请求是否是Multipart请求(比如文件上传),如果是,则使用MultipartResolver实例将请求转换为Multipart请求。
2.调用getHandler方法去获取HandlerExecutionChain实例对象。在该方法中首先查找符合当前的HandlerMapping实例,然后调用HandlerMapping实例的getHandler方法去获取HandlerExecutionChain实例,该实例包装了HandlerMapping实例对象,并在该实例中设置了相匹配的拦截器。
3.调用getHandlerAdapter方法,为当前HandlerMapping实例查找对应的HandlerAdapter适配器实例。
4.调用HandlerExecutionChain实例的applyPreHandler方法,去调用其拦截器的preHandler方法(前置拦截方法)执行。如果返回true,则继续往后处理,否则停止方法调用处理。(前置拦截方法执行调用)
5.调用HandlerAdapter适配器实例的handler方法去处理当前请求,并返回对应的ModelAndView对象。(调用目标对象的对应方法执行)
6.调用HandlerExecutionChain实例的applyPostHandler方法,去调用其拦截器的postHandler方法(后置拦截方法)执行。(后置拦截方法执行调用)
7.调用processDispatchResult方法去处理最后结果(ModelAndView或者异常),该方法调用render方法去渲染解析最后视图。在render方法中首先通过ViewResolver解析器去获取对应的视图名称的视图View对象,最后在调用对应View对象的render方法渲染处理视图,并响应对应结果给客户端。(调用对应View渲染视图)
4、总结
如上,DispatcherServlet类实际分发处理请求主要有如下几个重要步骤。将HandlerMapping和对应的拦截器包装在一个HandlerExecution实例对象;然后获取该HandlerMapping想匹配的HandlerAdapter适配器;之后调用前置拦截器方法,如果返回true,则调用适配器去处理当前请求,并返回对应的ModelAndView对象;然后在调用后置拦截器方法;最后调用ViewResolver视图解析器解析出对应的视图View对象,并调用View对象去渲染视图,并响应对应结果给客户端。
如下列出Spring Mvc处理请求所设计到的重要接口和类。
HandlerMapping接口、HandlerInterceptor拦截器接口和其包装类MappedInterceptor、HandlerExecutionChain类、HandlerAdapter适配器接口、ViewResolver视图解析器接口、View接口、HttpMessageConvert消息转换接口
相关推荐
**Spring MVC —— 第一个应用程序** Spring MVC 是 Spring 框架的一个模块,主要用于构建 Web 应用程序。它提供了一种模型-视图-控制器(MVC)架构,简化了开发过程,使得开发者可以专注于业务逻辑而不必过于关心...
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用来处理 Web 请求。在本文中,我们将深入探讨 Spring MVC 的基本使用,包括它的架构、配置、控制器、模型视图解析以及数据绑定...
Spring MVC 是一个强大的Java Web开发框架,用于构建高效、可维护的Web应用...通过阅读"实验4 Spring MVC——Web.pdf"和研究"qasystemraw"、"qasystem"的实际项目,你可以更全面地掌握Spring MVC在实际应用中的运用。
当Controller处理完请求并返回一个视图名时,Spring MVC会调用配置的ViewResolver来解析这个视图名,找到相应的视图模板,并将模型数据绑定到视图上,以便进行渲染。 Spring MVC提供了多种内置的ViewResolver实现,...
在"基于spring mvc信息管理系统完整版本"中,我们可以看到Spring MVC被用来处理用户交互,转发请求,以及与数据库进行数据交换。 Spring MVC的工作流程大致如下:当用户发起一个HTTP请求时,DispatcherServlet作为...
它提供了一个模型-视图-控制器(MVC)架构,简化了处理HTTP请求和响应的过程。在Spring Boot中,Spring MVC被默认集成,使得创建REST服务变得更加简单。 **创建Spring Boot项目** 1. 初始化项目:你可以使用Spring...
在"实验5 Spring MVC——API.pdf"中,可能详细介绍了如何创建和测试一个Spring MVC API的步骤。这个文档可能包括了设置控制器、配置URL映射、处理数据绑定、异常处理等方面的内容。通过阅读这份文档,开发者能更好地...
**Spring MVC 入门教程——基于登录示例** Spring MVC 是 Spring 框架的一个模块,主要用于构建 Web 应用程序。它提供了模型-视图-控制器(MVC)架构,帮助开发者分离业务逻辑、数据处理和用户界面,使得代码更易于...
本文探讨的是一个常见的问题——Spring MVC 无法直接接收 List 类型参数。 #### 问题描述 当前端使用 jQuery 向后台传递数组类型的参数时,Java 后台尝试直接通过 `List` 类型来接收这些参数,却发现无法取到任何...
Spring MVC通过DispatcherServlet接收请求,分发到相应的处理器,处理完成后返回响应。这样可以使Web应用程序结构清晰,易于维护。 **MyBatis**是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。...
- **DispatcherServlet**:Spring MVC的核心组件,用于处理所有HTTP请求。它读取配置文件(如servlet.xml),初始化控制器、视图解析器等组件。 - **HandlerMapping**:用于将URL映射到特定的控制器方法上。 - **...
在本视频教程“Spring MVC + Spring + Hibernate 全注解整合开发视频教程 04”中,我们将深入探讨Java企业级开发中的三大核心技术——Spring、Spring MVC和Hibernate的集成与应用,尤其是通过注解实现的简化配置。...
- **请求处理与响应渲染**:DispatcherServlet 委托给特殊 Bean 来处理请求并呈现适当的响应。这里所谓的“特殊 Bean”是指由 Spring 管理的对象实例,这些对象实现了 Web MVC 框架合同。这些 Bean 通常具有内置合同...
本项目——"spring+spring mvc+mybatis+mysql+dubbo整合开发任务流程后台管理系统"提供了一个完整的解决方案,涵盖了前端到后端的关键技术栈。下面我们将深入探讨这些技术及其在系统中的作用。 **Spring框架**:...
Spring MVC是Spring框架的一部分,主要用于处理Web应用程序的请求和响应,而MyBatis则是一个轻量级的持久层框架,简化了数据库操作。 【描述】提到"改一下链接就能使用",意味着这个项目已经配置好了基本的服务端...
标题中的“Spring MVC Ibatis Bean 根据mysql数据表——代码生成工具”就是这样的一个工具,它能够根据MySQL数据库中的表结构,快速生成符合Spring MVC和Ibatis框架的代码。 Rapid-generator-0.2v可能是这个工具的...
Spring MVC作为Spring框架的一部分,是处理Web请求的强大工具,而MYBatis则是一个轻量级的持久层框架,专注于SQL映射和数据库操作。这两者的结合为开发者提供了高效、灵活的解决方案,能够简化开发流程,提高代码可...
在Spring MVC中,Controller是一个处理用户请求的Java类,通常使用@Controller注解标记。我们可以创建一个名为`HelloWorldController`的类,定义一个处理GET请求的方法,如`@RequestMapping("/hello")`,并在方法体...
二、Spring MVC——模型视图控制器 Spring MVC是Spring框架提供的Web应用开发模型,它将请求处理逻辑、业务逻辑和视图分离,使代码结构更加清晰。 2.1 请求处理流程 一个典型的Spring MVC请求处理流程包括: - ...
1. **Spring MVC**:Spring MVC是Spring框架的一部分,专门用于处理Web请求。它提供了一种模型-视图-控制器(MVC)架构模式,使得开发者可以将业务逻辑、数据和用户界面分离。在配置Spring MVC时,我们需要在`web....