`

Spring之MVC

阅读更多

spring mvc
继承关系 java.lang.Object

 |-org.springframework.context.support.ApplicationObjectSupport

 |-org.springframework.web.context.support.WebApplicationObjectSupport

 |-org.springframework.web.servlet.support.WebContentGenerator

 |-org.springframework.web.servlet.mvc.AbstractController

 |-org.springframework.web.servlet.mvc.BaseCommandController

 |-org.springframework.web.servlet.mvc.AbstractFormController

 |-org.springframework.web.servlet.mvc.SimpleFormController

 1.ApplicationObjectSupport implement ApplicationContextAware 它是应用对象的一个方便的父类,对application context感知,例如查找协作的beans 或是 context中描述的资源。 它保持对application context的引用,并提供一个初始化回调的方法。 而且,它提供大量方便的方法用于查找资源。

2.WebApplicationObjectSupport 它是应用对象的一个方便的父类,运行在WebApplicationContext里。提供了getWebApplicationContext, getServletContext,和getTempDir methods.

3.WebContentGenerator 它对于任何类型的web内容发生者而言是一个方便的父类,例如AbstractController和WebContentInterceptor. 对于那些拥有自己HandlerAdapter的个性化的handlers,也是有用的。支持HTTP cache控制的选项。通过userExpiresHeader和userCacheControllHeader两个属性可以确定 HTTP headers。

4.AbsractController implements Controller 是控制类的父类,运用了模板模式(Template Method)的设计模式正如在Controller接口声明的,许多功能在抽象的控制类中已经提供。它是最重要的基础控制类之一,提供了许多基础的服务,例如产生 caching headers ,以及可以使对所支持的方法(get/post)有效或无效。工作流程: a.handleRequest() 被DispatcherServlet 调用; b.检测所支持的请求方法,若不支持抛ServletException; c.如果使要求事务的,就从session中取,若取不到抛ServletException; d.如果需要,可以根据配置的cacheSeconds属性来设置caching headers; e.调用抽象的方法handleRequestInternal(), 这个由子类来实现功能,返回ModelAndView对象。 对外暴露的属性,可以配置 name default description supportedMethods GET,POST 用逗号分隔这个控制类支持的请求方法,例如GET, POST and PUT requireSession false 表明被控制类处理的request是否需要事务,它保证控制类可以通过request.getSession()获取事务, 不必担心空指针,若得不到事务,抛ServletException cacheSeconds -1 表明包含在request之后的response的cache header的秒数。0表示没有cache,-1表示不生成各种 header,正数表示生成header,秒数表示cache内容的时间

 5.BaseCommandController 它实现了:接收请求后创建对象(command object),并试图根据请求的参数组装对象 它是一切试图实现下面功能的控制类的基础:根据请求参数组装JavaBeans,校验javabeans的内容,使用custom editors(实现PropertyEditors)的在对象和字符串之间进行转换. 提出了三个概念: Command Class: 每个请求产生一个command class的实例,并根据请求参数组装对象。一个command class可以是基础的java类;唯一的要求有无参数的构造函数。 command class最好是一个java类,以便可以通过请求参数来组装对象属性。 Populating using request parameters and PropertyEditors: 一但接收一个请求,任何BaseCommandController将试图根据请求参数来填充command对象。这种做法用的是典型的、众所周知的 javaBeans属性的概念。当一个名字为"firstName"请求参数存在,框架将试图去调用setFirstName([value])传递参数的值。嵌套属性也是支持的。例如一个参数名字为"address.city" 在command类面将会调用getAddress().setCity([value])。 重要的一点:你不能限制javabeans中都是string参数。通过PropertyEditor的概念(在java.beans里),你可以将字符转成对象,或者用其他的方式。例如,对于一个名字为"locale"的请求参数值为"en",只要你在控制类注册了正确的 PropertyEditor,setLocale(Locale loc)是一个不错的选择。 Validators: 在控制类成功的根据参数组长commnd对象后,它可以用配置的validators类来验证对象.校验的结果放置在Errors对象里,以供View去返回任何输入的问题。 工作流程:(和父类一样) 暴露的属性(除了父类的之外) name default description commandName command 绑定初始化command对象的名字 commandClass null 接收请求后,被用请求参数填充的类。什么对象被使用,对象是否被创建?这是由它的子类和子类的的配置和方法来决定的。 validator null 校验类属性。校验类将在子类的工作流程适当的地方被调用来校验command对象。 validateOnBinding true 表示在command对象被参数组装后,是否需要校验command对象。

6.AbstractFormController Form controller 是可以根据请求自动组装一个form bean的控制类。可以每个请求产生一个新的bean,也可以设置sessionForm属性为true后使用同一个bean. 这个类是架构的基础子类,例如SimpleFormController和AbstractWizardFormController,和你自己提供的控制类的父类。 form-input views 和after-submission view由程序来提供。使用SimpleFormController,可以通过配置文件来提供这些views 子类必须覆写showForm来准备form view,覆写processFormSubmission来处理提交的请求。对于后者,诸如类型不匹配等绑定错误将通过提供的"errors"来报告。对于附加的个性化的form校验,validator可以被使用,通过同样的”errors“来报告。 用Spring提供的AbstractFormController和Structs的Action概念对比,你可以使用普通的javabeans或者依赖于数据库的javabeans,而不用实现类似于Structs的ActionForm这样的架构描述类。通过一个 java.beans.PropertyEditor的概念,许多复杂的属性(日期,场景,或者你应用里面复杂的类型)被提交到控制类。 工作流程: a.控制类接收一个新form请求,通常是get方式的。 b.缺省调用formBackingObject(),返回一个配置的CommandClass的实例. 也可以覆写此方法,例如从数据库获取对象。 c.调用initBinder(),这允许你为command类特别的属性注册custom editors(通常是非原始类或String类型的) 这将为属性值而调整字符串。例如,本地化的日志字符串 d.只有当bindOnNewForm被设置为true,ServletRequestDataBinder将被用根据请求参数做组装一个新的form对象 e.调用showForm()返回一个将被调整view,这个方法子类必须实现 f.showForm()的实现中调用referenceData(),你可以现实此方法用于当编辑form时提供一些相关的引用数据。(例如,本地化对象,你需要用户选择一个) g.暴露Model,递交view后,用户可以填充form h.AbStractFormController接收到一个form提交,通常时post方式的。可以通过覆写isFormSubmission()方法,来使用不同的检测form提交的方法。 i.如果sessionForm 没有设置为true,formBackingObject()被调用来获取一个新的form对象;否则,控制类试图查找绑定到session的 command对象。 如果没有找到,将调用handleInvalidSubmit(),这个方法缺省是创建一个form对象,并重新提交。 j.调用ServletRequestDataBinder,用请求的参数来组装当前的form对象。 k.调用onBind(HttpServletRequest,Object,Errors),这个方法允许你在校验之前在绑定之后做一个个性化的处理。(例如可以手动将请求参数绑定到对象的属性,让校验类可见) l.如果validateOnBinding被设置,注册的Validator类被调用.Validator将校验form对象的属性,通过"Errors"对象登记相应的错误。 m.调用onBindAndValidate(),这个方法允许你做个性化的绑定和校验(例如手动的绑定请求参数,通过外部的Validator校验它们)。 n.调用processFormSubmission()处理提交信息,无论有还是没有errors.这个方法将被子类实现。 在session form 模式下,在一个session里一个提交没有一个已经存在的form对象,被认为是不合理的,就想在浏览器里面重复提交,重复刷新。这时 handleInvalidSubmit方法被调用,这个方法缺省是处理重复提交的.它可以在子类被覆写,提供相应的消息或重定向到新的form,从而避免了重复提交。在这种情况下,session中的form对象可以被认为是一个事务的token. 视图views将不能从session中获取beans,但是可以从请求中获取form controller预备的。记住一些视图技术例如Velocity不能访问一个HTTP session 暴露的属性 (由子类定义): name default description bindOnNewForm false 表示在创建一个新的form时是否需要绑定servlet的请求参数。否则,参数只在提交的是否绑定。 sessionForm false 表示当一个用户请求一个新的form时,是否将form对象保存在session中。这允许你从数据库获取 form对象,编辑它,再把它做持久化。否则新的command对象在每次请求都产生一个新的。

7.SimpleFormController 具体的FormController实现,提供可配置的form和success views,和一个onSubmit链,易于覆写。在校验出现错误时,自动重新提交到form view,在校验合法的情况下自动提交successview. 工作流程和AbstractFormController没有什么太大的区别。唯一不同的是你不用实现 showForm和processFormSubmission: 一个form view 和一个success view 可以被配置。 工作流程(对父类而言,新增部分): a.调用processFormSubmission,如果在绑定和校验是出现错误,检测Errors对象。 b.如果错误出现,控制类将返回配置的form view,又一次显示form(或者根据错误信息递交) c.如果isFormChangeRequest被覆写,对于请求返回true,控制类将返回formview。在这种情况下 控制类将禁用校验。目的是,在一些情况下改变form的结构而不会引起校验。 d.如果没有错误发生,控制类将调用使用全部参数的onSubmit方法,这个方法在缺省的情况下的实现是代理到使用command对象的 onSubmit方法。后者的缺省实现将返回配置的success view。考虑实现 doSubmitAction(java.lang.Object),doSubmitAction针对简单的执行一个提交并返回success view。 通过覆写onSubmit()方法可以使提交行为更个性化.如果需要的话,提交动作也可以执行个性化的校验,出现校验错误时调用showForm重新展示 form view. 暴露的参数(其他在父类定义) name default description formView null 表示在提交时出现校验错误,哪个view将被展示 successView null 表示在成功提交后什么view将展示.例如这个success view可以展示一个提交总结.常用的方法时覆写其中一个onSubmit()方法

分享到:
评论
1 楼 insist_study 2010-09-17  
拿了你的 东西····   

相关推荐

    最全最经典spring-mvc教程

    Spring MVC 是一款强大的Java Web开发框架,用于构建高效、可维护和模块化的Web应用程序。它作为Spring框架的一部分,提供了一种优雅的方式来处理HTTP请求和响应,使得开发者可以专注于业务逻辑而不是底层实现。在这...

    Spring之MVC 入门实例

    Spring MVC 是一个基于 Spring 框架的 Model-View-Controller 模式实现,它为构建 Web 应用程序提供了一种高效、灵活的方法。在这个入门实例中,我们将深入理解 Spring MVC 的基本概念和工作原理,并通过实际操作来...

    Spring Web MVC外文翻译

    Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,它从 Spring 框架诞生之初就被包含其中。正式名称“Spring Web MVC”来源于其源模块 `spring-webmvc`,但在实际使用中更常见地被称为“Spring MVC”。 与 ...

    精通Spring MVC 4

    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。Spring MVC4是当前zuixin的版本,在众多特性上有了进一步的提升。, 在精通Spring...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南 高清可复制版PDF

    Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。这个教程“Spring MVC - A Tutorial”旨在帮助开发者深入理解和掌握Spring MVC的核心概念和...

    Spring Web MVC入门教程

    文件上传和下载功能是Web应用中常见的需求之一,Spring Web MVC通过MultipartResolver组件提供了对文件上传的支持。对于表单标签的支持,Spring Web MVC不仅简化了传统JSP标签的使用,还扩展了表单相关的处理能力。 ...

    spring-webmvc-5.0.9 jar包、源码和javadoc

    Spring Web MVC是Spring框架的核心模块之一,专为构建Web应用程序提供模型-视图-控制器(MVC)架构支持。在Spring 5.0.9这个版本中,它延续了Spring对开发者友好、灵活且高性能的设计原则,为开发人员提供了强大的...

    Spring3 MVC 深入研究

    《Spring3 MVC 深入研究》 Spring3 MVC是Spring框架的重要组成部分,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)框架。本篇文章将深入探讨Spring3 MVC的核心概念、工作原理以及如何在实际项目中...

    spring-mvc-官方中文文档

    Spring MVC 是 Spring 框架的一个重要组成部分,用于构建基于 Java 的 Web 应用程序。这个官方中文文档详细地介绍了如何使用 Spring MVC 来开发高效、可维护的 MVC(Model-View-Controller)架构的应用。Spring MVC ...

    Spring MVC jar包

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为开发者提供了模型-视图-控制器(MVC)架构,使开发人员能够更好地组织和分离应用程序的业务逻辑、数据处理和用户界面。Spring MVC是Spring框架的一个核心组件,...

    网上书城 spring-mvc

    《网上书城 Spring-MVC》项目是基于Spring-MVC框架构建的一个典型电子商务平台,它展示了如何使用Spring-MVC来实现高效、灵活的Web应用程序开发。Spring-MVC是Spring框架的一部分,专门用于处理Web层的业务,提供了...

    spring MVC配置详解

    Spring MVC 是一个基于 DispatcherServlet 的 MVC 框架,它是当前主流的 Web 框架之一。要想灵活运用 Spring MVC 来应对大多数的 Web 开发,就必须要掌握它的配置及原理。 一、Spring MVC 环境搭建 1. jar 包引入 ...

    spring3 MVC实战

    spring3 MVC实战

    spring-mvc-showcase

    《Spring MVC Showcase 深入解析》 Spring MVC 是 Spring 框架的重要组成部分,它为构建基于模型-视图-控制器(Model-View-Controller)架构的 Web 应用程序提供了一种强大的解决方案。本篇文章将深入探讨 "spring-...

    spring3.0 MVC中文教程

    请求处理生命周期是Spring MVC的核心概念之一。当客户端发送请求时,该请求经过以下步骤: 1. **请求到达**:客户端发送HTTP请求到Web服务器。 2. **DispatcherServlet拦截**:前端控制器(DispatcherServlet)接收...

    spring3MVC 框架demo

    Spring3MVC是Spring框架的一个重要模块,专为构建Web应用程序提供模型-视图-控制器(MVC)架构支持。这个框架使得开发者可以更轻松地处理HTTP请求、数据绑定、验证以及视图渲染等任务。在"spring3MVC框架demo"中,...

    Spring5MVC源码.docx

    【Spring5MVC源码分析】 Spring MVC 是一个基于Java的、用于构建Web应用程序的、高度可插拔的MVC框架,它是Spring Framework的重要组成部分。Spring MVC的核心目标是简化前端控制器的开发,使得开发者可以专注于...

    spring-mvc-4.2.xsd.zip

    Spring MVC是Spring框架的一个核心模块,用于构建Web应用程序。它提供了模型-视图-控制器(MVC)架构,使得开发者可以将业务逻辑、数据展示和用户界面分离,从而实现更清晰、可维护的代码结构。在Spring MVC中,`xsd...

Global site tag (gtag.js) - Google Analytics