Spring官方文档翻译——15.1 介绍Spring Web MVC框架
Part V. The Web
文档的这一部分介绍了Spring框架对展现层的支持(尤其是基于web的展现层)
Spring拥有自己的web框架——Spring Web MVC。在前两章中会有介绍。
剩下的章节则用来介绍Spring和其它web技术的集成,比方Struts和JSF(这里仅仅提两个)。
本节以对Spring MVC portlet框架的介绍结尾。
第十五章——Web MVC框架(Web MVC framework)
第十六章——视图技术(View technologie)
第十七章——与其它web框架集成(Integrating withother web frameworks)
第十八章——Portlet MVC框架(Portlet MVC Framework)
15.WebMVC 框架
15.1 介绍Spring Web MVC框架
Spring Web MVC框架环绕一个分发器(DispatcherServlet)来设计,它的作用是将请求(request)分发到相应的处理器(handler),这还须要依赖可配置的处理器映射(handlermappings)。视图解析(view resolution)。本地化和主题解析(local andtheme resolution)和上传文件支持。
默认的handler依赖于@Controller和@RequestMapping注解来提供灵活的处理方法。而在Spring3.0中,@Controller机制还同意你通过@PathVariable注解和另外一些功能来创建RESTful风格的站点和应用。
“开放扩展(Open for extension)”
在Spring Web MVC和Spring中,一个关键的设计准则就是“开放扩展。关闭改动”原则。
在Spring Web MVC核心类中的某些方法会被标记为final。作为一个开发者。你无法重写这些方法来满足你的需求。
这并非任意而为的。而必需要有界定准则。
对于这个原则的一个解释,你能够看看Seth Ladd等写的Expert Spring Web MVC and Web Flow。尤其是看“A Look AtDesign”这一章,在第一版的117页。或者你也能够看
1. Bob Martin, The Open-Closed Principle (PDF)
在使用Spring MVC的时候你无法为final方法加入advice。比如,你无法为AbstractController.setSynchronizeOnSession()加入advice。能够參考“UnderstandingAOP proxies”这一节来获得很多其它关于AOP代理的信息和无法为final方法加入advice的原因。
在Spring Web MVC中你可以使用不论什么对象来充当命令对象或是表单对象。
所以你不须要去实现一个框架相关的接口或者基类。Spring的数据绑定高度灵活。比如,它将类型不匹配当做是校验错误(validationerrors),从而可以被应用程序处理,而不是直接的系统错误。因此你无需将业务对象的属性当做strings来复制去处理无效的提交,或是转换那些字符串属性。
而通常更好的做法是直接将參数绑定到你的业务对象上去。
Spring的视图解析也格外的灵活。Controller的实现甚至能够直接向response流里写数据。通常一个ModelAndView对象包括一个视图名(view name)和一个模型Map(model Map)。model Map中包括含了beannames和其相应的对象,比方命令对象或是表单对象。
视图名称解析能够通过bean names。properties文件或是你自己的ViewResolver实现来配置。
The model以Map接口为基础。这同意视图技术全然抽象化。你能够直接集成JSP,Velocity或是其它页面渲染技术。
由于model Map能够非常easy地被转换成合适的格式,比方一个JSP requestattributes或者是Velocity的模板model。
Spring MVC的特点
Spring Web 流程
Spring Web Flow(SWF)的目标是成为最好的web应用页面流管理的解决方式。
SWF能够融入现有的框架。比方Spring MVC。Struts和JSF,在servlet和protlet环境中都能够。假设你有一个业务流程。这个业务流程会从会话模式而不是单纯的请求模式得到优点。那么SWF就可能是解决方式。
SWF能够让你去捕获逻辑页面流作为“自包括”的模块。
在不同的场景能够复用,这样就有利于创建web应用模块化,能够通过受约束的导航引导用户驱动业务流程。
若须要了解很多其它关于SWF的信息,能够去Spring Web Flow website看看.
Spring的web模块包含非常多仅仅有web才支持的特点:
清晰的角色分离。每种角色——控制器(controller),校验器(validator)。命令对象(commandobject)。表单对象(form object)。模型对象(modelobject),分发器(DispatcherServlet),处理器映射(handler mapping)。页面解析器(viewresolver)等等——都能够通过特定的对象来实现。
强大且简洁的配置。
Powerfuland straightforward configuration of both framework and application classes asJavaBeans. This configuration capability includes easy referencing acrosscontexts, such as from web controllers to business objects and validators.这段翻译不好~~
适应性。非侵入性和灵活性。
依据给定的场景,用一些參数注解(比方@RequestParam,@RequestHeader。@PathVariable等)来定义你须要的控制器方法。
重用业务代码,无需反复。直接使用现有的业务对象来充当命令对象或表单对象。而不是让他们继承一个特定的框架基类。
可自己定义的绑定和校验。类型不匹配作为应用级别的校验错误,从而实现本地化的日期。数字和其它一些值的绑定,并不仅仅是基于字符串的表单对象的绑定。
当中后者还须要进行手动的类型转换去转换成一个业务对象。
可自己定义的处理器映射和视图解析。处理器映射和视图解析策略从简单的基于URL的配置到复杂的、为特定目的而生的解析策略。Spring比那些托管技术的web MVC框架更灵活。
灵活的模型转换。
模型可与一个key/value的map互相转换。从而支持与不论什么试图技术集成
可定义的本地化和主题解析。
支持带或不带Spring标签库的JSPs。支持JSTL。支持Velocity且不须要额外的桥接。
Spring标签库是一个简单却强大的JSP标签库,它提供了对数据绑定和主题的支持。
在标记代码方面。自己定义的标签同意最大化的灵活性。想要找到很多其它关于标签库描写叙述符号的信息。能够看附录F,spring.tld
在Spring2.0中。有一个JSP表单标签库,使在JSP中制作表单更加便捷。
想要找到很多其它关于标签库描写叙述符号的信息,能够看附录G。spring-form.tld
Beans的生命周期范围是当前HTTP请求或HTTPSession。
这是WebApplicationContext容器的特点,而不是Spring MVC的特点。仅仅是SpringMVC使用了WebApplicationContext。这些bean的作用范围在“Request,session。andglobal session scopes”这一章有介绍。
其它MVC实现的可插拔性
Spring MVC的实现可能对于一些项目来说并非最合适的。很多团队期望利用现有的投资来提高技术和工具。比方Struts框架中包括了大量的知识量和使用经验。假设你能够忍受Struts体系结构的缺陷,那么它能够作为你web层的还有一个选择。对于其它MVC框架也是一样的。
假设你不想使用Spring的web MVC,可是可是想要使用Spring提供的其它解决方式,你能够将你选择的web MVC框架集成到Spring上来,这将会很easy。
你仅仅须要通过ContextLoaderListener来启动一个Spring的根应用上下文。然后从集成的Struts或WebWork的控制中通过ServletContext属性来訪问它(或Spring自己的帮助方法)。
No"plug-ins" are involved, so no dedicated integration is necessary。
从web层的角度来看。你仅仅是将Spring作为一个库来使用。并将根应用上下文对象作为切入点。
即使不使用Spring的WEB MVC,你注冊了的beans和Spring的services也会变得触手可及。Spring并不与Struts或WebWork竞争,它仅仅是提供那些单纯的web MVC框架不提供的功能,比方bean的配置,数据訪问以及事务处理。因此你能够使用Spring中间层 和/或 数据訪问层来丰富你的应用。即使你仅仅是想结合JDBC或Hibernate来使用抽象事务管理。
Spring官方文档翻译——15.1 介绍Spring Web MVC框架的更多相关文章
- Spring官方文档翻译——15.4 处理器映射(Handler mappings)
15.4 处理器映射(Handler mappings) 注:以下将handler翻译成处理器 在Spring早先的版本号中,用户还须要在web应用上下文中定义处理器映射来配置请求(requests) ...
- Spring官方文档翻译(1~6章)
Spring官方文档翻译(1~6章) 转载至 http://blog.csdn.net/tangtong1/article/details/51326887 Spring官方文档.参考中文文档 一.S ...
- Spring 4 官方文档学习 Web MVC 框架
1.介绍Spring Web MVC 框架 Spring Web MVC 框架是围绕DispatcherServlet设计的,所谓DispatcherServlet就是将请求分发到handler,需要 ...
- Spring 4 官方文档学习(十一)Web MVC 框架
介绍Spring Web MVC 框架 Spring Web MVC的特性 其他MVC实现的可插拔性 DispatcherServlet 在WebApplicationContext中的特殊的bean ...
- Spring Web MVC框架简介
Web MVC framework框架 Spring Web MVC框架简介 Spring MVC的核心是`DispatcherServlet`,该类作用非常多,分发请求处理,配置处理器映射,处理视图 ...
- Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC
内容列表: 启用MVC Java config 或 MVC XML namespace 修改已提供的配置 类型转换和格式化 校验 拦截器 内容协商 View Controllers View Reso ...
- 12.Spring——Web MVC框架
1.Spring Web MVC 框架 2.Spring MVC Hello World 例子 1.Spring Web MVC 框架 Spring web MVC 框架提供了模型-视 ...
- Spring 4 官方文档学习(十一)Web MVC 框架之themes
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-themeresolver ...
- Spring 4 官方文档学习(十一)Web MVC 框架之resolving views 解析视图
接前面的Spring 4 官方文档学习(十一)Web MVC 框架,那篇太长,故另起一篇. 针对web应用的所有的MVC框架,都会提供一种呈现views的方式.Spring提供了view resolv ...
随机推荐
- x86实模式到保护模式 李忠 王晓波
x86实模式到保护模式 李忠 王晓波 第3到4章 各个进制间的转换省略 实验环境 编译器 nasm 虚拟机 virtual box 小程序 hexview 观察编译后的机器代码 fixvhd ...
- 图论trainning-part-1 E. Invitation Cards
E. Invitation Cards Time Limit: 8000ms Memory Limit: 262144KB 64-bit integer IO format: %lld Ja ...
- python类可以截获Python运算符
类可以截获Python运算符 现在,让我们来看类和模块的第三个主要差别: 运算符重载.简而言之,运算符重载就是让用类写成的对象,可截获并响应用在内置类型上的运算:加法.切片.打印和点号运算等.这只是自 ...
- 第一阶段Sprint 对其他团队评价
咱们的team 针对对“小学生网页四则运算”这个产品的评审,本人提出建议:1.第一阶段的产品Sprint不够好,无任务看板.无燃尽图.希望完善该产品的的Sprint,第二阶段的Sprint要认真写好. ...
- BZOJ 1012 [JSOI2008]最大数maxnumber【线段树】
水题,每次记录一下当前有多少个数,然后按照题目所指示的那样模拟就行,每次向线段树末尾插入(其实是修改)题目中指定的数,然后询问当前的个数到前面Q个数中最大值是多少结果就是,好久不碰线段树了,用数组模拟 ...
- hihoCoder1381 - Little Y's Tree
Portal Description 给出一个\(n(n\leq10^5)\)个点的带边权的树.进行\(Q\)次询问:每次删除树上的\(k\)条边,求剩下的\(k+1\)个连通块中最远点对距离的和.\ ...
- 【bzoj1299】[LLH邀请赛]巧克力棒 博弈+模拟
Description TBL和X用巧克力棒玩游戏.每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度.TBL先手两人轮流,无法操作的人输. 他们以最佳策略一共进行了10轮 ...
- Python脚本实现值更新事件赋值过程记录日志监控
#LogWatch 实现值更新事件赋值过程记录日志监控 clr.AddReference('System') clr.AddReference('Kingdee.BOS') clr.AddRefere ...
- Bichrome Tree
Bichrome Tree 时间限制: 1 Sec 内存限制: 128 MB 题目描述 We have a tree with N vertices. Vertex 1 is the root of ...
- POJ 1502 MPI Maelstrom [最短路 Dijkstra]
传送门 MPI Maelstrom Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5711 Accepted: 3552 ...