zoukankan      html  css  js  c++  java
  • 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来使用抽象事务管理。

  • 相关阅读:
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    210 Course ScheduleII
    209. Minimum Size Subarray Sum
    208. Implement Trie (Prefix Tree)
    207. Course Schedule
    206. Reverse Linked List
    sql 开发经验
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/6832848.html
Copyright © 2011-2022 走看看