SpringMVC原理和框架
SpringMVC工作原理
在上一篇章[spring]01_环境配置 中,我们演示了一个简单的HelloWorld工程。
本篇章重点讲述SpringMVC的基本工作原理,让大家进一步加深认识。
工作流程描述
(1)向服务器发送HTTP请求,请求被前端控制器 DispatcherServlet 捕获。
(2)DispatcherServlet 根据 <servlet-name>-servlet.xml 中的配置对请求的URL进行解析,得到请求资源标识符(URI)。
然后根据该URI,调用 HandlerMapping 获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以 HandlerExecutionChain 对象的形式返回。
(3)DispatcherServlet 根据获得的Handler,选择一个合适的 HandlerAdapter 。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)。
(4)提取Request中的模型数据,填充Handler入参,开始执行Handler( Controller )。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
- HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息。
- 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等。
- 数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等。
- 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中。
(5)Handler( Controller )执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象;
(6)根据返回的ModelAndView,选择一个适合的 ViewResolver (必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet。
(7)ViewResolver 结合Model和View,来渲染视图。
(8)视图负责将渲染结果返回给客户端。
Spring框架
Spring当前框架有20个jar包,它们可以分为几大模块:
Core Container
spring-core, spring-beans , 提供框架的基础部分,包括IoC和依赖注入特性。
spring-context, 在spring-core, spring-beans基础上构建。它提供一种框架式的访问对象的方法。
它也支持类似Java EE特性,例如:EJB,JMX和基本remoting。ApplicationContext接口是它的聚焦点。
springcontext-support, 集成第三方库到Spring application context。
spring-expression,提供一种强有力的表达语言在运行时来查询和操纵一个对象图。
AOP 和 Instrumentation
spring-aop,提供了对面向切面编程的丰富支持。
spring-aspects,提供了对AspectJ的集成。
spring-instrument,提供了对类instrumentation的支持和类加载器。
spring-instrument-tomcat,包含了Spring对Tomcat的instrumentation代理。
Messaging
spring-messaging,包含spring的消息处理功能,如Message,MessageChannel,MessageHandler。
Data Access / Integaration
Data Access/Integration层包含了JDBC / ORM / OXM / JMS和Transaction模块。
spring-jdbc,提供了一个JDBC抽象层。
spring-tx,支持编程和声明式事务管理类。
spring-orm,提供了流行的对象关系型映射API集,如JPA,JDO,Hibernate。
spring-oxm,提供了一个抽象层以支持对象/XML 映射的实现,如JAXB,Castor,XMLBeans,JiBX 和 XStream.
spring-jms,包含了生产和消费消息的功能。
Web
spring-web,提供了基本的面向web的功能,如多文件上传、使用Servlet监听器的Ioc容器的初始化。一个面向web的应用层上下文。
spring-webmvc,包括MVC和REST web服务实现。
spring-webmvc-portlet,提供在Protlet环境的MVC实现和spring-webmvc功能的镜像。
Test
spring-test,以Junit和TestNG来支持spring组件的单元测试和集成测试。
参考资料
http://blog.csdn.net/xtu_xiaoxin/article/details/8796499
Spring官方文档——spring-framework-reference
SpringMVC原理和框架的更多相关文章
- springMVC学习笔记(一)-----springMVC原理
一.什么是springmvc springMVC是spring框架的一个模块,springMVC和spring无需通过中间整合层进行开发. springMVC是一个基于mvc的web框架. Sprin ...
- 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...
- SpringMVC学习--springmvc原理
简介 springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合.springmvc是一个基于mvc的web框架. spring的结构图: mvc在b/ ...
- Springmvc整合tiles框架简单入门示例(maven)
Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...
- SpringMVC整合Tiles框架
SpringMVC整合Tiles框架 Tiles组件 tiles-iconfig.xml Tiles是一个JSP布局框架. Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离 ...
- spring+springMVC+mybatis的框架项目基础环境搭建
上一个项目在后台用到spring+springMVC+mybatis的框架,先新项目初步需求也已经下来,不出意外的话,应该也是用这个框架组合. 虽然在之前activiti相关的学习中所用到的框架也是这 ...
- 拯救老旧工程,记桥接SpringMVC与Stripes框架
背景: 公司基础设施部门推出了自己的微服务框架(以下简称M),要求所有业务应用都要接入进去,但坑爹的是M只提供了SpringMVC工程的support,对于采用Stripes作为MVC框架的应用并不支 ...
- SpringMVC 使用验证框架 Bean Validation(上)
SpringMVC 使用验证框架 Bean Validation(上) 对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证. ...
- SpringMVC由浅入深day01_1springmvc框架介绍
springmvc 第一天 springmvc的基础知识 课程安排: 第一天:springmvc的基础知识 什么是springmvc? springmvc框架原理(掌握) 前端控制器.处理器映射器.处 ...
随机推荐
- ImageSwitcher自定意效果+定时切换图片
Activity实现 1 import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; ...
- 如何控制Java中的线程,总结了3种方法...
问题:利用Java多线程,轮流打印数字,也就是怎么控制线程.... 1:通过synchronized的关键字,对类的static final 成员进行Lock,锁住对象,来实现同步. private ...
- 函数式编程语言LISP,python,haskell,clojure
说说我自己的背景吧,我是个半吊子的程序员,做任何事情喜欢比较了解然后再尝试,我接触过很多语言,大多数都把它当成工具来使用 我现在的工作大部分主要在于数据挖掘与机器学习方面,也学习web开发,我第一个拿 ...
- JavaScript BOM对象介绍
bom:即broswer object model(浏览器对象模型),由五个对象组成: Window:对象表示浏览器中打开的窗口 最顶层对象. Navigator :浏览器对 ...
- LoadRunner如何监控Tomcat性能
使用LoadRunner做性能测试,一般的直觉是LR只能完成脚本录制和编写模拟用户的请求行为,但是在某些情况下,要监控一些中间件或web服务器的性能时,就不能通过录制脚本来完成了,那么就需要手工来编写 ...
- AndroidTips:selector的disable状态为什么无效?
正确的姿势: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android=& ...
- Uva 839 Not so Mobile
0.最后输出的yes no的大小写 1.注意 递归边界 一直到没有左右子树 即b1=b2=false的时候 才返回 是否 天平平衡. 2.注意重量是利用引用来传递的 #include <io ...
- SPOJ REPEATS 后缀数组
题目链接:http://www.spoj.com/problems/REPEATS/en/ 题意:首先定义了一个字符串的重复度.即一个字符串由一个子串重复k次构成.那么最大的k即是该字符串的重复度.现 ...
- Swift3.0语言教程删除字符与处理字符编码
Swift3.0语言教程删除字符与处理字符编码 Swift3.0语言教程删除字符 Swift3.0语言教程删除字符与处理字符编码,在字符串中,如果开发者有不需要使用的字符,就可以将这些字符删除.在NS ...
- HTML5(常用的表单控件)
常用的HTML5的表单控件: Input 类型: color color 类型用在input字段主要用于选取颜色,如下所示: 从拾色器中选择一个颜色: 选择你喜欢的颜色: <input type ...