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框架的更多相关文章

  1. Spring官方文档翻译——15.4 处理器映射(Handler mappings)

    15.4 处理器映射(Handler mappings) 注:以下将handler翻译成处理器 在Spring早先的版本号中,用户还须要在web应用上下文中定义处理器映射来配置请求(requests) ...

  2. Spring官方文档翻译(1~6章)

    Spring官方文档翻译(1~6章) 转载至 http://blog.csdn.net/tangtong1/article/details/51326887 Spring官方文档.参考中文文档 一.S ...

  3. Spring 4 官方文档学习 Web MVC 框架

    1.介绍Spring Web MVC 框架 Spring Web MVC 框架是围绕DispatcherServlet设计的,所谓DispatcherServlet就是将请求分发到handler,需要 ...

  4. Spring 4 官方文档学习(十一)Web MVC 框架

    介绍Spring Web MVC 框架 Spring Web MVC的特性 其他MVC实现的可插拔性 DispatcherServlet 在WebApplicationContext中的特殊的bean ...

  5. Spring Web MVC框架简介

    Web MVC framework框架 Spring Web MVC框架简介 Spring MVC的核心是`DispatcherServlet`,该类作用非常多,分发请求处理,配置处理器映射,处理视图 ...

  6. Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC

    内容列表: 启用MVC Java config 或 MVC XML namespace 修改已提供的配置 类型转换和格式化 校验 拦截器 内容协商 View Controllers View Reso ...

  7. 12.Spring——Web MVC框架

    1.Spring Web MVC 框架 2.Spring MVC Hello World 例子 1.Spring Web MVC 框架 Spring web         MVC 框架提供了模型-视 ...

  8. Spring 4 官方文档学习(十一)Web MVC 框架之themes

    http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-themeresolver ...

  9. Spring 4 官方文档学习(十一)Web MVC 框架之resolving views 解析视图

    接前面的Spring 4 官方文档学习(十一)Web MVC 框架,那篇太长,故另起一篇. 针对web应用的所有的MVC框架,都会提供一种呈现views的方式.Spring提供了view resolv ...

随机推荐

  1. 安装altium designer的破解问题

    无法启动此程序,因为计算机中丢失MFC71.DLL.尝试重装安装该程序 百度下搜索下载MFC71.DLL,解压后复制到c:windows/system32/下,在开始-运行下输入regsvr32 MF ...

  2. 【转】OPC远程访问相关配置信息

    原文:http://blog.gkong.com/kking_25653.ashx 对于远程访问OPC服务器,需要在客户和服务器计算机上都进行DCOM设置,本文提供一些具体配置方法.(by Kevin ...

  3. Python --链接Mongodb

    # -*- coding: UTF-8 -*- from pymongo import MongoClient # 数据库连接 class MongoDB(object): def __init__( ...

  4. WCF学习-协议绑定

    文章:无废话WCF入门教程三[WCF的宿主] 讲了net.tcp协议的wcf绑定.

  5. ASP.NET上传大文件404报错

    报错信息: Failed to load resource: the server responded with a status of 404 (Not Found) 尝试1: 仅修改Web.con ...

  6. iOS知识列表

    Xib和StoryBoard,自动布局地图导航,实时公交,第三方地图应用本地推送通知,网络推送通知,真机调试,应用上传绘图,图表,曲线图 Xcode使用技巧多线程,runtime机制编码解码,加密设备 ...

  7. 【Luogu】P3391文艺平衡树(Splay)

    题目链接 ddosvoid和自为风月马前卒教了我这道题 他们好强啊 如果我们要反转区间[l,r] 我们首先把l的前驱旋转到根节点 再把r的后继旋转到根节点的右儿子 那么此时根节点的右儿子的左儿子所代表 ...

  8. SPOJ LCS2 Longest Common Substring II ——后缀自动机

    后缀自动机裸题 #include <cstdio> #include <cstring> #include <iostream> #include <algo ...

  9. RAD6.0+EJB+WEBSPHERE+JNDI转eclipse+TOMCAT7+JDK1.7+JNDI+SPRING修改总计

    ##########################1.去除ejb################################################################### ...

  10. java面试题之Thread的run()和start()方法有什么区别

    run()方法: 是在主线程中执行方法,和调用普通方法一样:(按顺序执行,同步执行) start()方法: 是创建了新的线程,在新的线程中执行:(异步执行) public class App { pu ...