(Spring文档翻译)Part V, the Web 17.1 Spring Web MVC framework介绍

指南文档的这个部分涵盖了Spring框架对表现层(特别是基于Web的表现层)以及WebSocket消息风格的web应用的支持。

Spring框架拥有自己的web框架,Spring Web MVC,包含在前面几个章节。之后的几章是关于Spring框架对其他web技术的集成支持,像JSF等。

再之后是Spring框架的MVC porlet 框架。

Spring 的MVC框架围绕着DispatcherServlet设计,DispatcherServlet将请求转发给handler,用可配置的handler 映射、视图解析、本地化和主题方案

并且支持文件上传。

默认的handler基于@Controller和@RequestMapping注解,提供了一个非常具有弹性的handling方法,在Spring3.0的介绍中,@Controller机制允许你通过@PathValiable注解和其他的一些特性来创建RESTful的Web网站和应用。

“对扩展开放...”是SpringWebMVC的一个关键设计原则,在Spring中,总的来说是"对扩展开放,对修改关闭的"原则。

SpringWebMVC中的一些核心类的方法被标记为final。作为一个开发者你不能覆盖这些方法来提供你自己的行为。这个并没有被绝对的要求,但要在头脑里要明确这个原则。

对于这个原则的一个解释,可以参考Seth Ladd等人的 Expert Spring Web MVC and Web Flow这本书,特别是"A Loot At Desing"这部分,在第一版的117页。

当你使用Spring MVC的时候,你不能对final方法提供增强。例如,你不能增强AbstractController.setSynchronizeOnSession()这个方法。参考Section9.6.1来获取更多的AOP代理的信息和为什么你不能对final方法增强。

在Spring Web MVC中,你可以使任何对象来当做命令或返回表单的对象,你不需要实现特定框架的接口或基类。Spring的data binding非常具有弹性。例如,它将类型匹配错误当做验证错误来对待,这样就可以被应用发现而不是系统错误。这样你就不必复制你的业务对象的属性,像从表单对象里的简单的没有类型的字符串来处理不合法的提交或这是将它合适的转化为String。Spring经常可以非常好的直接绑定到你的业务对象上。

Spring的视图解决方案极其具有弹性。Controller通常负责准备一个带有数据的Map模型并且选择一个view名字,但是它也可以直接写入到response流来结束这次请求。视图的名称也高度可配置,可以通过文件的扩展名或者Accept header,content type negotiation,通过bean名称,一个properties文件,甚至一个传统的ViewResolver实现。model(MVC中的M)是一个Map借口,允许对视图技术的完全的抽象。你可以直接用基于模板的渲染技术,像JSP,Velocity,Freemaker集成,或直接生产XML,JSON,Atom,以及其他的很火内容形式。

Map模型可以简单地转化到合适的格式,像JSP的request属性,Velocity模板的model.

英文原文:

Introduction to Spring Web MVC framework

The Spring Web model-view-controller (MVC) framework is designed around aDispatcherServlet that
dispatches requests to handlers, with configurable handler mappings, view resolution, locale, time zone and theme resolution as well as support for uploading files. The default handler is based on the @Controller and@RequestMapping annotations,
offering a wide range of flexible handling methods. With the introduction of Spring 3.0, the @Controller mechanism
also allows you to create RESTful Web sites and applications, through the @PathVariable annotation
and other features.

"Open for extension…" A key design principle in Spring Web MVC and in Spring in general is the "Open for extension, closed for modification" principle.

Some methods in the core classes of Spring Web MVC are marked final.
As a developer you cannot override these methods to supply your own behavior. This has not been done arbitrarily, but specifically with this principle in mind.

For an explanation of this principle, refer to Expert Spring Web MVC and Web Flowby Seth Ladd and others; specifically see the section "A Look At Design," on page 117 of the
first edition. Alternatively, see

You cannot add advice to final methods when you use Spring MVC. For example, you cannot add advice to the AbstractController.setSynchronizeOnSession()method.
Refer to Section 9.6.1,
“Understanding AOP proxies”
 for more information on AOP proxies and why you cannot add advice to final methods.

In Spring Web MVC you can use any object as a command or form-backing object; you do not need to implement a framework-specific interface or base class. Spring’s data binding is highly flexible: for example, it treats type mismatches as validation errors that
can be evaluated by the application, not as system errors. Thus you need not duplicate your business objects‘ properties as simple, untyped strings in your form objects simply to handle invalid submissions, or to convert the Strings properly. Instead, it is
often preferable to bind directly to your business objects.

Spring’s view resolution is extremely flexible. A Controller is
typically responsible for preparing a model Map with
data and selecting a view name but it can also write directly to the response stream and complete the request. View name resolution is highly configurable through file extension or Accept header content type negotiation, through bean names, a properties file,
or even a custom ViewResolver implementation.
The model (the M in MVC) is a Map interface,
which allows for the complete abstraction of the view technology. You can integrate directly with template based rendering technologies such as JSP, Velocity and Freemarker, or directly generate XML, JSON, Atom, and many other types of content. The model Map is
simply transformed into an appropriate format, such as JSP request attributes, a Velocity template model.

时间: 2024-11-03 20:52:00

(Spring文档翻译)Part V, the Web 17.1 Spring Web MVC framework介绍的相关文章

(Spring文档翻译)17.1.1 pring Web MVC的特性

Spring Web Flow的目标是成为管理web应用网页流的最好的解决方案. SWF集成了现有的框架像Spring MVC 和JSP,适用于Servlet和Porlet环境.如果你有一个业务流程,需要一个对话式的模型而不是单纯的请求模型,那么SWF可能就是解决方案. Spring的web模块包含了很多独立的web支持特性: 清晰的角色划分.每一个角色--controller,validator,command object,form object,model object, Dispatch

spring中的web上下文,spring上下文,springmvc上下文区别(超详细)

web上下文(Servlet context),spring上下文(WebApplication Context),springmvc上下文(mlWebApplicationCont)之间区别. 上下文:可以简单的理解为容器,配置文件 web上下文目标对象是所有web应用,spring上下文目标对象是单个web应用,spring mvc目标对象是单个web应用的spring mvc框架(是spring上下文的子上下文,即继承自spring上下文,所以子能够调用父的东西,反之,不可). 以上感觉自

搭建web项目结合spring+cxf的webservice服务

服务端: 服务端和客户端都需要引入包 1 antlr-2.7.7.jar 2 aopalliance-1.0.jar 3 asm-3.3.jar 4 commons-collections-3.2.1.jar 5 commons-lang-2.6.jar 6 commons-logging-1.1.1.jar 7 cxf-2.4.2.jar 8 cxf-manifest.jar 9 cxf-xjc-boolean-2.4.0.jar 10 cxf-xjc-bug671-2.4.0.jar 11

Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这部分内容需要以下Jar包支持 mysql-connector:MySQL数据库连接驱动,架起服务端与数据库沟通的桥梁: MyBatis:一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架: log4j:Apache的开源项目,一个功能强大的日志组件,提供方便的日志记录: 修改后的pom.xm

Spring Boot入门第二天:一个基于Spring Boot的Web应用,使用了Spring Data JPA和Freemarker。

今天打算从数据库中取数据,并展示到视图中.不多说,先上图: 第一步:添加依赖.打开pom.xml文件,添加必要的依赖,完整代码如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&q

springboot Serving Web Content with Spring MVC

Serving Web Content with Spring MVC This guide walks you through the process of creating a "hello world" web site with Spring. What you'll build You'll build an application that has a static home page, and also will accept HTTP GET requests at:

Spring Boot干货系列:(五)开发Web应用JSP篇

Spring Boot干货系列:(五)开发Web应用JSP篇 原创 2017-04-05 嘟嘟MD 嘟爷java超神学堂 前言 上一篇介绍了Spring Boot中使用Thymeleaf模板引擎,今天来介绍一下如何使用SpringBoot官方不推荐的jsp,虽然难度有点大,但是玩起来还是蛮有意思的. 正文 先来看看整体的框架结构,跟前面介绍Thymeleaf的时候差不多,只是多了webapp这个用来存放jsp的目录,静态资源还是放在resources的static下面. 引入依赖 使用内嵌的to

spring项目后出现java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoade

导入别人的spring项目后出现java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoade错误, 解决: 1.若项目的主人是用maven创建spring项目, 解决办法: 项目 -> 属性 -> Deployment Assembly -> Add -> Java Build Path Entries -> 选择Maven Dependencies -> Finish -&

springboot 之Spring Web Mvc Framework

1.SpringMvc自动配置 Spring Boot 为SpringMvc提供了自动配置. 自动配置包含Spring的以下特征: (1)视图解析器ContentNegotiatingViewResolver或BeanNameViewResolver. (2)支持静态文件,包含对WebJar支持. (3)自动注册转换器Converter.GenericConverter.Formatter. (4)支持HttpMessageConverters(转换request.response的数据格式)