Struts框架技术简析

2012-09-25 01:29王刚
长春师范大学学报 2012年9期
关键词:表单开发人员实例

王刚

(陕西财经职业技术学院信息工程系,陕西咸阳 712000)

Struts框架技术简析

王刚

(陕西财经职业技术学院信息工程系,陕西咸阳 712000)

本文简要介绍了Struts框架技术及其相关内容,并着重对Struts框架的组件和Struts框架的高级特性进行了深入的探讨。

Struts框架;Struts框架的组件;Struts框架的高级特性

1 Struts概述

作为Sun JavaEE平台下MVC模式的Struts框架,来源于Craig McClanahan最初的构思,它包含两个主要的技术——Servlet和JSP。Struts是Apache组织提供的一项开放源码工程,使用起来简单、方便,实现的速度快,对于应用系统的开发可以很好地满足。Struts主要指的是使用在建筑和旧式飞机中的起支撑作用的金属架。之所以把这个框架命名为“Struts”,是提醒我们要记住那些在房屋、建筑物、桥梁以及踩高跷时起着一定支撑作用的基础支架,这也是对Struts最为典型的描述。建造一个建筑物时,建筑工程师会考虑给建筑物的每一层建造相应的支柱,以起到对整个建筑物的支撑作用。同样,软件工程师使用Struts的时候,会给业务应用的每个层次提供相应的支持,就是为了帮助开发人员在采用MVC设计模型开发Web应用程序时,减少相应系统的开发时间。如果想混合使用Servlets和JSP的优点来构建可扩展的应用,Struts将会是非常好的选择。

Struts是一个通用的用来实现MVC模式的框架,其中包括模型、视图、控制器和一个XML文件。在这个框架中,系统的状态和业务逻辑是模型的主要表现形式,其中ActiomFormBean表现的是系统的有关状态,而JavaBean或EJB组件主要用来实现业务逻辑;而通过JSP就可以建立一个视图,同时由于视图本来就含有那些自定义的可用于扩充的标签 (Tag1ib),因而就可以大大地简化相应用户界面的实现过程。通常是通过ActionServlet类和Action类来实现Struts框架的控制器,作为Struts框架中的核心组件ActionServlet类,它的主要作用就是把用户相关的HTTP请求接收起来,并与配置信息进行核对,将请求转发到相应的Action对象。然而调用模型的有关方法是由Action类来完成的,它可以对模型的状态进行更新,同时还应辅助进行对应用程序的流程控制;Struts有两个相应的配置文件web.xml和struts-config.xml,其中web.xml除了要对ActionServlet进行相应的配置以外,还要对Web表示层中使用的有关struts标签库进行相应的声明。而Strutsconfig.xml则描述的是与Struts相关的文件,主要是用来存储描述用户请求的路径以及相应的Action映射关系的配置信息的。

JSP技术对动态页面处理逻辑进行封装,通常通过Java编程语言类的XML标签和scriptlets来进行。与此同时,借助于tags和scriptlets相关的网页还可以把保存在服务端的资源的应用逻辑调用出来。将网页逻辑与网页设计和显示分开来,通过JSP技术就可实现。因此,JSP技术可以更好地支持可复用的基于构件的系统设计,因而采用JSP技术可以轻易地实现Web应用程序。如果要访问JSP页面的请求,那么首先必须把其中相关的程序通过Web服务器执行,然后客户端会接收到程序执行的结果以及JSP文件中有关的HTML代码。JSP通常把一个有关的HTML文本回传给客户端,那么客户通过浏览器很容易对相关内容进行直接浏览。

HTML源程序代码以及嵌入HTML之中的Java源程序代码组合在一起就构成了JSP的页面。通常,借助于页面客户端发出请求,服务器接收到请求以后,通过对这些Java源程序代码加工,就可以生成相应的HTML页面,然后将其传递给客户端浏览器。JavaServlet是JSP必不可少的组成部分,是JSP的技术基础,要成功实现大型的Web应用系统,只有把JavaServlet和JSP很好地结合起来才能实现。与Java技术相同,JSP操作简单,实现容易,是一种完全面向对象的方法;且其具有平台无关性,开发出的系统稳定、可靠,主要面向互联网等特征。可以用一个简单的公式来表示JSP,即JSP=HTML+Java。

Struts最大的一个优点就是它是一种开源软件,同时,标签库和页面导航也在某些方面反映出了Struts的优势。标签库是Struts的标记库,灵活运用可以极大地提高开发效率。由于页面导航的存在,因而开发出来的系统结构更加合理,层次也比以前更清晰,所以它是Struts今后主要发展的对象。只要配置好一个文件,通过该文件就可以轻易地把系统相应的各个部分联系起来,所以非常有利于系统今后的维护工作。特别是要继续去实现某个项目,而又换了一批不同的技术人员时,它的这种优点表现得更加突出。虽然Struts具备这些优势,但初次接触该技术的开发人员仍需要不断地学习,有时还需要打乱技术人员编写网页的固有方式。

2 Struts框架的组件分析

2.1 ActionServlet

在Struts中,ActionServlet主要是接收来自于用户的HTTP请求,同时依据系统配置信息的要求,把相应的请求传递给有关的的Action对象。在实施的过程中,首先要判断有没有Action对象,如果没有,应该设计出来相应的对象;然后在请求被接收的同时,会有一个相应的Action实例收到通过控制器传来的Action对象,当然,在进行传递的时候也会判断有没有相应的实例,如果没有,同样应该先把相应实例的execute()方法设计出来。

在Struts的框架中,ActionServlet主要承担的是中心控制器的角色,会自动地去继承javax.servlet.http包中的HttpServlet类。为了对来自终端的请求及时响应,通常它会把中心的一个位置给留下来。ActionServlet控制器所起的主要作用就是把HTTP客户端的请求信息组合起来,通过相应的已经配置好的文件进行描述,将其传递到相应的处理器中。通常,中心控制器会给所有表示层的请求提供一个集中的访问点。一旦开发人员在开发过程中遇到问题,只要通过这个控制器的一些有关概念,这些问题的困难程度就被有效地降低了,如管理视图、会话及表单数据。相应地,它也具备某些通用机制,如错误及异常处理、导航、国际化、数据验证、数据转换。

当用户的请求被传递到服务器端的时候,首先ActionServlet控制器会获得相应的信息。当控制器接收到相关的请求后,会把这些请求信息传递到相应的辅助类中去,此时这些辅助的类就会去处理那些相关的业务操作,而这些相关的操作必须对应用户的请求。在上面提到的Struts那个辅助类就是 org.apache.struts. action.Action。一般情况下,开发人员应该主动去继承Aciton类,那样有助于实现开发人员自己的Action实例。

2.2 Action

一个Action类的角色,就是作为行动和业务逻辑处理适配器之间的客户端的请求,其主要做的就是需要把它从业务逻辑中分离开来。为了实现这种分离,有映射点存在于多个客户请求和Action类之间。通常情况下,Action类还有很多的辅助功能,如:认证(授权)、日志(记录)、数据验证(验证)。

Execute()是Action主要使用的方法。当客户发出的请求被Controller收到的时候,这个请求将被移动到一个相应的Action实例中,如果找不到相应的实例,控制器就会重新创建一个实例,然后找到这个重新创建出来的Action实例的execute()方法,再去调用它。对于应用系统中的Action类来说,Struts框架会为每个类创建一个相应的实例。因为同一个实例被所有用户使用,就必须保证在多线程环境下运行客户的Action类。图1就是execute()方法如何被访问的过程:

图1 Action实例的execute()方法

2.3 ActionForm

ActionForm主要用于对用户的请求参数进行封装。为了使请求参数顺利地通过JSP页面的表单域,一定要保证表单域的名称和ActionForm参数是相同的。同时,要在struts-config.xml文件中对所有的Action进行配置,该文件还包含有表单元素。因而ActionForm中定义的所有元素,都应该对应一个相应的表单form-bean元素。

请求对象的参数一般被保存在ActionForm派生的对象中,他们和用户之间是紧密相关的。通常,通过RequestProcessor来创建出一个相应的ActionForm的类。这是发生在已经完成向前的一个URL,该URL是映射到控制器servlet而不是JSP和相应的动作映射指定表单的属性的。出现这个情况时,如果在特定的范围之内没有发现,RequestProcessor将利用各种可能的方法尝试着实现一个新的ActionForm对象的表单bean。在特定范围内,可利用元素之中的属性name找到相应的ActionForm对象。此时RequestProcessor就会对表单的属性进行重新设置,填写表单与请求中的参数,再通过调用表单对象的相关验证方法,通过服务器端对用户的有关输入进行验证。作为一种默认的行为,如果想要去调用一种验证方法,只有给验证ActionMapping对象的值设置为true的属性。如果是g.apache.struts.taglib.html.Errors Tag来通知用户验证的结果是不正确的,那就说明此次最终验证的就是一个ActionErrors对象。ActionForm还有一个作用,那就是保存一个视图引用的中间模型状态给用户。

如果RequestProcessor查找到了一个相应的表单对象,它就会把这个表单对象转送给请求处理器相应的execute(…)方法。通常,一个ActionForm对象也可以通过请求处理器来实现。实现表单对象就是为了给中间模型状态使用的JSP提供一个合适的请求范围,这就可以保证有效期满后对象是不存在的。在没有特别声明的情况下,全部表单的保存形式都表现为会话范围。在会话过程中,如果表单对象脱离了有效性而独立存在,极有可能出现浪费内存的情况;同时,必须保持相同请求处理器存储在会话中的对象的生命周期的轨道。通过使用相应的表单bean为那些横跨多个用户交互形式的有关表单来获取相应的表单数据。在进行反馈的时候表单bean可以被用来保存中间模型的状态,而这个状态就是通过自定义标签发生变化的。尽最大的可能不要使视图的标签用法和Java代码相结合,所以要做好相应的工作分工。通常由web制作组来解决标志的有关问题,而由应用程序的开发组来解决Java代码的相关问题。

3 Struts框架的高级特性

3.1 验证

通常情况下,不会对用户的输入进行验证,但是,一旦出现下面所描述的情况时,就需要通过使用表单bean来进行验证: (1)表单bean覆盖超类的验证方法; (2)元素作为Struts配置文件,它的验证属性已经确定或者将其默认的值设为TRUE。一般情况下,bean能够具备的相关验证也是针对那些比较起来不是很难的问题,因为bean中通常就没有那些与业务逻辑有关的应用程序的信息。比如,是否每个用户都在必需的字段中输入了相应的数据?Struts框架的各个组成部分可以进行核查。

3.2 使用异常处理声明

如果要对应用程序的相关逻辑流程进行定义,不要通过写死在代码中来实现,这是一个较成熟的经验,通常推荐使用的是在代码以外通过使用配置的方法来进行。这样的例子在J2EE中是非常多的。从实现EJB的安全性和事务性行为到描述JMS消息和目的地之间的关系,很多时候都可以在程序以外对其运行时的有关处理流程进行定义。在先前版本的Struts框架中,开发人员必须自己来处理在Struts应用之中发生错误的情况。在最新的版本中,这一点已经得到了很大的改善。其中,为了便于在系统缺省处理action类实施过程中出现的错误,Struts Framework通常会提供一个内置的名为ExceptionHandler的类来实现。这作为一个技巧,也是很多有关framework可扩展的接口之一。

通常,作为Struts的默认异常处理程序类,其运行的结果就是生成一个相应的ActionError对象,与此同时,还应注意要把其保存在特定域内(Scope)的对象之中。如果用户遇到一系列相关的问题,可通过使用JSP页面利用错误类来告诉用户所发生的问题。这样,如果用户还不满意的话,可以轻易地去实现属于自己的ExcepionHandler类。

3.3 使用应用模块

由于应用模块这个概念的出现,Struts的应用可以被划分为不同的模块,而各个模块都有属于自己的Struts配置文件,如JSP页面和Action。这个功能非常好地解决了开发人员在开发过程中遇到的一些难以处理的问题。允许同时出现多个配置文件,解决了文件配置单一的问题,使得并行开发更加可行。如果应用模块同意,Struts可以按照应用系统本身所具有的功能对这些相应的模块进行分解。实践证明这样是最符合逻辑的,也是最好的。

如果没有必要将一个项目划分成为很多模块,一个缺省的应用模块会被Struts框架所支持。这样,就能创建相关的应用程序,且该应用程序还具有较好的可移植性,因为应用程序会自动作为缺省的应用模块。每一个Struts的应用模块都应该设计好一个属于自己的单独的配置文件。创建的Action和ActionForm是属于自己的且和其他模块是相对独立的,对异常处理而言那是更多的。在每个应用模块创建好属于自己独立的配置文件后,各个模块中的Action就应该准备好被调用了。因而,Struts框架所准备好的SwitchAction类就被用到了。同时,应用模块的名字也会被Struts主动加入到URL中,就和应用程序的名字被Struts主动加入到URL中是一样的。作为对框架新的扩展的应用模块,它是非常有利于使用并行方式的团队开发的。如果团队是非常小的,那就没必要用到这个特性了,也没有必要使用模块化了。当然,就算是只有一个应用模块,系统还是一样应该正常地运作。

[1]孙卫琴.精通Struts:基于MVC的JavaWeb设计与开发[M].北京:电子工业出版社,2007.

[2]李智渊.采用Struts框架实现MVC设计模式[J].甘肃科技纵横,2005(4):13-14.

[3]蔡剑,景楠.Java Web应用开发:J2EE和Tomcat[M].2版.北京:清华大学出社,2005.

Technical Overview of the Struts Framework

WANG Gang
(Information Engineering Department of Shanxi Technical College of Finance&Economics, Xianyang 712000,China)

This article briefly introduces the Struts framework and related contents,and mainly discusses the components and advanced features of the Struts framework.

Struts framework;components of Struts framework;advanced features of Struts framework

TP312

A

1008-178X(2012)09-0025-04

2012-02-03

王 刚(1978-),男,陕西咸阳人,陕西财经职业技术学院信息工程系讲师,从事计算机应用研究。

猜你喜欢
表单开发人员实例
电子表单系统应用分析
Semtech发布LoRa Basics 以加速物联网应用
浅谈网页制作中表单的教学
后悔了?教你隐藏开发人员选项
完形填空Ⅱ
完形填空Ⅰ
动态表单技术在教学管理中的应用*
三星SMI扩展Java论坛 开发人员可用母语