在 Spring 系列 的第 3 部分中,我介绍 Spring MVC 框架。就像在以前的文章中一样,我用银行示例介绍如何建模和构建简单的应用程序。示例应用程序包含了已经学过的一些技术(例如依赖注入),但是主要演示 Spring MVC 的特性。

在开始之前,请 下载这篇文章的源代码。请参阅 参考资料 访问 Spring 框架和 Tomcat 5.0,运行示例需要它们。

Spring MVC 框架

Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

Spring 的 Web MVC 框架是围绕 DispatcherServlet 设计的,它把请求分派给处理程序,同时带有可配置的处理程序映射、视图解析、本地语言、主题解析以及上载文件支持。默认的处理程序是非常简单的 Controller 接口,只有一个方法 ModelAndView handleRequest(request, response)。Spring 提供了一个控制器层次结构,可以派生子类。如果应用程序需要处理用户输入表单,那么可以继承 AbstractFormController。如果需要把多页输入处理到一个表单,那么可以继承 AbstractWizardFormController

示例应用程序有助于直观地学习这些特性。银行应用程序允许用户检索他们的帐户信息。在构建银行应用程序的过程中,可以学到如何配置 Spring MVC 框架和实现框架的视图层,视图层包括 JSTL 标记(用于显示输出的数据)和JavaServer Pages 技术。

回页首

配置 Spring MVC

要开始构建示例应用程序,请配置 Spring MVC 的 DispatcherServlet。请在 web.xml 文件中注册所有配置。清单 1 显示了如何配置sampleBankingServlet

清单 1. 配置 Spring MVC DispatcherServlet
<servlet><servlet-name>sampleBankingServlet</servlet-name>  <servlet-class>org.springframework.we.servlet.DispatcherServlet<servlet-class><load-on-startup>1<load-on-startup>
<servlet>

DispatcherServlet 从一个 XML 文件装入 Spring 应用程序上下文,XML 文件的名称是 servlet 的名称后面加上 -servlet 。在这个示例中,DispatcherServlet 会从 sampleBankingServlet-servlet.xml 文件装入应用程序上下文。

配置应用程序的 URL

下一步是配置想让 sampleBankingServlet 处理的 URL。同样,还是要在 web.xml 中注册所有这些信息。

清单 2. 配置想要处理的 URL
<servlet-mapping>
<servlet-name> sampleBankingServlet<servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>

装入配置文件

下面,装入配置文件。为了做到这点,请为 Servlet 2.3 规范注册 ContextLoaderListener 或为 Servlet 2.2 及以下的容器注册ContextLoaderServlet。为了保障后向兼容性,请用 ContextLoaderServlet。在启动 Web 应用程序时,ContextLoaderServlet会装入 Spring 配置文件。清单 3 注册了 ContextLoaderServlet

清单 3. 注册 ContextLoaderServlet
<servlet><servlet-name>context>servlet-name><servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

contextConfigLocation 参数定义了要装入的 Spring 配置文件,如下面的 servlet 上下文所示。

<context-param>
<param-value>contextConfigLocation</param-value>
<param-value>/WEB-INF/sampleBanking-services.xml</param-value>
</context-param>

sampleBanking-services.xml 文件代表示例银行应用程序服务的配置和 bean 配置。如果想装入多个配置文件,可以在 <param-value> 标记中用逗号作分隔符。

回页首

Spring MVC 示例

示例银行应用程序允许用户根据惟一的 ID 和口令查看帐户信息。虽然 Spring MVC 提供了其他选项,但是我将采用 JSP 技术作为视图页面。这个简单的应用程序包含一个视图页用于用户输入(ID 和口令),另一页显示用户的帐户信息。

我从 LoginBankController 开始,它扩展了 Spring MVC 的 SimpleFormControllerSimpleFormContoller 提供了显示从 HTTP GET 请求接收到的表单的功能,以及处理从 HTTP POST 接收到的相同表单数据的功能。LoginBankController 用AuthenticationService 和 AccountServices 服务进行验证,并执行帐户活动。“ 配置视图属性 ”一节中的 清单 5 描述了如何把AuthenticationService 和 AccountServices 连接到 LoginBankController。 清单 4 显示了 LoginBankController 的代码。

配置视图属性

下面,我必须注册在接收到 HTTP GET 请求时显示的页面。我在 Spring 配置中用 formView 属性注册这个页面,如清单 5 所示。sucessView 属性代表表单数据提交而且 doSubmitAction() 方法中的逻辑成功执行之后显示的页面。formView 和 sucessView 属性都代表被定义的视图的逻辑名称,逻辑名称映射到实际的视图页面。

清单 5. 注册 LoginBankController
   <bean id="loginBankController"class="springexample.controller.LoginBankController"><property name="sessionForm"><value>true</value></property><property name="commandName"><value>loginCommand</value></property><property name="commandClass"><value>springexample.commands.LoginCommand</value></property><property name="authenticationService"><ref bean="authenticationService" /></property><property name="accountServices"><ref bean="accountServices" /></property><property name="formView"><value>login</value></property><property name="successView"><value>accountdetail</value></property></bean>

commandClass 和 commandName 标记决定将在视图页面中活动的 bean。例如,可以通过 login.jsp 页面访问 loginCommand bean,这个页面是应用程序的登录页面。一旦用户提交了登录页面,应用程序就可以从 LoginBankController 的 onSubmit() 方法中的命令对象检索出表单数据。

视图解析器

Spring MVC 的 视图解析器 把每个逻辑名称解析成实际的资源,即包含帐户信息的 JSP 文件。我用的是 Spring 的InternalResourceViewResolver,如 清单 6 所示。

因为我在 JSP 页面中使用了 JSTL 标记,所以用户的登录名称解析成资源 /jsp/login.jsp,而 viewClass 成为 JstlView

验证和帐户服务

就像前面提到的,LoginBankController 内部连接了 Spring 的 AccountServices 和AuthenticationServiceAuthenticationService 类处理银行应用程序的验证。AccountServices 类处理典型的银行服务,例如查找交易和电汇。清单 7 显示了银行应用程序的验证和帐户服务的配置。

清单 7. 配置验证和帐户服务
<beans><bean id="accountServices" class="springexample.services.AccountServices"></bean><bean id="authenticationService" class="springexample.services.AuthenticationService"></bean>
</beans>

以上服务在 sampleBanking-services.xml 中注册,然后装入 web.xml 文件中,就像 前面讨论的那样。控制器和服务配置好后,这个简单的应用程序就完成了。现在我们来看看部署和测试它时会发生什么!

回页首

部署应用程序

我把示例应用程序部署在 Tomcat servlet 容器中。Tomcat 是 Java Servlet 和 Java ServerPagest 技术的官方参考实现中使用的 servlet 容器。如果以前没这么做过,请 下载 jakarta-tomcat-5.0.28.exe 并运行它把 Tomcat 安装到自己喜欢的任何位置,例如 c:\tomcat5.0

接下来,下载示例代码 并释放到驱动器(例如 c:\ )上。创建了 Spring 项目的文件夹之后,打开它并把 spring-banking 子文件夹拷贝到c:\tomvat5.0\webapps。spring-banking 文件夹是一个 Web 档案,里面包含 Spring MVC 示例应用程序。lib 文件夹包含应用程序需要的 Spring 框架、与Spring 相关的 MVC 库以及 JSTL 标记库和 jar 文件。

要启动 Tomcat 服务器,请使用以下命令:

cd bin C:\Tomcat 5.0\bin> catalina.bat start

Tomcat 应当启动并部署 Spring MVC 示例应用程序。

回页首

测试应用程序

要测试应用程序,请打开 Web 浏览器,指向 http://localhost:tomcatport/springbanking 并用 Tomcat 服务器实际运行的端口替换 tomcatport。应当看到图 1 所示的登录屏幕。输入用户 ID “admin”和口令“password”,并按下登录按钮。其他用户 ID 或口令会造成来自验证服务的错误。

图 1. Spring MVC 示例登录屏幕

登录成功之后,会看到图 2 所示的帐户细节页面。

图 2. Spring MVC 示例帐户细节页面

回页首

结束语

在三部分的 Spring 系列 的第三篇文章中,我介绍了 Spring MVC 框架的特性。我演示了如何配置和开发 Spring MVC 应用程序、如何配置 Spring MVC 控制器和向其中插入依赖项、如何用 JavaServer Pages 技术开发应用程序视图,以及如何把自己的页面与 Spring MVC 的视图层集成。总结这篇文章时,我演示了如何在 Tomcat servlet 容器中部署应用程序以及如何在浏览器中测试它。

请继续关注 Spring 系列 的下一篇文章。在下一篇文章中,我将介绍如何把基于 JMS 的应用程序与 Spring 框架集成。同时,请参阅 参考资料 学习更多有关 Spring 框架和 Spring MVC 的内容。

回页首

下载

描述 名字 大小
Example source code, spring files, jar files wa-spring3-SpringProjectPart3.zip 1966 KB

参考资料

学习

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文。
  • “Spring 系列,第 1 部分: Spring 框架简介”(developerWorks,2005 年 6 月)和“Spring 系列,第 2 部分: 当 Hibernate 遇上 Spring” (developerWorks,2005 年 8 月):介绍了如何用 Spring 技术构建轻量级的、健壮的 J2EE 应用程序以及如何把 Hibernate 事务与 Spring 的面向方面编程(AOP)集成形成可靠的持久性框架。
  • “AOP@Work: AOP 工具比较,第 1 部分”(Mik Kersten,developerWorks,2005 年 2 月):比较了 Spring AOP 和 AOP 框架。
  • “轻量级开发的成功秘诀,第 3 部分: Spring 露出水面”(Bruce Tate,developerWorks,2005 年 6 月):演示了 Spring 作为轻量级容器的意义。
  • “Ruby on Rails 和 J2EE:两者能否共存?”(Aaron Rustad, developerWorks,2005 年 7 月):比较了不太为人所知的 J2EE 框架替代品,像 EJB 和 Spring。
  • Java 技术专区:有数百篇文章,覆盖基于 Java Web 的解决方案。

获得产品和技术

  • Spring 主页:下载 Spring 框架。
  • Ant 主页:下载 Apache Ant。
from: http://www.ibm.com/developerworks/cn/java/wa-spring3/

Spring 系列,第 3 部分: 进入 Spring MVC相关推荐

  1. Spring系列(九):Spring属性赋值注解@Value 用法介绍

    今天给大家分享Spring属性赋值注解@Value 用法,希望对大家能有所帮助! 1.@Value注解的作用 @Value注解的作用主要可以给属性直接赋值.也可以读取配置文件中的值给属性赋值 2.@V ...

  2. Spring系列(八):Spring生命周期中BeanPostProcessor接口用法介绍

    今天给大家介绍BeanPostProcessor接口用法,希望对大家能有所帮助! 1.BeanPostProcessor 概念介绍 BeanPostProcessor接口通常被称为Bean的后置处理器 ...

  3. 【Spring系列】- 手写模拟Spring框架

    简单模拟Spring

  4. 朱晔和你聊Spring系列S1E11:小测Spring Cloud Kubernetes @ 阿里云K8S

    有关Spring Cloud Kubernetes(以下简称SCK)详见https://github.com/spring-cloud/spring-cloud-kubernetes,在本文中我们主要 ...

  5. Spring系列(七)、Spring与MyBatis框架整合

    7 搭建Spring与MyBatis的集成环境 要实现Spring与MyBatis的整合,很明显需要这两个框架各自的jar包,以及整合两个框架的中间包mybatis-spring.jar: 我们使用m ...

  6. 最新 Spring 系列教程,都在这了

    转载自  最新 Spring 系列教程,都在这了 Spring Boot 系列 什么是 Spring Boot? 公司不用 Spring Boot,果断离职了! 告诉你,Spring Boot 真是个 ...

  7. 夯实Spring系列|总览介绍

    文章目录 系列文章 番外篇 1.文章说明 2.整理目的 3.Spring 核心特性 4.数据存储(Data Access) 5.Web 技术 6.技术整合 7.测试(Testing) 8.Java 版 ...

  8. Spring系列第20篇:@Conditional通过条件来控制bean的注册

    面试阿里p7被问到的问题(当时我只知道第一个): @Conditional是做什么的? @Conditional多个条件是什么逻辑关系? 条件判断在什么时候执行? ConfigurationCondi ...

  9. Spring系列第10篇:primary可以解决什么问题?

    存在的问题以及解决方案 直接上案例,通过案例来看技术是如何使用的: package com.javacode2018.lesson001.demo8;public class NormalBean { ...

最新文章

  1. 递归函数 集合 列表 元组
  2. 基于 eBPF 的 prometheus 监控方案
  3. Bootstrap的栅格布局
  4. Go Modules 的智障版本选择
  5. 频段表_5G频段范围之:频段3.3GHz-4.2GHz (n77,n78)
  6. android51版本小游戏,世界游戏大全51游戏下载-世界游戏大全51预约 安卓版v1.0.0-PC6手游网...
  7. 第27课 数组的本质分析
  8. java jfif,win10保存图片成了jfif格式怎么办?
  9. 接口测试, 功能测试(黑盒测试)
  10. 学院开展计算机基础知识比赛,信阳师范学院顺利举办第七届计算机基础知识决赛...
  11. js解决动态绑定事件时不能传参的问题
  12. Springboot内嵌tomcat
  13. 云目录(DaaS )快速入门
  14. 北大培训课动态规划----神奇的口袋(百练2755)
  15. html svg文件 热区,前端常识 【svg+热区】处理平面图
  16. 文库变现流量+赚钱副业好项目
  17. 如何15分钟快速入门LaTeX公式?
  18. 微博和知乎中的 feed 流是如何实现的?
  19. 3.12 CMMI3级——深入理解三个O(OPF OPD OT)
  20. c语言学习打卡日记 3、有关assis码的字符转换

热门文章

  1. 遍历python字典的几种方法
  2. 关于Linux Kernel中的宏定义likely和unlikely
  3. 没用过这些 IDEA 插件?怪不得写代码头疼
  4. 大众可视化:精美酷炫的可视化图表,自动生成!
  5. 北京市:通过区块链等技术手段,实现住所申报材料无纸化
  6. 计算机视觉工具包Luminoth
  7. 【深度学习下一大突破】吴恩达对话 Hinton、Bengio、Goodfellow(视频)
  8. 不到 200 行代码,教你如何用 Keras 搭建生成对抗网络(GAN)
  9. 《巴伦周刊》:纳德拉带领微软中兴
  10. 爬虫学习笔记(二十二)—— Mitmproxy