《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > 基于Struts框架的J2EE WEB应用

基于Struts框架的J2EE WEB应用

2008-12-22
作者:孙刚,孟祥武

1.前言
    伴随着软件开发技术的发展,基于组件的开发方法越来越受开发人员的青睐,通过采用组件技术,复杂的系统由可重用、易扩展,具有结合性的小系统组成,开发人员有更充裕的时间用来分析、构建业务逻辑,而不是浪费在繁杂代码的编写上。
组件通常设计成框架(framework)的一个组成部分,框架的作用是将独立的组件结合在一起形成应用程序" title="应用程序">应用程序进行发布。选择一个好的框架,开发人员基本上只需要在限制的范围内编写相应业务组件,由框架管理这些组件之间的协作,从而得到结构良好、质量可靠的Web应用。
    Struts框架是Apache组织的一个开放源码" title="开放源码">开放源码项目,一个基于J2EE平台的Web应用系统" title="应用系统">应用系统框架。Struts采用MVC模型规范,结合了Servlet、JSP、JavaBean的技术特点,并使这些技术合理分工,紧密配合,达到程序结构清晰,易于开发、维护的目标。
Struts框架具有MVC模型的所有特性和优点,简化了基于MVC的应用程序的开发,并且可以通过扩展以实现特定的需求;Struts框架使用XML文件来配置默认的框架,有利于开发人员的理解流程控制。
2.Struts体系结构
    从MVC的角度观察,Struts框架由模型、视图、控制器组成。
2.1 模型
    Struts中模型分为两大部分:
.系统内部状态。分为表单" title="表单">表单Beans:保存HTTP请求传来的数据;业务逻辑beans: 处理业务逻辑;系统状态beans:保存跨越多个HTTP请求的单个客户的会话信息、系统状态。
.改变状态的操作。大型应用系统通常在方法内部封装操作(事务逻辑),这些方法可以被拥有状态信息的Bean进行调用。在中、小型应用系统中,操作可以被内嵌在Action类中,成为Struts框架中控制器的一部分,在逻辑比较简单时通常采用这样的方法。
2.2 视图
    视图通常使用JSP建立。Struts框架包含一个可扩展的自定义标记库,可以简化创建完全国际化的用户界面的过程,同时,可以与模型中的ActionForm Bean进行交互。
2.3 控制器
    控制器处理所有发送到Struts 的HTTP请求。它截取和分发这些请求到相应的动作类(Action类的子类),负责用相应的请求参数填充 From bean并传给动作类。在动作类通过访问Java bean 或调用EJB实现核心商业逻辑后,根据动作类的返回值把控制权传递给相应的JSP文件,生成视图。
2.4体系结构概述
    系统初始化时,ActionServlet对配置文件(默认为struts-config.xml)进行分析,然后根据其中定义的映射转发相应的HTTP请求。
    当用户发出HTTP请求,控制器接收到这个请求后,查找对应这个请求的动作映射,再检查是否创建过相应的Action实例,如果没有则生成一个Action实例,控制器会保存这个实例供以后使用。接着调用actionmapping的方法得到actionForm对象,把actionForm作为参数传给Action实例的execute(perform方法在struts1.1中已经不再支持)方法。这个方法结束之后会返回给控制器一个actionforward对象。控制器根据返回对象将控制权传递给相应的视图组件。
    当Action实例执行execute()方法时,可能会出现错误。Struts通过一个共享机制使用ActionError对象来产生和显示错误信息。Action实例在error对象中保存这些错误信息,接着调用自身的saveerrors方法把这个错误保存到request对象的属性中,接着Action实例调用actionmapping对象的getInput方法从映射中获取input参数(产生输入的视图的全称),生成actionforward对象返回。在产生输入的JSP中使用自定义标记,从当前作用域的资源文件中读取错误消息关键字和错误消息并在页面上显示。
3.Struts框架中的组件
3.1 常用的Struts组件

 
    组件 角色   
ActionServlet Struts框架的控制器   
ActionClass 实现应用程序的事务逻辑处理   
ActionForm 显示模块数据   
ActionMapping 协助控制器将请求映射到操作   
ActionForward 指示操作转移对象   
ActionError 存储错误   
StrutsTaglib 简化创建页面的过程 
3.2 Struts配置文件
    Struts配置文件是一个XML文件,名称和位置的默认值是\WEB-INF\sturts-config.xml。配置文件中可以对JDBC数据源、  ActionForm bean、全局转发、ActionMapping、控制器配置以及定义消息资源文件等进行配置。
3.3 ActionServlet
    ActionServlet继承自javax.servlet.http.HttpServlet类,是Struts 框架的控制器。ActionServlet主要负责将HTTP的客户请求信息组装后,根据配置文件的指定描述,转发到适当的处理器。按照Servelt标准, ActoinServlet必须在Web Application 的发布描述器(\WEB-INF\web.xml)中声明,并设置成启动时加载。
    控制器用以下方式在完成一个请求:
. 将请求的URI与适当的ActionMapping匹配
.将请求映射到相应的Action类的Java类名称,如果这是特定的Action类的第一个请求,Servlet将初始化这个实例并缓存。
.创建或寻找一个ActionForm Bean实例,然后将请求的参数移植到Bean。
.调用Action实例的execute()方法,并将ActionForm bean、ActionMapping、request、response对象作为参数传递给它。
.将execute()方法返回的响应转发到ActionForward对象指定的资源。
3.4 Action Classes
    Action类扩展自Struts的org.apache.struts.action.Action,开发人员需要覆盖其中的execute()方法。Action 类的功能就是实现应用程序的事务逻辑,同时提供认证、日志和数据验证等其它功能。Action类中最为常用的方法是处理HTTP请求的execute()方法。当ActionServlet收到客户的请求的时候,将请求转移到一个Action实例,然后调用这个Action实例的execute()方法。Struts 框架为应用系统中的每一个Action类只创建一个实例,因为所有的用户都使用这个实例,所以在设计Action类时,需要注意以下两点:
.不能使用实例变量或静态变量存储特定请求的状态信息。
.如果要访问的资源在并行时需要进行保护,那么访问就要进行同步。
3.5 ActionForm
    Actionform类扩展自Struts中的org.apache.struts.action.ActionForm类,Struts框架假设用户在应用程序中为每个表单都创建一个ActionForm Bean。 ActionForm的主要功能就是为Action提供与客户表单相对应的数据(在指定的情况下,也可以对数据进行有效性校验,在struts1.1中,虽然可以使用,但校验功能逐渐被淡化)。ActionForm Bean还负责对系统数据状态的保持,在Action根据业务逻辑需要改变系统状态后,ActionForm会自动更新状态并保持。Struts 框架在调用execute()方法前,用以下步骤处理ActionForm:
(1) 根据元素的name属性,查找form bean的配置信息。
(2) 根据元素的scope属性,如果在此作用域下,已经存在此form bean实例,那么重用该form bean。否则,就构建一个form bean的实例。
(3) 调用form bean的reset()方法。
(4) 调用对应的set方法,对状态属性赋值。
(5) 如果元素的validate属性设置为true,那么就调用form bean的validate()方法。如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行。
3.6 Struts Action Mapping
    ActionMapping协助进行框架内部的流程控制。控制器通过ActionMaping将请求映射到Action类,并且将Action类与ActionForm bean相关联。在struts 中,ActionMapping存储在特定的XML文件(struts-config.xml)中。这些配置信息在系统启动的时候被读入内存,供struts框架在运行期间使用。ActionMapping对象通过使用元素进行定义,常用元素属性说明如下:
 
    元素属性 说明   
name  与Action关联的Form bean的名称   
type Action类的全称   
path Action类的相对路径   
input 产生输入的表单名称   
scope ActionForm Bean的作用域   
validate 是否调用ActionForm bean的validate()方法 
3.7 ActionForward
    ActionForward类的逻辑名称由配置文件中的元素定义。ActionForward类描述了一个目标(通常是一个JSP),这个目标是控制器Servlet将Action类的处理结果转发的目的地。
3.8 ActionError
    Struts框架处理错误的类是:ActionError和ActionErrors。
    ActionError类定义了一组重载的构造器来创建错误信息。构造器的一种方法是使用一个字符串作为参数,实例error映射到应用程序资源文件中的一个错误信息。另一种方法使用了java.text.MessageFormat类,可以用来在消息中替换字符串。
    ActionErrors对象保存着ActionError类的集合以及它们的特定属性值,开发人员可以使用自己定义的属性值,或者使用ActionErrors.GLOBAL.ERROR。
3.9 Struts TagLib
Struts提供了一组可扩展的自定义标记库(TagLib),可以简化创建用户界面的过程。目前自定义标记库由四类标记组成:
. Bean标记:用来在JSP页面中定义、访问Bean及其属性
. HTML标记:用来创建动态HTML页面。
. Logic标记:Logic标记能够有条件地产生输出文本、在对象集合中循环地输出文本,进行一定程度上的应用流程管理。
. 模板标记:Struts使用模板标记库来实现动态模板,从而使WEB页面布局的修改更加容易。
4.Struts框架开发工具" title="开发工具">开发工具及容器
4.1 开发工具

    自从Struts 发布以来,出现了许多可视化工具用于协助Struts开发。笔者建议采用以下几中GUI 工具之一来协助开发。
. Borland 公司的Jbuilder 8。作为Java开发工具市场中处于领先地位的开发工具,其中包括了对Jakarta Struts1.0的支持。通过使用Easy Struts插件与Jbuilder8的结合,Jbuilder8提供了对Struts1.1的支持。使用Jbuilder8,可以在一个环境中完成Web开发的所有步骤,使Struts开发变成一件非常简易的事情。
. WebSphere Studio Application Developer是 IBM 最新为 J2EE 开发人员提供的集成开发环境。WebSphere Studio Workbench 构建于开放源码 Eclipse 平台之上。Eclipse.org 是一个开发工具供应商联盟,这些供应商正为来自不同供应商的工具的无缝集成提供一种公共平台而工作。
. Camino是第一个真正针对Struts应用程序的可视化工具。Camino3.0 对Struts1.1有强大的支持。它所包含的许多功能可以简化Struts web应用程序的开发。
4.2 容器
    Struts需要通过Servlet容器实现Web应用。Struts要求容器符合Servlet规范2.2(或更高版本)和JavaServer Pages 规范1.1(或更高版本)。在众多容器中,笔者推荐同是Apache项目的Tomcat4.X容器,这个容器不需进行额外配置就可运行struts。在商业应用中,笔者推荐BEA公司的WebLogic。WeblogicServer不仅提供对Struts支持,而且是一种广泛使用的Java应用服务器,用于组建多层次、安全、大型和分布式的Web应用。
5.结束语
    目前,我国各种规模的企业拥有相当多的信息技术设备,也培养和储备了一些自己的信息化人才队伍。对于大型企业,建设如MIS、ERP等重大信息工程可以通过联合大公司,采用合作开发的方式实现。对于中小型企业,如何利用有限的资金,利用现有人员、跟随先进技术自主开发适合本企业规模的信息系统,是目前各企业需要认真对待的问题。
    Struts开发仍然处于发展阶段,发行版本 1.0 和1.1之间,有了很大改进。随着 Struts 小组的不断努力,具备开源项目特有优点的Struts 框架会使开发人员对 JSP 和 servlet 的特性、以及如何将它们组合起来用于 Web 应用有更好的了解。笔者在本单位的信息化建设中,经过一段时间的学习,采用Struts 框架,以Web方式实现了业务部门提出的需求,希望Struts也能成为中小企业实现信息化的一个重要技术手段。
参考文献
kevin Duffey,Vikram Goyal.Professional JSP Site Design.Wrox Press.2002.07
Ted Husted,Cedric Dumoulin.Struts in Action. Manning Publications Co.2002.11
Chuck Cavaness. Programming Jakarta Struts. O'Reilly. 2002.11
Struts 文档、安装说明,Struts主页。
Malcolm Davis. Struts,MVC 的一种开放源码实现, IBM developerWorks
龚永生. 当前流行的J2EE WEB应用架构分析. IBM developerWorks

 

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。