Struts 的安装、配置与运行 | |
Struts最早是作为Apache Jakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServer Pages 、Servlet、标签库以及面向对象的技术水准。Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。这个框架之所以叫"Struts",是为了提醒我们记住那些支撑我们房屋,建筑,桥梁,甚至我们踩高跷时候的基础支撑。这也是一个解释Struts在开发Web应用程序中所扮演的角色的精彩描述。当建立一个物理建筑时,建筑工程师使用支柱为建筑的每一层提供支持。同样,软件工程师使用Struts为业务应用的每一层提供支持。它的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。我们仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。 早期Smalltalk 程序语言便采用了MVC(Model-View -Controller) 模式( Patterns ) 以增加程序代码弹性,MVC模式将程序代码整理切割为三部份,Model 部分是业务与应用领域( Business domain) 相关逻辑、管理状态之对象,Controller 部分接收来自View 所输入的资料并与Model 部分互动,是业务流程控制( Flow Control) 之处,View 部分则负责展现资料、接收使用者输入资料。在Java 应用中,JFC/Swing、AWT、JSP 皆是可用作View 之技术规格,而JavaBean 与Enterprise JavaBean 规格则可用于Model 程序代码,一旦应用程序以MVC 模式加以适当之分割,Model 部分程序代码可在不同使用者接口外观之应用程序中重复使用。 随着JSP 与Servlet 技术大量应用于以Web 为基础之应用程序,Java 开发人员群体认为应以较佳之模式以提升Web 应用程序之可维护性与重复使用性。早期JSP 规格书中曾列举两种可行之JSP 应用架构,分别为Model1 与Model 2。 在Model 1 架构中,JSP 直接处理Web 浏览器送来之请求( Request ),并辅以JavaBean 处理应用相关逻辑。Model 1 架构单纯编写比较容易,但在Model 1 中JSP 可能同时肩负View 与Controller 角色,两类程序代码有可能混杂而不易维护。而Model 2 中将Servlet 纳入架构中扮演前端Controller 角色,将Web 浏览器送出之请求集中送至Servlet ,Servlet 可集中管理使用者登入、权限控制、多国语言转换等前置处理,再视需求转向给对应之JSP 处理。Model 2 中采用了较佳之MVC 模式,但增加了编写复杂度。 Struts是Apache软件基金下Jakarta项目的一部分。除Struts之外,还有其他成功的开源产品,包括Tomcat, Ant 和Velocity。2000 年Craig R. McClanahan 先生贡献了他编写的JSP Model 2 架构之Application Framework 原始程序代码给Apache 基金会,成为Apache Jakarta 计划Struts Framework 前身。 开始的代码基础从2000年5月开始开发,直到2001年6月,1.0版本发布。有30 多个开发者参与进来,并有数千人参与到讨论组中。Struts 代码基础由一个志愿的Commnitter团队来管理。到2002年,Struts 小组共有9个志愿Commnitter。 Struts框架的主要架构设计和开发者是Craig R.McClanahan。Craig 也是Tomcat 4的主要架构师,以及Java Web Services Developer Pack的主要架构师和实现者。他现在是Sun的JavaServer Faces (JSR-127) 以及J2EE平台的Web层架构的规范领导。Craig R. McClanahan 先生是JCP ExpertGroup 成员之一,曾参与JSP 规格制定与Tomcat 4 之编写,因此Struts Framework 广受Java 开发人员群体所重视。Borland 自2002 年底开始于开发工具JBuilder 中支持Struts Framework。 二、Struts安装 1、安装Struts需要的软件 Java Development Kit-- 我们需要download和install 1.2(或之后)版本的JDK。 下载地址: http://java.sun.com/j2se Servlet Container -- 通常的选择是下载Tomcat(至少是3.1版,推荐使用4.0以上的版本)。 下载地址: http://jakarta.apache.org/tomcat Ant Build System -- 如果我们通过Struts源码发布包安装,我们必须下载1.1或之后版本的ant build system。在我们通过Struts来开发我们自己的Web应用程序是,推荐使用ant来build我们的应用。 下载地址: http://jakarta.apache.org/ant Servlet API Classes -- 为了编译Structs自己,或应用程序使用Struts,我们需要一个包含Servlet和JSP API对象的servlet.jar包。大多数Servlet container(例如Tomcat)已经自带了这个文件。否则,我们必需下载:http://jakarta.apache.org/builds/jakarta-servletapi XML Parser -- Structs需要一个与Java API for XML Parsing(JAXP)规格兼容的XML处理器,我们可以使用Xerces。 下载地址: http://xml.apache.org/xerces-j Xalan XSLT Processor -- 如果我们通过Structs源码发布版来构造我们的Structs系统,我们必须下载和安装1_2_D01或之后版本的Xalan XSLT处理器(Xerces中已自带Xalan)。这个处理器用于将基于XML的Structs文档转换为Html文档。 2、通过源码构造Structs 1)下载Structs的源码发布包。 2)设置ANT_HOME环境变量,指向我们的Ant目录。 3)设置JAVA_HOME环境变量,指向我们的JDK目录。 4)设置SERVLETAPI_HOME环境变量,指向我们的Servlet API目录(如果我们的CLASSPATH已经包含了servlet.jar,就不需要指定该目录) 5)将Structs的源码发布包进行解包。 6)进入Structs目录,运行以下命令: ./build.sh dist 该命令将创建Struts的二进制发布包,目录在../dist/structs(相对于我们的编译目录)。 3、通过Struts的二进制发布包安装Structs 1)下载Struts的二进制发布版。 2)将Struts的二进制发布版进行解包。(如果我们是通过Struts源码构造Struts,build的结果就已经是已解包的Struts)。解包后的Struts包含以下内容: lib/struts.jar -- 这个文件包含了Struts的所有Java对象。我们需要把它拷贝到我们的Web应用的WEB-INF/lib目录。 lib/structs.tld --这是一个"tag library descriptor"文件,它描述了Struts库的自由tag。需要将它拷贝到我们的Web应用的WEB-INF目录。 webapps/struts-documentation.war -- 这是一个"web application archive"文件,包含了所有的Struts文档。我们可以将它安装到支持Servlet API 2.2或之后版本的servlet container(推荐使用tomcat)中。 webapps/struts-example.war -- 这是一个web应用实例,它广泛地演示了Struts的许多功能。我们可以将它安装到兼容Servlet2.2或之后版本以及JSP1.1或之后版本规范的servlet容器中(推荐使用tomcat)。 4、Struts的基本组件包 安装好的struts大约有15包,近200个类所组成,而且数量还在不断的扩展。在此我们不能一一介绍,只能列举几个主要的简要的介绍一下。下表说明了目前struts api中基本的几个组件包,包括 org.apache.struts.action 三、Struts 配置与组件介绍 有关struts组件配置struts-config.xml文件说明在前面的文章中已经介绍过,这里就不再说了,下面主要介绍框架中组件与配置。 下表列出了Struts的核心类,即对应的经典的MVC组件职责。 表格2 核心Struts 类和MVC 的对应 类 描述 除了这些核心类, Struts 使用一些配置文件和视图助手(view helpers)来沟通控制器和模型。下表列出了Struts 配置文件和描述了他们在架构中的角色。 表格3 Strtuts 配置文件 文件 目的 为将Struts配置数据暴露给视图,框架以JSP标签的形式提供了大量的助手类,如表4 Strtus 视图助手。
控制器组件的配置 框架中的控制器组件是有org.apache.struts.action.ActionServlet类实现的,这个类是javax.servlet.http.HttpServlet类的扩展。 ActionServlet配置: 我们需要在web.xml中声明ActionServlet,并且将它配置成启动时进行加载。以下为可以配置的初始化参数: 参数 默认值 描述 大多数情况下,标准的servlet就能够满足用户需要。 第一次收到特定请求的URI时,ActionServlet将适当的Action类进行实例化,然后ActionServlet在Action类实例中以servlet为变量名存储一个引用。当被实例化后,Action类会被暂存以备再用。 错误处理 struts提供了两个类来处理错误:ActionErrors和ActionError,它们都扩展org.apache.struts.action。ActionErrors保存着ActionError对象的集合,其中每一个代表了独立的错误信息。每个ActionError都包含了关键字,能够映射到资源文件中存储的错误信息,而这个资源文件是在ActionServlet初始化参数中指定的。 四、Struts的运行 可通过以下的步骤在我们自己的应用程序中使用Struts: 1、将Struts目录的lib/struts.jar拷贝到web应用的WEB-INF/lib目录。 2、将Struts目录的lib/struts*.tld拷贝到web应用的WEB-INF目录。 3、修改Web应用目录的WEB-INF/web.xml文件,增加一个<servlet>元素来定义controller servlet,增加一个<servlet-mapping>元素来建立URI请求与servlet的对应关系。可以参照Struts例子中的WEB-INF/web.xml文件来了解详细的语法要求。 4、修改Web应用目录的WEB-INF/web.xml文件,使之包含以下的tag库定义: <taglib> 5、创建一个WEB-INF/action.xml文件来定义我们的web应用的action映射关系。可以参照Struts例子中的action.xml文件来了解详细的语法要求。 6、在使用Struts tag库的JSP网页中加入以下tag库定义: <@ taglib uri="/WEB-INF/struts.tld" prefix="struts" %> 7、最后,在编译我们的web应用的java程序时,不要忘了在CLASSPATH中包含struts.jar文件。 五、Struts优缺点 优点: Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。 关于页面导航,我们认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。 缺点: Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱我们网页编写的习惯,但是,当我们习惯了它时,我们会觉得它真的很棒。Struts将MVC的Controller一分为三,在竦媒峁垢忧逦耐保苍黾恿讼低车母丛佣取:廖抟晌剩斫?Struts 必须接受一定的培训。随着变化的不断加入,这有时会令人很沮丧。 Struts从产生到现在还不过3-4年时间,就已逐步越来越多运用于商业软件。虽然它现在还有不少缺点,但它是一种非常优秀的J2EE MVC实现方式,如果我们的系统准备采用J2EE MVC架构,那么,不妨考虑一下Struts。 Struts 是一种基于 Web 的 MVC 解决方案,所以必须用 HTML、JSP 文件和 servlet 来实现它,Struts 需要支持 JSP 1.1 和 Servlet 2.2 规范的 servlet 容器。学习、理解和掌握Struts是我们每个基于J2EE软件开发人员一门必修的课程,也是我们对企业J2EE技术应用的进一步深化。 |