Struts2:现代Web框架.doc_第1页
Struts2:现代Web框架.doc_第2页
Struts2:现代Web框架.doc_第3页
Struts2:现代Web框架.doc_第4页
Struts2:现代Web框架.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Struts2:现代Web框架摘要:作为一个优秀的MVC 框架,Struts1得到了广泛应用。然而,随着应用领域的扩大,也逐渐暴露出了一些不足。Struts2 框架是新推出的一个MVC 框架, 基于WebWork 核心, 与Struts1相比, 具有较大变化。介绍了WebWork 框架, 详细分析了Struts2 框架的体系结构,通过与Struts 1框架对比,重点探讨了Struts2 控制器的实现原理,总结出Struts2 的优势。关键字:Web应用程序;Struts2Struts2:Modern Web FrameworkAbstract: Struts1 has being applied widely as an excellent framework based on MVC pattern. However, the shortage of Struts has being discovered gradually with the expansion of applications. Struts2 is a new MVC framework based on the core of WebWork framework. By contrast with Struts1, Struts2 has changed greatly. Describes the WebWork framework, and expatiates the architecture of Struts2. By contrasting Struts2 and Struts1, emphatically discusses the principle of the controller, and summarizes the advantage of using Struts2.Key words: Web Application program;Struts20引言现代Web应用程序身处复杂的技术背景下。我们过去学习的应用程序可能只是关于单一的主题,例如Java语言,或者某个特定的API类库。Struts2是Java EE平台上一个功能齐全的Web应用程序框架。为了应对Java EE环境中各种复杂的技术,Struts2做了很多明显的改进来推动通过约定代理配置,并且让很多日常任务自动化。1 Web应用程序框架1.1什么是框架框架是一种结构化(structural)的软件。之所以说结构化是因为,相对于任何具体的功能需求,结构化或许是框架更重要的目标。框架尽量将特定领域的日常任务和具体问题的处理流程抽象画,然后提供一个平台,基于这个平台可以更快地构建Web应用程序。框架主要在两个方面帮助我们快速开发:第一:尽量自动化Web应用程序开发过程中的常见问题;第二,尽量提供优秀的架构解决方案来优化Web应用程序中常见的工作流。因此Web应用程序框架是一种结构化的软件,它提供了该领域中常见任务的自动化实现,同时作为一个内置的架构解决方案可以被在其上实现的应用程序轻松地继承。1.2为什么使用框架框架不是必须使用的。对于新手来说,可以完全忘记框架。但是除非应用程序非常简单,否则不必说自己解决所有的架构问题,只看实现自己版本的所有常见领域任务的工作就会很快无法前行了。另外,如果有足够的时间可以花费在项目上,我们可以把它们花在更高级别的问题上,而不是常见的工作流和基础任务上。或许是否使用框架不是问题,但是这些框架提供了需要的解决方案。2 Struts2框架Apache Struts2是一个全新的、非常先进的Web应用程序框架。它不只是原来Struts1框架的一个新版本。它基于OpenSymphony WebWork框架,是一个全新的框架。2.1 Struts2简史Struts2是实现MVC(Model-View-Controller)设计模式的第二代Web应用程序框架。它建立在最佳实践以及被证明有效且被社区广泛接受的设计模式之上。Struts1的主要目的是把MVC模式从桌面应用程序引入到Web应用程序。这个合成的模式偶尔也被称为Model 2模式。这是设计良好的Web应用程序进化过程中非常关键的一步,因为它提供能轻松达到MVC分离的基础设施。这可以让开发人员根据这些框架方面的细微区别使用几个资源以及接入到现成的最佳实践解决方案。在过去的10年中,使用 Struts 1建立来了很多设计优良的Web应用程序3。在某个时候,Struts 社区开始意识到Struts 1框架的局限性。Struts 2充分利用了学到的经验和教训,提供了一个更加整洁的 MVC实现。同时,它还引入几个新的框架特性,从而使这个框架更加清晰,更加灵活。这些新特性包括:用来从动作逻辑中分层出横切关注点的拦截器,为了减少或者消除XML配置基于注解(annotation)的配置方式,一个贯穿整个框架的强大的表达式语言OGNL(Object-Graph-Navigation Language,对象图导航语言)支持可变更和可重用UI组件的基于微型MVC模式(mini-MVC-based)的标签API2。2.2 Struts2概览:MVC模式Struts2的高层设计遵循公认的MVC设计模式。MVC模式提供的关注点分离非常适用于Web应用程序关注点分离让我们能够通过将他们分为高级别组建的方式来管理复杂的大型软件系统。MVC设计模式有3个关注点:模型、试图和控制器。它们分别通过动作(action)、结果(result)和过滤分配器(FilterDispatcher)实现。下图展示了Struts2的MVC实现如何处理Web应用程序的工作流1。请求选择结果调用动作Web浏览器客户端控制器(FilterDispatcher)模型(动作)视图(结果)呈现结果图1 Strust2 MVC通过三个细心框架组件实现:动作、结果和控制器2.2.1控制器Struts中使用的MVC变体经常被称为是前端控制器(front controller)MVC。这意味着控制器在最前端,是请求处理过程中第一个被接触的组件。控制器的工作是将请求映射到动作。在Web应用程序中,传入的HTTP请求可以被视为用户向Web应用程序发送的命令。Web应用程序的一个基本任务是将这些请求路由到Web应用程序中需要执行的一系列动作。控制器的工作就像是交通警察或者空中交通管制员。从某些方面看,这个工作具有管理性质,但又不是核心业务逻辑的一部分。控制器的角色是由FilterDispatcher来扮演的。这个重要的对象是一个Servlet过滤器,它检查每一个传入请求,决定哪个Struts2动作处理这个请求。框架可以帮助完成所有过滤器的任务。我们只需要告诉框架哪个请求URL需要映射到哪个动作即可。然后通过基于XML的配置文件或者Java注解来完成这个任务。2.2.2模型模型由Struts 2动作组实现。什么是模型?从某些方面来说,模型像是一个包含应用程序内容的黑盒子,其他的一切仅仅是用户界面或者它们之间的连接,模型使事物本身。用更专业的词汇解释,模型是应用程序的内部状态。这个状态由数据模型和业务逻辑共同组成。从宏观上看,数据和业务逻辑融合在一起构成了应用程序的整体状态。例如,如果你要登录一个程序,业务逻辑和数据库中存放的数据都会参与身份验证过程。最可能的情况是,业务逻辑提供了身份验证的方法,这个方法接受用户名、密码,并且根据来源于数据库的持久化数据验证它们。在这种情况下,数据和业务逻辑联合形成两个状态中的一个通过身份验证和未通过身份验证。仅有数据,或者仅有业务逻辑都不能生成这些状态。Struts2的动作组件有两个作用。首先,一个动作将业务逻辑调用封装到一个单独的工作单元中。其次,动作是一个数据传输的场所。如图1所示,控制器在收到请求之后,必须通过映射来决定哪个动作处理这个请求。一旦找到了适当的动作,控制器会调用这个动作并将请求处理的控制权转交给它。由框架负责管理的调用过程既准备必要的数据又执行动作的业务逻辑。动作完成它的工作之后,就该向提交请求的用户返回视图了。为此,动作会将结果转发到Struts2视图组件4。2.2.3视图视图是MVC模式的呈现组件。从图1可以发现,结果向Web浏览器返回了页面。这个页面时用户界面,向用户呈现应用程序的状态。它们通常是JSP页面、Velocity模板或者用其他表示层技术呈现的页面。虽然视图有多种选择,但是视图的作用很清楚将应用程序的状态装换为一种用户可以与之交互的可视化的表示。结果组件提供了整洁的封装,将处理的控制转交给其他要向客户写响应的对象。3 Struts2的工作原理框架不仅包含MVC组件,Struts2提供了一个整洁的MVC的实现。这些整洁的线条依赖于其他几个参与每一个请求处理关键架构组件的帮助。这些架构组件主要包括拦截器、OGNL和ValueStack。下图显示了请求处理的工作流。ActionContext(ThreadLocal)ValueStack请求会话结果调用动作动作结果拦截器调用结果OGNLOGNL图2 Struts请求处理使用在动作和结果之前或之后调用的拦截器首先我们需要考虑的是,图2所示工作流程仍然遵循之前的简单MVC框架试图。在图2中,FilterDispatcher已经完成了自身的控制工作,并选择了相应的动作来处理请求。图2还展示了动作被控制器调用之后实际发生的状况5。一些额外的部分被加入到MVC基础之中。3.1拦截器图2中,在动作前有一组拦截器,对动作的调用必须经过这组拦截器。拦截器是一种可以在请求处理之前或之后执行的Struts2组件。它提供了一种在其中定义不同工作流和横切任务的架构组件,以便能够简单地重用这些组件,并且能够与其他架构关注点分离。这是Struts2框架的一个核心部分。拦截器在动作执行之前、之后都被调用,并且需要指出的是他们在结果执行完毕后才被触发。拦截器没有必要再两次触发的时候都做工作,有些拦截器仅在动作执行之前工作,而另外的一些仅在动作执行之后才工作。最重要的是,拦截器允许常见的、横切的任务在间接、可重用的组件中定义,从而能够和动作的代码分离。3.2ValueStack和OGNL虽然拦截器不会消耗太多的日常开发精力,但必须时刻牢记ValueStack和OGNL。简单的说,ValueStack是保管与请求处理相关的所有数据的一个存储区域。可以把它当成一个变迁,在解决请求处理的问题时,框架会在这里工作。Struts2将所有相关的数据集中保存在一个方便的地方,而不是将数据传来传去,这个地方就是ValueStack。Struts2使用 ValueStack作为请求处理过程中所需的应用程序数据的存储区域。数据被放入ValueStack为请求处理做准备。在动作执行过程中,数据在这里被操作。当结果呈现到响应页面时,数据从这里被读取。OGNL是一种访问在中央存储库(repository)中数据的工具。更准确的说,它是一个允许引用或操作ValueStack中的数据的表达式语言。ValueStack和OGNL微妙和强大的地方时它们不属于框架中任何独立的组件。回顾图2可发现,拦截器和结果都可以使用OGNL表达式语言来指向ValueStack中的值。ValueStack中的数据跟着处理请求经过所有阶段,它贯穿框架的整个过程。之所以能够做到这点是因为ValueStack存储在一个线程本地对象(ThreadLocal)中,它的名字叫做ActionContext。ActionContext包含所有的数据,这些数据构成了动作执行的环境。它包含ValueStack,也包含框架会使用的内部数据,例如请求对象、会话对象以及Servlet API中得来的应用程序映射。通常情况下,直接获得ActionContext中的内容是一个很不好的方式。框架提供了很多优雅的方法在不接触ActionContext或者ValueStack的情况下与这些数据交互。在框架的多个地方都是用OGNL来引用、操作ValueStack中的数据。例如使要用的OGNL将HTML表单字段与ValueStack中的数据对象绑定起来以传输数据,并且使用OGNL将数据引入到JSP页面或者其他类型的结果的程序过程中。4 小结Struts2核心控制器使用拦截器机制,具有更高的灵活性和可复用性;Struts2业务逻辑控制器Action可自定义,可不直接与任何的Servlet耦合,增加了代码的可复用性且更易于测试;Struts2视图层提供了丰富的标签库,而且还支持除JSP以外的其它表现层技术。此外,Struts2还提供了非常灵活的扩展方式:插件。理论上,Struts2可通过插件与任何框架整合,这极大地提高了Str

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论