英语原文共 34 页,剩余内容已隐藏,支付完成后下载完整资料
第7章:Spring Web MVC框架
在上一章中,我向大家概述了Spring框架。我们了解了什么是Spring,它是如何打包的,以及它包含的各种模块。我还提到,在Spring中,当你决定是否使用Spring时,你不必采取使用全部模块的方法。换句话说,根据你的需要,你可以一次在Spring框架中同步一个模块(以及任何依赖项)。在本章中,我将演示如何使用Spring Web MVC框架,来构建我们的工时系统,即示例Web应用程序。
请注意,从此处起,我会在大部分时候将Spring Web MVC框架简称为Spring MVC。
本章包括的内容
在本章中,我们将会:
- 介绍使用Spring MVC的各种好处
- 深入了解Spring Web MVC框架
- 使用Spring MVC构建工时系统中的三个界面:一个无控制器,两个表单控制器和一个Spring HTTP拦截器。
注意
本书中使用的完整代码示例可以在本书的代码压缩文件(提供在本书的网站上)中找到。
这是令人兴奋的一章,所以我不会浪费任何时间无聊地介绍材料。让我们开始吧!
Spring Web MVC框架的优点
Spring Web MVC框架是一个强大,灵活和设计良好的框架,用于使用MVC设计模式快速开发Web应用程序。使用此Spring模块所获得的好处与Spring框架的其余部分相似。我们来回顾一下这些。本章稍后将介绍其中的一些好处。
- 更易于测试——你会发现在所有的Spring课程中,这是一个常见的主题。Spring的大部分类被设计为JavaBeans的事实使你能够使用这些类的setter方法注入测试数据。Spring还提供了模拟类来模拟Java HTTP对象(例如HttpServletRequest),这使Web层的单元测试更加简单。
- 可直接绑定到业务对象——Spring MVC不需要你的业务(模型)类来扩展任何特殊类;这使你能够通过将业务对象直接绑定到HTML表单字段来重用你的业务对象。事实上,你的控制器类是唯一需要扩展Spring类(或实现Spring控制器接口)的类。
- 可明确分离角色——Spring MVC很好地分离了构成此Web框架的各种组件所起的作用。例如,当我们讨论诸如控制器,命令对象和验证器之类的概念时,你将开始看到每个组件如何起着不同的作用。
- 可适应性控制器——如果你的应用程序不需要HTML表单,你可以编写一个更简单的Spring控制器版本,它需要所有表单控制器所需的额外组件。事实上,Spring提供了几种类型的控制器,每种控制器都有不同的用途。例如:无表单控制器,简单表单控制器,向导形式控制器,无控制器的视图,甚至是预包装的控制器,使你无需自己的自定义控制器就可以编写视图。
- 简单但功能强大的标签库——Spring标签库很小,直接,但功能强大。 例如,Spring使用JSP表达式语言(EL)作为lt;spring:bindgt;标签的参数。
- Web流程——此模块是一个子项目,不与Spring核心分发捆绑。它建立在Spring MVC之上,并增加了轻松编写跨多个HTTP请求的向导式Web应用程序(例如网络购物车)的功能。
- 视图技术和Web框架——尽管我们使用JSP作为视图技术,但Spring还支持其他视图技术,例如Apache Velocity(jakarta.apache.org/velocity/)和FreeMarker(freemarker.org)。这是一个强大的概念,因为从JSP切换到Velocity是一个配置问题。此外,Spring还为Apache Struts(struts.apache.org),Apache Tapestry(jakarta.apache.org/tapestry)和OpenSymphony的WebWork(opensymphony.com/webwork/)提供集成支持。
- 轻量级环境——正如我在上一章中提到的,Spring使你能够使用POJO构建企业级应用程序;环境设置可以更简单、成本更低,因为你可以使用更轻量级的servlet容器来开发和部署应用程序。
Spring Web MVC概念
Java的世界在过去几年中已经出现了许多基于MVC设计模式的Web框架(其中几个在本章末尾列出)。MVC最初是在1978-79时间段内在XEROX PARC设计的,后来在Smalltalk-80类库(也在XEROX PARC)中实施。这是一个相对简单的概念来掌握和提供图像和数据的清晰分离,我将在此简要解释。
首先,我们来看看我们在本书前面建立的架构图,如图7.1所示。
图7.1 工时系统的高级架构图
如你所见,来自Web浏览器的所有传入的HTTP请求都由Controllers控制。控制器如名称所示,通过促进它们之间的数据交换来控制视图和模型。这种方法的主要优点是该模型可以只关心数据,不用理解视图。另一方面,视图不了解模型和业务逻辑,只是将数据传递给它(作为我们的网页)。MVC 模式还允许我们更改视图的同时,无需更改模型。
我们来看一下Spring MVC基本概念。首先,我们将介绍与Java编码相关的概念,然后我们将介绍完成所有这些工作所需的配置。
Spring MVC的Java概念
图7.1为我们提供了工时系统架构的高级视图。现在我们来进行Spring MVC组件的一些更详细和重点的介绍。图7.2显示了工时系统中典型界面的端到端流程。此图显示了我们将在下面讨论的许多概念。
控制器
Spring提供了许多类型的控制器。这既有好的影响,也有坏的印象。好的是,你有多种控制器可供选择,但这也恰好是坏的部分,因为它可能有点混乱,首先使用哪一个。
决定使用哪种控制器类型的最佳方式是了解你需要什么类型的功能。例如,你的界面是否包含表单?你需要灵活的功能吗?你只想重定向到JSP页面,不需要有控制器?这些是你需要询问的问题,以帮助你缩小选择范围。
图7.2 使用Spring和Hibernate输入时界面的端到端流程
图7.3显示了一些更有趣的控制器的类图,它们是Spring MVC的一部分。表7.1提供了有关接口和类的简要说明,如图7.3所示。(注意:本表中提供的说明直接从Spring Framework Javadocs中获取)。我倾向于使用SimpleFormController,UrlFilenameViewController和AbstractController。我们将在本章后面看到这些例子。
图7.3 Spring控制器部分列表的类图
表7.1各种Spring控制器的说明
Controller |
Description (Taken Directly from the Spring Javadocs) |
AbstractCommandController |
Abstract base class for custom command controllers. |
AbstractController |
Convenient superclass for controller implementations, using the Template Method design pattern. |
AbstractFormController |
Form controller that autopopulates a form bean from the request. |
AbstractUrlViewController |
Abstract base class for Controllers that return a view name based on the URL. |
AbstractWizardFormController |
Form controller for typical wizard-style workflows. |
BaseCommandController |
Controller implementation that creates an object (the command object) on receipt of a request and attempts to populate this object with request parameters. |
CancellableFormController |
Extension of SimpleFormController that supports “cancellation” of form processing. |
Controller |
Base Controller interface, representing a component that receives HttpServletRequest and HttpServletResponse like a HttpServlet but is able to participate in an MVC workflow. |
ParameterizableViewController |
Trivial controller that always returns a named view. |
SimpleFormController |
Concrete FormController implementation that provides configurable form and success views, and an onSubmit chain for convenient overriding. |
UrlFilenameViewController |
Controller that transforms the virtual filename at the end of a URL into a view name and returns that view. |
模型和视图
Controller相关子类中的许多方法返回一个org.springframework.web.servlet.ModelAndView对象。该对象包含模型(作为java.util.Map对象)和视图名称,并可以从方法返回一个返回值。我们将在本章后面看到我们构建工时系统的两个界面的示例。
命令(表单备份)对象
Spring使用命令对象的概念,它本质上是一个JavaBean样式类,它从HTML表单的字段中填充数据。同一个对象也被传递给我们的验证器(下面讨论),用于数据验证,如果验证通过 ,它被传递给onSubmit方法(在控制器相关类中)以处理有效数据。鉴于此命令对象是一个简单的JavaBean样式类,我们可以直接使用我们的业务对象进行数据绑定,而不是仅为数据绑定编写特殊类。我将在本章的后面展示这个好处。
验证器
一个Spring验证器是一个可选类,可以为给定的命令(form)控制器验证表单数据。该验证器类是一个实现org.springframework.validation.Validator接口的具体类。该接口所需的两种方法之一是验证方法,它传递一个如前所述的命令对象和一个Errors对象,可用于返回错误。我将在本章后面展示一个Validator类的示例。一个值得注意的验证类是org.springframework.validation.ValidationUtils,它为拒绝空字段提供了方便的方法。
Spring标签库(spring:bind)
Spring绑定标签库简单而强大。它通常通过JSP文件中使用lt;spring:bindgt;标签,其实质上将HTML表单域绑定到命令对象。此外,它提供对JSP中特殊变量的访问,例如$ {status.value},$ {status.expression}和$ {status.errorMessages},我们将在本章的后面查看。
Spring MVC配置概念
在本节中,我们将回顾一些与配置Spring Web MVC框架相关的核心概念。
前端控制器DispatcherServlet
DispatcherServlet(org.springframework.web.servlet包的一部分)是Spring Web MVC的入口点,
全文共31259字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[145911],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。