Struts 概述 来源: ITJob就业培训网 发表时间: 2006-09-04 Struts 概述 一、预备知识 认识 Struts 首先要了解下面的相关知识 1 、 Framework 伴随着软件开发的发展,在多层的软件开发项目中,可重用、易扩展的,而且是经过良好测试的软件组件,越来越为人们所青睐。 Framework 的体系提供了一套明确机制,从而让开发人员很容易的扩展和控制整个 framework 开发上的结构。 简而言之 Framework 就是易于扩展和控制、能提高我们开发效率的程序框架。 2 、 MVC 模型 - 视图 - 控制器( Model-View-Controller )是 80 年代出现的一种软件设计模式,现在已经被广泛的使用。它强制的把应用程序的输入、处理、输出分开,三个核心模块 M-V-C 分别负担不同的任务。 模型(Model)模型是应用程序的主体部分。模型表示业务数据和业务逻辑,一个模型可以为多个视图提供数据,提高了应用的可重用性。 视图(View)视图是应用程序中用户界面相关的部分,视图向用户显示数据,并能接收用户的输入数据,但它并不进行任何实际的业务处理。 控制器(controller) 控制器工作就是根据用户请求,调用相应的模型组件处理请求,然后调用相应的视图显示模型返回的数据。 图 1 MVC 的结构及工作原理 MVC 的出现不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性。 二、背景介绍 尽管 MVC 设计模式很早就出现了,但在 WEB 应用的开发中引入 MVC 一直难以实现。早期的 Java Web 开发应用中, JSP 文件负责业务逻辑、控制网页流程并创建 HTML ,这给 WEB 开发带来了强耦合、调试困难、程序处理逻辑复杂等等问题 ,如图 2 。为了解决这些问题 SUN 在 JSP 出现早期制定了两种规范,称为 Model1 (图 2 )和 Model2 (图 3 )。虽然 Model1 在一定程度上实现了 MVC ,但是它的应用并不尽如人意,直到 Model2 问世才得以改观。 图 2 图 3 JSP Model1 图 4 JSP Model2 ??????? model2 容易使系统出现多个 Controller ,并且对页面导航的处理比较复杂,有些人觉得 model2 仍不够好,于是 Craig R. McClanahan 2000 年 5 月提交了一个 WEB framework 给 Java Community 。这就是后来的 Struts 。 2001 年 7 月, Struts1.0 ,正式发布。该项目也成为了 Apache Jakarta 的子项目之一。 三、什么是 Struts 综上所述很容易理解, Struts 就是在 JSP Model2 的基础实现了 MVC 设计模式的 WEB Framework 。 基于 Struts 构架的 WEB 应用程序基本上符合 JSP Model2 的设计标准,可以说是 MVC 设计模式的一种变化类型。整个 Struts 大约有 15 包,近 200 个类所组成。 Struts 这个名字来源于在建筑和旧式飞机中使用的支持金属架。它的目的是为了帮助你减少在运用 MVC 设计模型来开发 Web 应用的时间。你仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。如果想混合使用 Servlets 和 JSP 的优点来建立可扩展的应用, Struts 是一个不错的选择。 四、 Struts 的体系结构 Struts 由一组相互协作的类、 Serlvet 以及丰富的标记库 (jsp tag lib) 和独立于该框架工作的实用程序类 (Validator) 组成。 Struts 有其自己的控制器( Controller ),同时整合了其他的一些技术去实现模型层( Model )和视图层( View )。在模型层, Struts 可以很容易的与数据访问技术相结合,包括 EJB,JDBC 和 Object Relation Bridge 。在视图层, Struts 能够与 JSP, Velocity Templates,XSL 等等这些表示层组件想结合。 Struts framework 是 MVC 模式的体现,下面我们就从分别从模型、视图、控制来看看 struts 的体系结构( Architecture )。下图显示了 struts framework 的体系结构响应客户请求时候,各个部分工作的原理。 图 5 Struts 工作原理 从视图角度(View) 主要由JSP建立,struts自身包含了一组可扩展的自定义标签库(TagLib),可以简化创建用户界面的过程。目前包括:Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags 这几个Taglib。有关它们的详细资料请参考struts用户手册 从模型角度(Model) 模型主要是表示一个系统的状态(有时候,改变系统状态的业务逻辑操作也也划分到模型中)。在Struts中,系统的状态主要有ActiomForm Bean体现,一般情况下,这些状态是非持久性的。如果需要将这些状态转化为持久性数据存储,Struts本身也提供了Utitle包,可以方便的与数据库操作 从控制器角度(Controller) 在Struts framework中, Controller主要是ActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成(也许这几个组件,应该划分到模型中的业务逻辑一块)。其中,Action扮演了真正的业务逻辑的实现者,而ActionMapping和ActionForward则指定了不同业务逻辑或流程的运行方向。 五、 Struts 优缺点 优点 Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。关于页面导航使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。 缺点 Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱你网页编写的习惯,但是当你习惯了它时,你会觉得它真的很棒;Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度;它对类和一些属性、参数的命名显得有些随意,给使用带来一些不便; 六、为什么要使用 Struts 框架 其实我们自己也可以实现类似于 Struts 的框架,那为什么要使用 Struts 呢? Struts 是一个开放原代码的应用框架,在最近几年得到了飞速的发展,在 JSP Web 应用开发中应用得非常广泛,有的文献上说它已经成为 JSP Web 应用框架的事实上的标准。下面列举的这些理由是显而易见的:首先,它是建立在 MVC 这种公认的好的模式上的, Struts 在 M 、 V 和 C 上都有涉及,但它主要是提供一个好的控制器和一套定制的标签库上,也就是说它的着力点在 C 和 V 上,因此,它天生就有 MVC 所带来的一系列优点,如:结构层次分明,高可重用性,增加了程序的健壮性和可伸缩性,便于开发与设计分工,提供集中统一的权限控制、校验、国际化、日志等等;其次,它是个开源项目得到了包括它的发明者 Craig R.McClanahan 在内的一些程序大师和高手持续而细心的呵护,并且经受了实战的检验,使其功能越来越强大,体系也日臻完善;最后,是它对其他技术和框架显示出很好的融合性。如,现在,它已经与 tiles 融为一体,可以展望,它很快就会与 JSF 等融会在一起。