`
y806839048
  • 浏览: 1080448 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

SpringMVC工作原理概述

阅读更多

SpringMVC是当今最主流的Web MVC框架,没有之一,要做一名合格的JavaWeb工程师,学好它势在必行!

与Struts2原理不同,SpringMVC是通过最基础最传统的servlet来实现对框架源代码的封装以及对整个流程的控制的,而Struts2是通过过滤器来实现URL路径与具体Action的对应关系确认的。(Struts2具体机制参看另一篇博客链接

下图是springMVC的原理示意图:

SpringMVC工作流程概述:

1、客户端向web服务器(如tomcat)发送一个http请求,web服务器对http请求进行解析,解析后的URL地址如果匹配了DispatcherServlet的映射路径(通过web.xml中的servlet-mapping配置),web容器就将请求交给DispatcherServlet处理。

 

2、DispatcherServlet接收到这个请求后,再对URL进行解析,得到请求资源标识符(URI)。然后调用相应方法得到的HandlerMapping对象,再根据URI,调用这个对象的相应方法获得Handler对象以及它对应的拦截器。(在这里只是获得了Handler对象,并不会操作它,在SpringMVC中,是通过HandlerAdapter对Handler进行调用、控制的)

 

3、DispatcherServlet根据得到的Handler对象,选择一个合适的HandlerAdapter,创建其实例对象,执行拦截器中的preHandler()方法。

 

4、在拦截器方法中,提取请求中的数据模型,填充Handler入参,所以所有准备工作都已做好,开始执行Handler(我们写的controller代码并不是能被直接执行,需要有刚才那些操作,才能转变为Handler被执行)。

 

5、Handler执行完毕后返回一个ModelAndView对象给DispatcherServlet。

 

6、这个ModleAndView只是一个逻辑视图,并不是真正的视图,DispatcherServlet通过ViewResolver视图解析器将逻辑视图转化为真正的视图(通俗理解为将视图名称补全,如加上路径前缀,加上.jsp后缀,能指向实际的视图)。

 

7、DispatcherServlet通过Model将ModelAndView中得到的处数据解析后用于渲染视图。将得到的最终视图通过http响应返回客户端。

 

概念解析:

1、HandlerMapping 
spring mvc 使用HandlerMapping来找到并保存url请求和处理函数间的mapping关系。 
  
以DefaultAnnotationHandlerMapping为例来具体看HandlerMapping的作用 
  DefaultAnnotationHandlerMapping将扫描当前所有已经注册的spring beans中的@requestmapping标注以找出url 和 handler method处理函数的关系并予以关联。 

2、Handleradapter 
Spring MVC通过HandlerAdapter来实际调用处理函数。 
以AnnotationMethodHandlerAdapter为例 
DispatcherServlet中根据handlermapping找到对应的handler method后,首先检查当前工程中注册的所有可用的handlerAdapter,根据handlerAdapter中的supports方法找到可以使用的handlerAdapter。通过调用handlerAdapter中的handle方法来处理及准备handler method中的参数及annotation(这就是spring mvc如何将reqeust中的参数变成handle method中的输入参数的地方),最终调用实际的handle method。

 

其他问题:

Spring为什么要结合使用HandlerMapping以及HandlerAdapter来处理Handler?
    符合面向对象中的单一职责原则,代码架构清晰,便于维护,最重要的是代码可复用性高。如HandlerAdapter可能会被用于处理多种Handler。

 

时序图(转载):

分享到:
评论

相关推荐

    吴天雄--SpringMVC笔记.doc

    SpringMVC笔记内容:第一天(SpringMVC的概述、SpringMVC与Struts2优势分析、重要组件、运行原理、SpringMVC环境搭建、@RequestMapping注解详解、字符编码过滤器、传参形式(基本数据类型或String、对象类型、对象....

    SpringMVC讲义大全.docx

    SpringMVC基本原理: 解释SpringMVC框架的工作原理,包括前端控制器、处理器映射器、处理器适配器、视图解析器等核心组件的作用。 控制器开发: 讲解如何编写控制器(Controller),处理用户请求,获取参数,调用...

    图解springMVC执行流程及原理.docx

    SpringMVC概述 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC架构,从而在使用Spring进行WEB开发时,...

    Spring MVC数据绑定概述及原理详解

    主要介绍了Spring MVC数据绑定概述及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    看透springMvc源代码分析与实践

    13.1 RequestMappingHandlerAdapter概述162 13.2 RequestMappingHandlerAdapter自身结构169 13.2.1 创建RequestMappingHandler-Adapter之器169 13.2.2 RequestMappingHandlerAdapter之用173 13.2.3 小结185 ...

    SpringMVC面试题 29道1

    1.概述 2.核心组件 3.工作原理 1. 分层设计,实现了业务系统各个组件之间的解耦,有利于业务系统的可扩展性,可维护性 2. 有利于系统的并行开发,提升开发

    JAVA高并发高性能高可用高扩展架构视频教程

    深度解析springMVC实现原理(手写springMVC框架) Java验证码 正则黑名单爬虫系统 深入数据库连接池内部运转原理 分布式服务下的交易一致 企业必备技能之面向服务编程Web-Service详解 分布式服务下的交易一致性原理及...

    Spring源码解析4章150页+Spring3.2.4中文注释源码

    一阶段 1、Spring概述 2、一切从bean开始 3、俯瞰Spring架构设计 4、Spring源码下载 二阶段 1、什么是IOC/DI ...SpringMVC框架设计原理及手写实现 四阶段 Spring事务源码解析 需要其他源码请私信我

    JavaEE技术问题汇总.docx

    概述Java中的内存溢出和内存泄露 Java中object常用方法 静态代理和动态代理 CGLIB代理和JDK代理 ”static”关键字是什么意思?Java中是否可以覆盖一个private或者是static的方法? cas单点登录的基础...

    基于SSM的莲湖小区疫情物资管理系统(源码+部署说明+演示视频+源码介绍).zip

    SSM的莲湖小区疫情物资管理系统是一款基于Spring、SpringMVC和MyBatis框架开发的综合性疫情防控物资管理软件。该系统旨在帮助莲湖小区实现对疫情物资的有效管理和监控,提高疫情防控工作的效率。源码部分包含了项目...

    springboot知识点整理

    4.5 SpringMVC自动配置原理 67 4.6 SpringBoot扩展与全面接管 70 4.7 如何修改SpringBoot的默认配置 72 4.8 【实验】CRUD操作 73 4.8.1 默认访问首页 73 4.8.2 登录页面国际化 74 4.8.3 登录 80 4.8.4 拦截器进行...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    3.6 @Enable*注解的工作原理 63 3.6.1 第一类:直接导入配置类 63 3.6.2 第二类:依据条件选择配置类 64 3.6.3 第三类:动态注册Bean 65 3.7 测试 66 3.7.1 点睛 66 3.7.2 示例 67 第二部分 点睛Spring MVC 4.x 第4 ...

    springboot学习思维笔记.xmind

    @Enable*注解的工作原理 直接导入配置类 依据条件选择配置类 动态注册Bean 测试 Spring TestContext Framework集成测试 SpringMVC基础 Spring MVC概述 SpringMVC项目快速搭建 构建Maven项目...

    基于SSM框架的CRUD操作实战源码学习与总结

    项目概述:本项目致力于SSM(Spring、SpringMVC、MyBatis)框架的应用实战,通过一个完整的CRUD(创建、读取、更新、删除)操作示例进行学习总结。项目主要采用Html作为前端展示语言,同时融合了Java、JavaScript、...

    基于ssm+Vue的计算机网络实验课程教学网站(源码+部署说明+系统介绍+数据库).zip

    这是一个基于SSM(Spring、SpringMVC和MyBatis)框架与Vue.js前端技术的计算机网络实验课程教学网站。该资源包含了源码、部署说明、系统介绍以及数据库设计,旨在帮助开发者快速搭建一个功能完善的网络实验课程教学...

    百度地图开发java源码-TypicalWebProject:一个典型的JavaWeb项目

    项目概述: 此项目是一个典型的MVC Java Web项目。用jsp+Servlet+javabean进行项目开发,并未用框架,希望从底层的角度,来了解一个MVC项目的构成。 后续,可以用Spring+SpringMVC+MyBatis对项目进行重构。 目的:...

    跟开涛学Spring

    1.3 【第二章】 IoC 之 2.2 IoC 容器基本原理 ——跟我学Spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.4 【第三章】 DI 之 3.1 DI的配置使用 ——跟我学spring3 . . . . . . . . . . ....

    JavaEE开发的颠覆者+Spring+Boot实战++完整版

    60 3.6 @Enable*注解的工作原理 .... .............. 63 VIII ∣ Java EE 开发的颠覆者:Spring Boot 实战 3.7 测试 .... .... ............. 66 第二部分 点睛Spring MVC 4.x 第4 章 Spring MVC 基础 .... ..........

    互联网创意产品众筹平台

    项目环境搭建细节-spring-springmvc相关配置-创建包结构% y& q( J; t$ J; t' ^5 t │ 16.项目环境搭建-跑通整个流程4 n. \. k! \1 r. s │ , b2 `. m2 c0 O5 H; Z1 z/ D ├─众筹项目-第02天《Atcrowdfunding》 │ ...

Global site tag (gtag.js) - Google Analytics