j2ee项目实训struts框架技术——第12章struts2框架技术及应用第1部分内容摘要:

要求,可以 配置不同的拦截器或者拦截器 链。 这些拦截器 链中的各个 组件为请求提供了各种预处理、切面处理 等方面 的杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 7/16 页 功能。 当然,这种设计思想其实和原有的 Struts 框架中使用 Jakarta Commons Chain 组件的 RequestProcessor 组件 类很相似 ,但更加模板化和职责分离。 由于在 Struts 2 框架 中大量使用拦截器 组件 来处理用户 的 请求,从而 就能够 达到将 业务逻辑 的 控制器与 J2EE Servlet API 相互 分离 的解藕设计目标 —— 因为 Struts 2 框架 中的各种 拦截器 是面向切面编程( AOP, Aspect Oriented Programming)技术中的切面 组件 ( Advice)。 2) 各个 拦截器组件 组成一个 链 式结构并相互协作 Struts2 框架 是一种 支持拦截器 ( Interceptor)技术的 框架, 通过各个 拦截器 组件 实现 将 应用系统中与控制调度有关的共同功能 行为独立出来, 并 在 系统的 Action 组件 执行前和 后 被触发执行。 这种设计方案 也就是 面向切面编程技术( AOP)和思想的具体应用 , AOP是分散关注 点 的编程方法,它将通用需求 的 功能从不相关类中分离出来。 因此,客户端 提交 产生出 对 某个 Aciton 组件的 HttpServletRequest 请求时, Struts2框架 中的 FilterDispatcher 组件 会根据请求 的类型 ,调度并执行相应的 业务控制器 Action组件。 而 在 Action 组件被 执行之前, 要 调用 各个 拦截器组件 中的方法以 完成在请求处理之前的共性的功能实现(如身份验证、初始化请求的资源等)。 同样 , 在 Action 组件 执行 完毕 后 仍然会触发各个 拦截器组件 以完成对请求处理 后的善后处理功能要求。 3)控制层设计中应用各种 拦截器组件 的主要目的 Struts2 框架 在系统总体架构设计方面,在控制层设计中大量地应用各种 拦截器组件 的主要目的,一方面除了要达到 AOP 中所倡导的“分离核心关注点和辅助关注点”的设计目标以外,另一方面则是希望将系统中的业务控制器 Action 组件独立于 J2EE Servlet 容器,从而达到对 业务逻辑 的 控制 调度 与 J2EE Servlet API 相互 分离 的解藕设计目标。 Struts 2 框架 的控制器组件是 Struts 2 框架的核心, 目前 所有 MVC 框架都是以控制器组 件为核心的。 Struts 2 框架 的控制器 也是 由两个部分组成 —— FilterDispatcher 过滤器组件和业务控制器 Action 组件 类。 当然, 起 主要 作用的业务控制器 其实 不是 开发人员编程定义 及实现 的 Action 组件 类 ,而是 由 Struts 2 框架 系统生成的 Action 组件代理 (也就是图 中所标识的 ActionProxy 组件) ,但该 ActionProxy 组件会回调 用户 编程 定义的 各个 业务控制器 Action 组件。 4)在 Web 应用系统部署描述文件 中配置出 FilterDispatcher 组件 Struts 2 框架 也是 J2EE 核心设计模式( J2EE Core Pattern)中的前端控制器设计架构的具体实现, 通过一个 J2EE Web Servlet 或者 Filter 控制器 组件 提供 一个 统一的请求杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 8/16 页 入口 、并 解析请求的 URL,再 根据请求的具体要求 去调用相应的 业务控制器 Action 组件中的目标方法 进行 相应的 业务处理。 为此,也同样需要在 Web 应用系统中的部署描述文件 中配置出其前端控制器FilterDispatcher 过滤器 组件 (而原有的 Struts 框架 是 采用 一个普通 的 Servlet 组件来承担的)。 该 过滤器 组件 初始化 Struts 2 框架 中 的 各种 配置信息 (主要来自于 配置文件中的各个定义和设置项目) , 并 解析 有关 的 Action 组件的 配置信息,根据请求去组装和调用执行相应的拦截器、 Action 组件 、 Action Result(Action 执行结果的输出 )等。 具体 的 配置 示例请见下面 【例 121】 所示的 文件中的部分配置定义标签 ,并请注意其中的黑体部分的内容。 【例 121】 在 文件中配置出 FilterDispatcher 组件的示例 ?xml version= encoding=UTF8? webapp filterfilternamestruts2/filtername filterclass/filterclass initparamparamnamedevMode/paramname paramvaluetrue/paramvalue /initparam /filter filtermapping filternamestruts2/filtername urlpattern*.action/urlpattern /filtermapping /webapp 读者 从 【例 121】所示的配置项目中 应该能够 发现 出 , Struts 2 框架在前端控制器的设计方面仍然与 原有的 Struts 框架相似,只是将 ActionServlet 组件改变为 FilterDispatcher 组件。 而 FilterDispatcher 组件 在执行时会自动地查找 文件(该文件在 缺省的 应用方式下 必须放在 /WEBINF/classes 目录中)、并对该 XML 文件中的各个配置项目进行 解析。 5)可以为 FilterDispatcher 组件 提供各种初始化参数 当配置 定义 FilterDispatcher 过滤器 组件 类时,可以 为它 指定一系列的初始化参数 —— 比如 【例 121】 中所示的“ devMode”。 当然,这些 初始化参数 也可以在后面将要介绍杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 9/16 页 的 和 文件 中进行配置定义。 Struts2 框架 业务控制器 Action 组件 业务控制器 Action 组件类不再与 J2EE Servlet 容器紧密藕合 1)如何达到 Action 组件类不再与 J2EE Servlet 容器紧密藕合的设计目标 由于 Struts 2框架对业务控制器 Action组件类的设计目标是希望不再与 J2EE Servlet容器紧密藕合,因此在前端控制器 FilterDispatcher 组件和用户的实际业务控制器 Action组件类之间设计有 Action 代理( ActionProxy)和一系列的拦截器 组件类(请参考图 中所示的 Struts2 的系统架构图示 )。 因此,在 Struts 2 框架中 用于处理用户请求的实际 Action 类 实例,并不是 开发人员实现的业务控制器 Action 组件类 ,而是 ActionProxy( Action 代理 )类 —— 从而才有可能使得 开发人员 实现的业务控制器 Action 组件类 不再与 J2EE Servlet API 相互耦合。 2) Struts 2 框架 应用 ActionProxy 代理 隔离 Action 组件对 Servlet 容器的依赖 下 图 中所示 为 Struts 框架和 Struts2 框架控制层架构的对比图示 ,其中上图为原有的 Struts 框架控制层架构 ,而下图为 Struts2 框架控制层 的 架构。 读者从图 中可以了解到 Struts 2 框架 是应用 ActionProxy 代理 类来隔离开发人员 实现的业务控制器Action 组件对 Servlet 容器的依赖 —— 这是 代理 模式的具体应用。 图 Struts 框架 和 Struts2 框架中的控制层架构的对比 但应用了 ActionProxy 代理 这样的设计。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。