




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第21章Spring的MVC框架 Spring不但一个很好的集成框剪 它还提供了构建Web应用程序的全功能MVC模块 Spring的MVC框架非常强大并不逊色于其他专业的Web框架 如Struts WebWork 但在国内SpringMVC应用的并不是特别多 原因可能是Struts太深入人心的缘故吧 虽然SpringMVC并不是本书的重点 但了解它的结构和原理也是十分有好处的 21 1SpringMVC简介 Spring的MVCWeb框架是高度可配置的 而且包含多种视图技术 例如JSP Velocity Tiles和iText SpringMVC分离了控制器 模型对象 分派器以及处理程序对象的角色 这种分离让它们更容易进行定制 21 1 1SpringMVC的结构 Spring的web框架是围绕DispatcherServlet来进行设计的 DispatcherServlet的作用是将请求分发到不同的处理器 Spring的web框架包括可配置的处理器 handler 映射 视图 view 解析 本地化 local 解析 主题 theme 解析以及对上传文件解析 处理器是对Controller接口的实现 该接口仅仅定义了ModelAndViewhandleRequest request response 方法 可以通过实现这个接口来生成自己的控制器 也可以称之为处理器 但是从Spring提供的一系列控制器继承会更省事 比如AbstractController AbstractCommandController和SimpleFormController 21 1 2SpringWebMVC框架的特点 SpringWebMVC框架提供了大量独特的功能 包括 清晰的角色划分 控制器 controller 验证器 validator 命令对象 commandobject 表单对象 formobject 模型对象 modelobject Servlet分发器 DispatcherServlet 处理器映射 handlermapping 视图解析器 viewresolver 等等 每一个角色都可以由一个专门的对象来实现 强大而直接的配置方式 将框架类和应用类都作为JavaBean配置 支持在一个context中引用其他context的中JavaBean 例如 在web控制器中对业务对象和验证器 validator 的引用 21 1 2SpringWebMVC框架的特点 可重用的业务代码 可以使用现有的业务对象作为命令或表单对象 而不需要在类似ActionForm的子类中重复它们的定义 可定制的绑定 binding 和验证 validation 比如将类型不匹配作为应用级的验证错误 这可以保存错误的值 再比如本地化的日期和数字绑定等等 在其他某些框架中 只能使用字符串表单对象 需要手动解析它并转换到业务对象 可定制的handlermapping和viewresolution Spring提供从最简单的的URL映射 到复杂的 专用的定制策略 与某些MVC框架强制开发人员使用单一特定技术相比 Spring显得更加灵活 灵活 21 1 2SpringWebMVC框架的特点 灵活的model转换 在Springweb框架中 使用基于Map的名 值对来达到轻易地与各种视图技术的集成 可定制的本地化和主题 theme 解析 支持在JSP中可选择地使用Spring标签库 支持JSTL 支持Velocity 不需要额外的中间层 等等 SpringBean的生命周期可以被限制在当前的HTTPRequest或者HTTPSession 准确的说 这并非SpringMVC框架本身特性 而应归属于SpingMVC使用的WebApplicationContext容器 21 2DispatcherServlet的功能 和其它web框架一样 Spring的web框架是一个请求驱动的web框架 其设计围绕一个中心的servlet进行 它能将请求分发给控制器 并提供其它功能帮助web应用开发 然而 Spring的DispatcherServlet所做的不仅仅是这些 它和Spring的IoC容器完全集成在一起 从而允许使用Spring的其它功能 21 2 1在Web服务器中配置DispatcherServlet DispatcherServlet顾名思义实际上还是一个Servlet 和其它Servlet一样 DispatcherServlet定义在web应用的web xml文件里 DispatcherServlet处理的请求必须在同一个web xml文件里使用url mapping定义映射 如代码21 1所示演示了如何配置DispatcherServlet 21 2 2加载Bean配置文件 当DispatcherServlet配置好以后 DispatcherServlet接收到与其对应的请求之时 处理就开始了 下面的列表描述了DispatcherServlet处理请求的全过程 1 找到WebApplicationContext并将其绑定到请求的一个属性上 以便控制器和处理链上的其它处理器能使用WebApplicationContext 默认的属性名为DispatcherServlet WEB APPLICATION CONTEXT ATTRIBUTE 2 将本地化解析器 localResolver 绑定到请求上 这样使得处理链上的处理器在处理请求 准备数据 显示视图等等 时能进行本地化处理 若不使用本地化解析器 也不会有任何副作用 因此如果不需要本地化解析 忽略它就可以了 21 2 2加载Bean配置文件 3 如果上传文件解析器被指定 Spring会检查每个接收到的请求是否存在上传文件 如果是 这个请求将被封装成MultipartHttpServletRequest以便被处理链中的其它处理器使用 4 找到合适的处理器 执行和这个处理器相关的执行链 预处理器 后处理器 控制器 以便为视图准备模型数据 5 如果模型数据被返回 就使用配置在WebApplicationContext中的视图解析器显示视图 否则视图不会被显示 有多种原因可以导致返回的数据模型为空 比如预处理器或后处理器可能截取了请求 这可能是出于安全原因 也可能是请求已经被处理过 没有必要再处理一次 21 2 3SpringWeb应用的上下文 WebApplicationContext仅仅是一个拥有web应用必要功能的普通ApplicationContext 它与一个标准的ApplicationContext的不同之处在于 它能够解析加载主题 并且它知道自己与哪个servlet相关联 通过ServletContext WebApplicationContext被绑定在ServletContext上 当需要的时候 可以使用RequestContextUtils提供的静态方法找到WebApplicationContext Spring的DispatcherServlet有一组特殊的bean 用来处理请求和渲染相应的视图 这些bean包含在Spring的框架里 可以在WebApplicationContext中配置 配置方式与配置其它bean相同 这些bean中的每一个都在下文作详细描述 此刻读者只需知道它们的存在 便继续对DispatcherServlet进行讨论 对大多数bean Spring都提供了合理的缺省值 所以在开始阶段 不必担心如何对其进行配置 21 3控制器 Controller 控制器的概念是MVC设计模式的一部分 在其他Web框架中常常被称为Action 而在SpringMVC中叫做Controller 应用程序的行为通常被定义为服务接口 而控制器使得用户可以访问应用所提供的服务 控制器解析用户输入 并将其转换成合理的模型数据 从而可以进一步由视图展示给用户 Spring以一种抽象的方式实现了控制器概念 这样使得不同类型的控制器可以被创建 Spring本身包含表单控制器 命令控制器 向导型控制器等多种多样的控制器 可以发现Controller接口仅仅声明了一个方法 它负责处理请求并返回合适的模型和视图 虽然Controller接口是完全抽象的 Controller接口仅仅定义了每个控制器都必须提供的基本功能 处理请求并返回一个模型和一个视图 但Spring也提供了许多可能会用到的控制器 可以直接使用或者继承它们来实现需要个功能 21 3 1基类AbstractController 为了提供一套基础设施 所有的Spring控制器都继承了AbstractController AbstractController提供了诸如缓存支持和mimetype设置这样的功能 如表所示累出的AbstractController包含的功能 21 3 2其他实用的控制器 除了从AbstractController继承来实现Controller外 Spring还提供了一批实用的Controller 供用直接使用 下面仅介绍一些比较常用 1 MultiActionController将多个行为 action 合并在一个控制器里 这样可以把相关功能组合在一起 2 CommandControlle rSpring的是SpringMVC的重要部分 3 SimpleFormController 这是一个formcotnroller 当需要根据命令对象来创建相应的form的时候 该类可以提供更多的支持 21 4处理器映射 handlermapping 通过处理器映射可以将web请求映射到正确的处理器 handler 上 HandlerMapping的基本功能是将请求传递到HandlerExecutionChain上 首先 这个HandlerExecutionChain必须包含一个能处理该请求的处理器 其次 这个链也可以包含一系列可以拦截请求的拦截器 当收到请求时 DispatcherServlet将请求交给处理器映射 让它检查请求并找到一个适当的HandlerExecutionChain 然后 DispatcherServlet执行定义在链中的处理器和拦截器 interceptor 21 5视图解析器 视图解析器是控制器之后的处理过程 是控制器与视图之间的桥梁 SpringWeb框架的所有控制器都返回一个ModelAndView实例 Spring提供了视图解析器供在浏览器显示模型数据 而不必被束缚在特定的视图技术上 Spring内置了对JSP Velocity模版和XSLT视图的支持 ViewResolver是Spring的视图处理方式中特别重要的接口 ViewResolver提供了从视图名称到实际视图的映射 View处理请求的准备工作 并将该请求提交给某种具体的视图技术 Spring为多种视图都提供了不同的解析器 21 6Spring对视图的支持 与其他Web框架一样Spring对视图也提供了很多支持 如Spring的标签库 主题 支持其他模板 这些概念在本书的前一篇Struts2中已经有过介绍 相信读者不会十分陌生 21 6 1Spring的标签库 Spring的表单标签库存在spring jar中 这个库的描述文件 descriptor 是spring form tld 如果想使用这些标签 可以在JSP代码的起始部分加入下面这行声明 form是这个标签库所提供标签的前缀名 21 6 2Spring的主题 主题的概念并不陌生 在本书的Struts2篇已经介绍过 在Spring中为了在web应用中使用主题 需要设置org springframework ui context ThemeSource WebApplicationContext是从ThemeSource扩展而来 但是它本身并没有实现ThemeSource定义的方法 它把这些任务转交给别的专用模块 如果没有明确设置 真正实现ThemeSource的类是org springframework ui context support ResourceBundleThemeSource 这个类在classpath的根部 比如在 WEB INF classes目录下 寻找合适的属性文件来完成配置 21 7MVC的完整实例 本节将以一个完整实例还演示SpringMVC的使用方法 示例银行应用程序允许用户根据惟一的ID和口令查看帐户信息 采用JSP技术作为视图页面 这个简单的应用程序包含一个视图页用于用户输入 另一页显示用户的帐户信息 21 7 1配置Web xml 所有的Web应用都要从配置Web xml开始 Struts是如此 那么Spring的Web模块也不例外 是通过一个Servlet将框架启动的 21 7 2创建Controller 从LoginBankController开始 它扩展了SpringMVC的SimpleFormController SimpleFormContoller提供了显示从HTTPGET请求接收到的表单的功能 以及处理从HTTPPOST接收到的相同表单数据的功能 LoginBankController用AuthenticationService和AccountServices服务进行验证 并执行登录活动 AuthenticationService类处理银行应用程序的验证 AccountServices类处理典型的银行服务 例如查找交易和电汇 代码21 9描述了如何把AuthenticationService和AccountServices连接到LoginBankController 21 7 3视图解析器 SpringMVC的视图解析器把每个逻辑名称解析成实际的资源 即包含帐户信息的JSP文件 这里使用的是InternalResourceViewResolver 在JSP页面中使用了JSTL标记 所以用户的登录名称解析成资源 jsp login jsp 而viewClass成为JstlView 代码配置视图解析器 sampleBanking services xmlorg springframework web servlet view JstlView jsp jsp 21 7 4JSP页面 本实例只包含两个JSP页面 一个登录界面如代码所示 21 7 5发布于测试 与一般的Web程序一样 需要在Tomcat的发布目录webapps下创建一个Web目录 本例中命名为 springbanking 目录中包含WEB INF classes 例子中类文件编译后应该在此目录 在把Spring需要的jar文件加入到WEB INF lib下 工程需要的配置文件sampleBanking services xml sampleBankingServlet servlet xml web xml都应该在WEB INF目录下 目录结构如图所示 21 8用注释来驱动SpringMVC 2 5新增 继Spring2 0对SpringMVC进行重大升级后 Spring2 5又为SpringMVC引入了注释驱动功能 现在无须让Controller继承任何接口 无需在XML配置文件中定义请求和Controller的映射关系 仅仅使用注释就可以让一个POJO具有Controller的绝大部分功能 SpringMVC框架的易用性得到了进一步的增强 在框架灵活性 易用性和扩展性上 伴随着Spring一路高唱猛进 可以预见SpringMVC在MVC市场上的吸引力将越来越不可低估 21 8 1基于注释的Controller 如前面章节中介绍的 当创建一个Controller时 需要直接或间接地实现org springframework we
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单位正职面试题及答案
- 工厂奇葩面试题及答案
- 农村村民房屋承包协议书
- 关于建设工程工期协议书
- 产假延续劳动合同范本
- 房子夫妻共同所有协议书
- 房屋改造设计合同范本
- 夫妻合同管理装修协议书
- 无力治疗困难救助协议书
- 婚后夫妻异地工作协议书
- β内酰胺类抗菌药物皮肤试验指导原则2024课件
- 弱电机房工程报价清单
- 口腔医院感染预防与控制
- 电弧增材制造工艺及其应用
- YALEBROWN强迫量表完全
- 医疗机构消毒记录表清洁消毒日检查记录表
- 2024年全国甲卷高考物理试卷(真题+答案)
- 广西壮族自治区桂林市2023-2024学年七年级下学期期末考试数学试题
- 2024年农产品食品质量安全检验员技能及理论知识考试题库(附含答案)
- 无人机足球团体对抗赛项目竞赛规则
- 《建筑材料》教案
评论
0/150
提交评论