`

Spring Mvc——处理请求

阅读更多

原创内容,转载请注明出处

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框架围绕DispatcherServlet这个核心展开,DispatcherServlet的作用是截获请求并组织一系列组件共同完成请求的处理工作。 JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它...

    spring杂谈 作者zhang KaiTao

    1. spring杂谈[原创] 1.1 Spring事务处理时自我调用的解决方案及一些实现方式的风险 ...1.32 Spring3 Web MVC下的数据类型转换(第一篇)——《跟我学Spring3 Web MVC》抢先看 1.33 Spring 注入集合类型

    Servlet+JSP和Spring+MVC初学指南

    Java Servlet技术简称Servlet技术,是Java开发Web ...因为Servlet在创建后(处理第一个请求时)就一直保持 在内存中。此后,SUN公司发布了JavaServer Pages(JSP)技术,以进一步简化servlet程序开发。

    详解SpringMVC——接收请求参数和页面传参

    主要介绍了详解SpringMVC——接收请求参数和页面传参,小编觉得挺不错的,现在分享给大家,也给大家做个参考。

    spring-framework-3.1.0.RELEASE.zip

    Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。... 1、核心容器 2、Spring 上下文 3、Spring AOP 4、Spring DAO 5、Spring ORM 6、Spring Web 模块 7、Spring MVC 框架

    学习SpringMVC——如何获取请求参数详解

    本篇文章主要介绍了SpringMVC——如何获取请求参数详解,详细的介绍了每种参数注解的用法。具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

    Spring.3.x企业应用开发实战(完整版).part2

    15.2.2 请求处理方法签名概述 15.2.3 处理方法签名详细说明 15.2.4 使用HttpMessageConverter 15.2.5 处理模型数据 15.3 处理方法的数据绑定 15.3.1 数据绑定流程剖析 15.3.2 数据转换 15.3.3 数据格式化 15.3.4 ...

    spring web flow demo

    从清单 1 中,应注意到一个很重要的特征—— Spring Web Flow 语义与 Servlet API 3 无关。更确切地讲, Spring Web Flow 语义关注的是业务的流程,并未与 Sun 公司的 Web 规范紧密结 合,这种描述是更高层次的抽象...

    security:Spring Security 开发安全的REST服务 —— JoJozhai

    第3章 使用Spring MVC开发RESTful API 3-4 用户创建请求 3-5 修改和删除请求 3-6 服务异常处理 3-7 使用切片拦截REST服务 3-8 使用Filter和Interceptor拦截REST服务 3-9 使用REST方式处理文件服务 3-10 使用...

    Spring3.x企业应用开发实战(完整版) part1

    15.2.2 请求处理方法签名概述 15.2.3 处理方法签名详细说明 15.2.4 使用HttpMessageConverter 15.2.5 处理模型数据 15.3 处理方法的数据绑定 15.3.1 数据绑定流程剖析 15.3.2 数据转换 15.3.3 数据格式化 15.3.4 ...

    java web 开发详解

    Java 的 Web框架虽然各不相同,但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向抽象实现请求和响应的...

    springBoot 2.0开发构建多模块应用及项目打包(IDEA工具)开发源码

    客户端发送 GET 请求,获取所有用户(Web Flux形式——SpringWebflux是SpringFramework5.0添加的新功能) 包含model, persistence, web三个子模块工程对应module,包含代码User实体类,UserRepository数据操作类,...

    harmonyos2-spring-ratpack-2016:SpringBootRatpack网络研讨会代码(https://spring.

    spring:spring-webmvc:1.0.2 2005 年发布 单个自包含工件——独立的 jar/war 或可以部署到 Servlet 容器的 war @Configuration鼓励,尽管您当然可以在 XML 中定义 bean 图 1. 但是为什么要在@Configuration使用 XML ...

    Java Web程序设计教程

    11.6项目实战——spring问候程序 239 本章小结 241 课后练习 241 第12章springaop 242 12.1aop基础 242 12.1.1aop与oop的比较 242 12.1.2aop的核心概念 243 12.1.3java动态代理与aop 244 12.1.4springaop...

    电子商城系统设计实习报告.doc

    Spring MVC缺点: 大量的XML配置文件,太过灵活——没有公共的父控制器,没有内置的Ajax支持。 2 HTML语言: 超文本标记语言,标准通用标记语言下的一个应用。"超文本"就是指页面内可以包含 图片、链接,甚至音乐、...

    java面试题库2021.pdf

    ②请求/相应架构原理 ③web 容器 四、 JDBC 编程 1、 SQL 基础 2、 JDBC 基础 ①数据库 ②数据库连接池 ③事物管理, 批处理 3、 JDBC 进阶 五、 XML 编程 1、 XML 基础 2、 XML 进阶 3、 Web service ①WSDL 与 ...

    webx3框架指南PDF教程附学习Demo

    • 扩展性 —— Webx 3.0对Spring做了扩展,使Spring Bean不再是“bean”,而是升级成“组件”。一个组件可以扩展另一个组件,也可以被其它组件扩展。这种机制造就了Webx的非常好的扩展性,且比未经扩展的Spring更易...

    基于java的博客网站设计与开发(毕业论文)

    系统如何以Spring 框架为核心,向下整合Hibernate进行持久层访问,向上整合Struts 按清晰的MVC 模式控制,怎样划分应用的层次。简述了页面的请求的分发及流程。 最后对BLOG网站开发中所碰到的一些问题,并针对这些...

    网上体育商城的设计与实现毕业设计答辩PPT.pptx

    MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照View、 Controller 、Model的方式进行分离,这样一个应用被分成三个层——视图层、控制层、模型层 。模型(Model)相当于人体的骨骼,里面...

    jsp博客系统 毕业论文设计

    系统如何以Spring 框架为核心,向下整合Hibernate进行持久层访问,向上整合Struts 按清晰的MVC 模式控制,怎样划分应用的层次。简述了页面的请求的分发及流程。 最后对BLOG网站开发中所碰到的一些问题,并针对这些...

Global site tag (gtag.js) - Google Analytics