UML软件工程组织

Struts 框架

Struts 运行环境

1.1 Struts 1.0 和1.1版本

当前主要有两个版本,struts 1.0 release 和 struts 1.1 beta 3。Struts 1.0 和1.1差别很大,主要有两点:

  • Struts 1.1 中引用了很多 apache其他项目的类包,如:xml 解析、日志、验证等,因此struts1.1 的包结构与1.0 完全不同。在struts 1.1环境下,一个webapp 要成功运行,除了struts.jar 外,还需要引用12个包。
  • Struts 1.1 增加了很多新功能,例如,支持sub-applications, 动态FormBean,异常处理,验证,支持Tile templating等。

尽管struts 1.0 是正式发布版,但是结构已经老化,功能也已经固化。所以我们的Framework不选用struts 1.0, 而选用 struts 1.1。

1.2支持struts的应用服务器

根据apache官方网站的说法,struts几乎支持所有的servlet containers, 下面是几种主要的servlet containers

Servlet Container

版本

iPlanet Application Server 6.0sp2 or higher, 6.5
Tomcat 3.2.x, 4.0 or higher
Weblogic 6.0 or higher
Websphere 3.5 or higher
Orion 1.0 or higher
Resin 1.2 or higher
JRun 3.0 or higher

1.3配置说明

我们公司目前项目中使用较多的应用服务器是iPlanet Application Server, Tomcat。Struts 1.1 在这两个应用服务器下已经配置通过。

Tomcat 与struts结合的很好,只需要将xxx.war 放到 webapp 目录下,启动Tomcat 即可,不需要其他额外的配置。

iPlanet 配置复杂一些,主要原因是xml parser 版本不一致,和struts 相关类不能加载。具体的配置说明请见《如何在 iAS 6.x 中配置Struts 1.1 beta x》。

在其他的应用服务器上,还没有尝试struts, 今后根据项目需要会作进一步的研究。

struts框架

2.1 struts 体系结构

struts framework是MVC 模式的体现,下面分别从模型、视图、控制来看看struts的体系结构(Architecture)。下图显示了struts framework的体系结构响应客户请求时,各个部分工作的原理。


Struts体系结构


 

2.1.1 从视图角度(View)

主要由JSP建立,struts自身包含了一组可扩展的自定义标签库(TagLib),可以简化创建用户界面的过程。目前包括:Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags。

2.1.2从模型角度(Model)

模型主要是表示一个系统的状态(有时候,改变系统状态的业务逻辑操作也也划分到模型中)。在Struts中,系统的状态主要有ActiomForm Bean体现,一般情况下,这些状态是非持久性的。如果需要将这些状态转化为持久性数据存储,Struts本身也提供了Utitle包,可以方便的与数据库操作。

2.1.3 从控制器角度(Controller)

在Struts framework中, Controller主要是ActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成。其中,Action扮演了真正的业务逻辑的实现者,而ActionMapping和ActionForward则指定了不同业务逻辑或流程的运行方向。

2.2 struts 的组件

框架中所使用的组件:

ActionServlet 控制器
ActionClass 包含事务逻辑
ActionForm 显示模块数据
ActionMapping 帮助控制器将请求映射到操作
ActionForward 用来指示操作转移的对象
ActionError 用来存储和回收错误
Struts标记库 可以减轻开发显示层次的工作

2.3 struts 配置文件

Struts-config.xml集中了所有页面的导航定义。对于WEB项目,通过配置文件可迅速把握其脉络,这不管是对于前期的开发,还是后期的维护或升级都是方便的。掌握Struts-config.xml是掌握Struts的关键所在。

在struts的早先版本中,只有一个struts配置文件struts-config.xml。但是,对大型项目来说,使用和修改这个配置文件,会成为瓶颈。在struts1.1中,支持sub-Application ,可以定义多个配置文件协同工作。

通过struts配置文件struts-config.xml 将struts各个组件联系在一起。在struts-config.xml 中可以定义下面内容:

  • 全局转发
  • ActionMapping类
  • ActionForm bean
  • JDBC数据源

2.3.1 配置全局转发

全局转发用来在JSP页之间创建逻辑名称映射。全局转发的例子:

<global-forwards>

<forwardname="logoff"path="/logoff.do"/>

<forwardname="logon"path="/logon.jsp"/>

<forwardname="registration"path="/registration.jsp"/>

<forwardname="success"path="/mainMenu.jsp"/>

</global-forwards>

属性 描述
Name 全局转发的名字
Path 与目标URL的相对路径

2.3.2 配置ActionMapping

ActionMapping对象帮助进行框架内部的流程控制,它们可将请求URI映射到Action类,并且将Action类与ActionForm bean相关联。ActionServlet在内部使用这些映射,并将控制转移到特定Action类的实例。所有Action类使用perform()或者execute()方法实现特定应用程序代码,返回一个ActionForward对象,其中包括响应转发的目标页面名称。例如:

<action-mappings>

<actionpath="/logon"

type="org.apache.struts.webapp.example.LogonAction"

name="logonForm"

scope="session"

input="logon">

</action>

<forward name="failure" path="/error.jsp"/>

<forward name="success" path="/index.jsp"/>

</ action-mappings>

属性

描述

Path

Action类的相对路径

Name

与本操作关联的Action bean的名称

Type

连接到本映射的Action类的全称(可有包名)

Scope

ActionForm bean的作用域(请求或会话)

Prefix

用来匹配请求参数与bean属性的前缀

Suffix

用来匹配请求参数与bean属性的后缀

attribute

作用域名称。

className

ActionMapping对象的类的完全限定名默认的类是org.apache.struts.action.ActionMapping

input

输入表单的路径,指向bean发生输入错误必须返回的控制

unknown

设为true,操作将被作为所有没有定义的ActionMapping的URI的默认操作

validate

设置为true,则在调用Action对象上的perform()方法前,ActionServlet将调用ActionForm bean的validate()方法来进行输入检查

通过<forward>元素,可以定义资源的逻辑名称,该资源是Action类的响应要转发的目标。

属性 描述
Id ID
ClassName ActionForward类的完全限定名,默认是org.apache.struts.action.ActionForward
Name 操作类访问ActionForward时所用的逻辑名
Path 响应转发的目标资源的路径
redirect 若设置为true,则ActionServlet使用sendRedirect()方法来转发资源

2.3.3 配置ActionForm Bean

ActionServlet使用ActionForm来保存请求的参数,这些bean的属性名称与HTTP请求参数中的名称相对应,控制器将请求参数传递到ActionForm bean的实例,然后将这个实例传送到Action类。例子:

<form

beans >

<form

bean name="bookForm" type="BookForm"/>

</form

beans>

属性

描述

Id

ID

className

ActionForm bean的完全限定名,默认值是org.apache.struts.action.ActionFormBean

Name

表单bean在相关作用域的名称,这个属性用来将bean与ActionMapping进行关联

Type

类的完全限定名

2.3.4 配置JDBC数据源

例子:

<data-sources>

<data-source>

<set-property property="autoCommit"

value="false"/>

<set-property property="description"

value="Example Data Source Configuration"/>

<set-property property="driverClass"

value="org.postgresql.Driver"/>

<set-property property="maxCount"

value="4"/>

<set-property property="minCount"

value="2"/>

<set-property property="password"

value="mypassword"/>

<set-property property="url"

value="jdbc:postgresql://localhost/mydatabase"/>

<set-property property="user"

value="myusername"/>

</data-source>

</data-sources>

属性 描述
description 数据源的描述
autoCommit 数据源创建的连接所使用的默认自动更新数据库模式
driverClass 数据源所使用的类,用来显示JDBC驱动程序接口
loginTimeout 数据库登陆时间的限制,以秒为单位
maxCount 最多能建立的连接数目
minCount 要创建的最少连接数目
password 数据库访问的密码
readOnly 创建只读的连接
User 访问数据库的用户名
url JDBC的URL

通过指定关键字名称,Action类可以访问数据源,比如:

javax.sql.DataSource ds = servlet.findDataSource(“conPool”);

javax.sql.Connection con = ds.getConnection();

struts标记库

struts 标记库包含4种类型的标记,分别是:

  • struts-bean taglib:在访问bean和bean属性时使用的tag,也包含一些消息显示的tag。
  • struts-html taglib:用来生成动态HTML用户界面和窗体的tag。
  • struts-logic taglib :用来管理根据条件生成输出文本,和其它一些用来控制的信息。
  • struts-template taglib:用来定义模板机制。

Struts提供了功能强大的Taglib,充分使用这些Tag,能最大限度的发挥Struts的作用。

由于标记库功能强大,所以掌握它需要花费一定的时间。目前我们可以先从 struts-html taglib 学起,主要精力还是要先放在理解掌握struts导航功能上。

文档《struts 标记库》可以帮助学习掌握struts taglib.

可视化设计工具和代码生成器Camino

Camino 是基于 struts framework的可视化建模工具。使用camino 可以实现快速设计和开发,主要特点有:

  • 支持struts 1.0 和 struts 1.1
  • 通过storyboard , 可视化定义页面导航流程,配置struts-config.xml 文件。
  • Jsp converter wizard 功能可以将普通jsp 转换成带struts-html taglib 的jsp
  • Code Generator wizard 功能可以自动生成 Action 和 FormBean 类的框架。
  • Camin 3.0 还提供了验证器和Preview Jsp 的功能。

目前Camino的版本有2.05 和 3.0, 可以下载试用版。Camino 自带了帮助文档,可以方便学习Camino。

Struts example

Struts 1.1 beta 3 的包中包含了几个example, 可以帮助学习struts。

Web应用程序 描述
Struts-blank.war 一个简单的web应用程序
Struts-documentation.war 包含struts站点上所有struts文档
Struts-example.war Struts很多特性的示范
Struts-exercisetaglib.war 主要用于对自定义标签库进行增加而使用的测试页,但也可以示范如何使用struts标记
Struts-template.war 包含struts模板标记的介绍和范例
Struts-upload.war 一个简单的例子,示范如何使用struts框架上传文件

在Tomcat 4.1.18运行环境下,只需要将 xxx.war 文件放到webapps 目录下,启动Tomcat 即可。

建议从struts-example 开始学习,熟读struts-config.xml, jsp, 和 java 源码。

6、统一的IDE工具: eclipse

Eclipse 是由IBM支持的开发源码的IDE, 目前的最新版本是2.1。与Netbeans, JBuilder相比,由以下特点:

  • 界面设计精细,布局合理,秉承了IBM的风格。
  • 功能齐全,具备了Netbeans, JBuilder(Enterprice fetature 除外)大部分功能,还有一些特有的功能,如:代码历史记录比较、替换,代码重构,自动生成get,set方法, 小组协作方式的版本控制和权限控制。
  • 速度快,执行一个代码格式化(14,000行)的操作,要比Netbeans快百倍以上。
  • 功能强大的plug-in,可以与Ant, JUnit, Tomcat集成。将来我们也可以编写自己的插件,有增强功能的潜力。

目前,每个项目使用的开发工具都不同,有JBuilder, Netbeans等。从长远考虑应该采用开发源码的IDE, 不存在盗版问题。现在开发源码的IDE有Netbeans, Eclipse两大阵营,分别由Sun 和 IBM支持。综合上面的Eclipse特性,我推荐统一使用Eclipse。

7、参考资料

  • 网站:

    struts 官方网站:http://jakarta.apache.org/struts

    struts resource : http://jakarta.apache.org/struts/resources/index.html

    Camino 网站:http://www.scioworks.com/index.html

    其他网站:http://husted.com/struts/

    http://struts.application-servers.com/main.html

    http://www.synthis.com/products/architectures/struts/index.jsp

  • 文章:

    《struts框架详细介绍》 - ppt 文档,描述了struts 框架

    《struts-intro》- ppt 文档,其中的struts 导航流程图非常好。

    《Using Struts》 - ppt 文档,概述了struts 框架和组成

    《如何在 iAS 6.x 中配置Struts 1.1 beta x》- 讲述在iPlanet 6.x 如何配置 struts 1.1

    《Struts标记库》 - 详细介绍了struts taglib的使用

    《struts turorial》 - 一个网上购书的示例,详细讲解了struts使用步骤

 


版权所有:UML软件工程组织