原创内容,转载请注明出处
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框架围绕DispatcherServlet这个核心展开,DispatcherServlet的作用是截获请求并组织一系列组件共同完成请求的处理工作。 JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它...
1. spring杂谈[原创] 1.1 Spring事务处理时自我调用的解决方案及一些实现方式的风险 ...1.32 Spring3 Web MVC下的数据类型转换(第一篇)——《跟我学Spring3 Web MVC》抢先看 1.33 Spring 注入集合类型
Java Servlet技术简称Servlet技术,是Java开发Web ...因为Servlet在创建后(处理第一个请求时)就一直保持 在内存中。此后,SUN公司发布了JavaServer Pages(JSP)技术,以进一步简化servlet程序开发。
主要介绍了详解SpringMVC——接收请求参数和页面传参,小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。... 1、核心容器 2、Spring 上下文 3、Spring AOP 4、Spring DAO 5、Spring ORM 6、Spring Web 模块 7、Spring MVC 框架
本篇文章主要介绍了SpringMVC——如何获取请求参数详解,详细的介绍了每种参数注解的用法。具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
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 ...
从清单 1 中,应注意到一个很重要的特征—— Spring Web Flow 语义与 Servlet API 3 无关。更确切地讲, Spring Web Flow 语义关注的是业务的流程,并未与 Sun 公司的 Web 规范紧密结 合,这种描述是更高层次的抽象...
第3章 使用Spring MVC开发RESTful API 3-4 用户创建请求 3-5 修改和删除请求 3-6 服务异常处理 3-7 使用切片拦截REST服务 3-8 使用Filter和Interceptor拦截REST服务 3-9 使用REST方式处理文件服务 3-10 使用...
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框架虽然各不相同,但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向抽象实现请求和响应的...
客户端发送 GET 请求,获取所有用户(Web Flux形式——SpringWebflux是SpringFramework5.0添加的新功能) 包含model, persistence, web三个子模块工程对应module,包含代码User实体类,UserRepository数据操作类,...
spring:spring-webmvc:1.0.2 2005 年发布 单个自包含工件——独立的 jar/war 或可以部署到 Servlet 容器的 war @Configuration鼓励,尽管您当然可以在 XML 中定义 bean 图 1. 但是为什么要在@Configuration使用 XML ...
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...
Spring MVC缺点: 大量的XML配置文件,太过灵活——没有公共的父控制器,没有内置的Ajax支持。 2 HTML语言: 超文本标记语言,标准通用标记语言下的一个应用。"超文本"就是指页面内可以包含 图片、链接,甚至音乐、...
②请求/相应架构原理 ③web 容器 四、 JDBC 编程 1、 SQL 基础 2、 JDBC 基础 ①数据库 ②数据库连接池 ③事物管理, 批处理 3、 JDBC 进阶 五、 XML 编程 1、 XML 基础 2、 XML 进阶 3、 Web service ①WSDL 与 ...
• 扩展性 —— Webx 3.0对Spring做了扩展,使Spring Bean不再是“bean”,而是升级成“组件”。一个组件可以扩展另一个组件,也可以被其它组件扩展。这种机制造就了Webx的非常好的扩展性,且比未经扩展的Spring更易...
系统如何以Spring 框架为核心,向下整合Hibernate进行持久层访问,向上整合Struts 按清晰的MVC 模式控制,怎样划分应用的层次。简述了页面的请求的分发及流程。 最后对BLOG网站开发中所碰到的一些问题,并针对这些...
MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照View、 Controller 、Model的方式进行分离,这样一个应用被分成三个层——视图层、控制层、模型层 。模型(Model)相当于人体的骨骼,里面...
系统如何以Spring 框架为核心,向下整合Hibernate进行持久层访问,向上整合Struts 按清晰的MVC 模式控制,怎样划分应用的层次。简述了页面的请求的分发及流程。 最后对BLOG网站开发中所碰到的一些问题,并针对这些...