创建独立的Struts配置文件
每个Struts应用模块必须拥有自己的配置文件。允许创建自己的独立于其他模块的Action,ActionForm,异常处理甚至更多。
继续以上面的商店应用程序为例,我们可以创建以下的配置文件:一个文件名为struts-config-catalog.xml,包含catalog(商
品目录)、items(商品清单)、和其它与库存相关的功能的配置信息;另一个文件名为struts- config-order.xml,
包含对order(订单)和order
tracking(订单跟踪)的设置。第三个配置文件是struts-config.xml,其中含有属于缺省的应用模块中的一般性的功能。
配置Web部署描述符
在Struts的早期版本中,我们在Web.xml中指定Struts配置文件的路径。好在这点没变,有助于向后兼容。但对于多个应用模块,我们需要在Web部署描述符中增加新的配置文件的设定。
对于缺省的应用(包括Struts的早期版本),Struts framework
在Web.xml文件中查找带有config的元素<init-param>,用于载入Action mapping
和其它的应用程序设定。作为例子,以下的XML片断展现一个典型的<init-param>元素:
<init-param>
<param-name>config>/param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
注:如果在现有的<init-param>元素中找不到"config"关键字,Struts framework将缺省地使用/WEB/struts-config.xml
为了支持多个应用模块(Struts
1.1的新特性),必须增加附加的<init-param>元素。与缺省的<init-param>元素不同的是,附加
的<init-param>元素与每个应用模块对应,必须以config/xxx的形式命名,其中字符串xxx代表该模块唯一的名字。例如,
在商店应用程序的例子中,<init-param>元素可定义如下(注意粗体字部分):
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/catalog</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/order</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
第一个 <init-param>元素对应缺省的应用模块。第二和第三个元素分别代表非缺省应用模块catalog 和 order。
当Struts载入应用程序时,它首先载入缺省应用模块的配置文件。然后查找带有字符串config/xxx
形式的附加的初始化参数。对每个附加的配置文件也进行解析并载入内存。这一步完成后,用户就可以很随意地用config/后面的字符串也就是名字来调用相
应的应用模块。
多个应用模块之间调用Action类
在为每个应用模块创建独立的
配置文件之后,我们就有可能需要调用不同的模块中Action。为此必须使用Struts框架提供的SwitchAction类。Struts
会自动将应用模块的名字添加到URL,就如Struts
自动添加应用程序的名字加到URL一样。应用模块是对框架的一个新的扩充,有助于进行并行的团队开发。如果你的团队很小那就没必要用到这个特性,不必进行
模块化。当然,就算是只有一个模块,系统还是一样的运作。
4. 把
JSP
放到WEB-INF后以保护JSP源代码
为了更好地保护你的JSP避免未经授权的访问和窥视, 一个好办法是将页面文件存放在Web应用的WEB-INF目录下。
通常JSP开发人员会把他们的页面文件存放在Web应用相应的子目录下。一个典型的商店应用程序的目录结构如图2所示。跟catalog
(商品目录)相关的JSP被保存在catalog子目录下。跟customer相关的JSP,跟订单相关的JSP等都按照这种方法存放。
图 2.基于不同的功能 JSP 被放置在不同的目录下
这种方法的问题是这些页面文件容易被偷看到源代码,或被直接调用。某些场合下这可能不是个大问题,可是在特定情形中却可能构成
安全隐患。用户可以绕过Struts的controller直接调用JSP同样也是个问题。
为了减少风险,可以把这些页面文件移到WEB-INF 目录下。基于Servlet的声明,WEB-INF不作为Web应用的公共文档树的一部分。因此,WEB-INF 目录下的资源不是为客户直接服务的。我们仍然可以使用WEB-INF目录下的JSP页面来提供视图给客户,客户却不能直接请求访问JSP。
采用前面的例子,图3显示将
JSP页面移到WEB-INF 目录下后的目录结构
图 3. JSP存放在 WEB-INF 目录下更为安全
如果把这些JSP页面文件移到WEB-INF
目录下,在调用页面的时候就必须把"WEB-INF"添加到URL中。例如,在一个Struts配置文件中为一个logoff
action写一个Action mapping。其中JSP的路径必须以"WEB-INF"开头。如下所示:
<action
path="/logoff"
type="org.apache.struts.webapp.example.LogoffAction">
<forward name="success" path="/WEB-INF/jsp/index.jsp"/>
</action>
这个方法在任何情况下都不失为Struts实践中的一个好方法。是唯一要注意的技巧是你必须把JSP和一个Struts action联系起来。即使该Action只是一个很基本的很简单JSP,也总是要调用一个Action,再由它调用JSP。
最后要说明的是,并不是所有的容器都能支持这个特性。WebLogic早期的版本不能解释Servlet声明,因此无法提供支持,据报道在新版本中已经改进了。总之使用之前先检查一下你的Servlet容器。
5. 使用 Prebuilt Action类提升开发效率
Struts framework带有好几个prebuilt
Action类,使用它们可以大大节省开发时间。其中最有用的是org.apache.struts.actions.ForwardAction 和
org.apache.struts.actions.DispatchAction.
使用 ForwardAction
在应用程序中,可能会经常出现只要将Action对象转发到某个JSP的情况。在上一点中曾提到总是由Action调用JSP是个好习惯。如果我们不必
在Action中执行任何业务逻辑,却又想遵循从Action访问页面的话,就可以使用ForwardAction,它可以使你免去创建许多空的
Action类。运用ForwardAction的好处是不必创建自己的Action类,你需要做的仅仅是在Struts配置文件中配置一个Action
mapping。
举个例子,假定你有一个JSP文件index.jsp ,而且不能直接调用该页面,必须让程序通过一个Action类调用,那么,你可以建立以下的Action mapping来实现这一点:
<action
path="/home" parameter="/index.jsp"
type="org.apache.struts.actions.ForwardAction" scope="request"
validate="false"> </action>
正如你看到的,当 /home 被调用时, 就会调用ForwardAction 并把请求转发到 index.jsp 页面.
再讨论一下不通过一个Action类直接转发到某个页面的情况,必须注意我们仍然使用<action>元素中的forward属性来实现转发的目标。这时<action>元素定义如下:
<action
path="/home"
forward="/index.jsp">
</action>
以上两种方法都可以节省你的时间,并有助于减少一个应用所需的文件数。
使用 DispatchAction
DispatchAction是Struts包含的另一个能大量节省开发时间的Action类。与其它Action类仅提供单个execute()方法
实现单个业务不同,DispatchAction允许你在单个Action类中编写多个与业务相关的方法。这样可以减少Action类的数量,并且把相关
的业务方法集合在一起使得维护起来更容易。
要使用DispatchAction的功能,需要自己创建一个类,通过继承抽象的
DispatchAction得到。对每个要提供的业务方法必须有特定的方法signature。例如,我们想要提供一个方法来实现对购物车添加商品清
单,创建了一个类ShoppingCartDispatchAction提供以下的方法:
public ActionForward addItem( ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception;
那么,这个类很可能还需要一个deleteItem()方法从客户的购物车中删除商品清单,还有clearCart()方法清除购物车等等。这时我们就可以把这些方法集合在单个Action类,不用为每个方法都提供一个Action类。
在调用ShoppingCartDispatchAction里的某个方法时,只需在URL中提供方法名作为参数值。就是说,调用addItem()方法的 URL看起来可能类似于:
http://myhost/storefront/action/cart?method=addItem
其中method参数指定ShoppingCartDispatchAction中要调用的方法。参数的名称可以任意配置,这里使用的"method"只是一个例子。参数的名称可以在Struts配置文件中自行设定。
6.使用动态ActionForm
在Struts framework中,ActionForm对象用来包装HTML表格数据(包括请求),并返回返回动态显示给用户的数据。它们必须是完全的JavaBean,并继承.Struts 里面的ActionForm类,同时,用户可以有选择地覆盖两个缺省方法。
该特性能节省很多时间,因为它可以协助进行自动的表现层的验证。ActionForm的唯一缺点是必须为不同的HTML表格生成多个ActionForm
类以保存数据。例如,如果有一个页面含有用户的注册信息,另一个页面则含有用户的介绍人的信息,那么就需要有两个不同的ActionForm类。这在大的
应用系统中就会导致过多的ActionForm类。Struts 1.1对此做出了很好的改进,引入了动态ActionForm类概念通过Struts framework中的DynaActionForm类及其子类可以实现动态的ActionForm
,动态的ActionForm允许你通过Struts的配置文件完成ActionForm的全部配置;再也没有必要在应用程序中创建具体的
ActionForm类。具体配置方法是:在Struts的配置文件通过增加一个<form-bean>元素,将type属性设定成
DynaActionForm或它的某个子类的全名。下面的例子创建了一个动态的ActionForm名为logonForm,它包含两个实例变
量:username 和 password.
<form-bean
name="logonForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="username" type="java.lang.String"/>
<form-property name="password" type="java.lang.String"/>
</form-bean>
动态的ActionForm可以用于Action类和
JSP,
使用方法跟普通的ActionForm相同,只有一个小差别。如果使用普通的ActionForm对象则需要提供get 和
set方法取得和设置数据。以上面的例子而言,我们需要提供getUsername() 和
setUsername()方法取得和设置username变量,同样地有一对方法用于取得和设置password变量.
这里我们使
用的是DynaActionForm,它将变量保存在一个Map类对象中,所以必须使用DynaActionForm 类中的get(name) 和
set(name)方法,其中参数name是要访问的实例变量名。例如要访问DynaActionForm中username的值,可以采用类似的代码:
String username = (String)form.get("username");
由于值存放在一个Map对象,所以要记得对get()方法返回的Object对象做强制性类型转换。
DynaActionForm有好几个很有用的子类。其中最重要的是DynaValidatorForm
,这个动态的ActionForm和Validator
一起利用公共的Validator包来提供自动验证。这个特性使你得以在程序代码之外指定验证规则。将两个特性结合使用对开发人员来说将非常有吸引力。
7. 使用可视化工具
自从Struts 1.0 分布以来,就出现了不少可视化工具用于协助创建,修改和维护Struts的配置文件。配置文件本身是基于XML格式,在大中型的开发应用中会增大变得很笨拙。为了更方便的管理这些文件,一旦文件大到你无法一目了然的时候,建议试着采用其中的一种GUI 工具协助开发。商业性的和开放源代码的工具都有不少,表1列出了可用的工具和其相关链接,从那里可以获取更多信息。
表 1. Struts GUI 工具
应用程序 |
性质 |
网址 |
Adalon |
商业软件 |
http://www.synthis.com/products/adalon |
Easy Struts |
开放源码 |
http://easystruts.sourceforge.net/ |
Struts Console |
免费 |
http://www.jamesholmes.com/struts/console |
JForms |
商业软件 |
http://www.solanasoft.com/ |
Camino |
商业软件 |
http://www.scioworks.com/scioworks_camino.html |
Struts Builder |
开放源码 |
http://sourceforge.net/projects/rivernorth/ |
StrutsGUI |
免费 |
http://www.alien-factory.co.uk/struts/struts-index.html |
相关资源
要获取更为全面的Struts GUI 工具列表 (包括免费的和商业性的), 请访问 Struts resource page.
分享到:
相关推荐
programming jakarta struts CHM版
Jakarta Struts 1.1 是一个历史悠久的Java Web应用程序框架,由Apache软件基金会的Jakarta项目开发。这个框架在2000年代初期非常流行,它为构建MVC(模型-视图-控制器)架构的Web应用提供了一个强大而灵活的基础。在...
Apress, Pro Jakarta Struts (2004), 2ed Lib
《精通Jakarta Struts》是一本深入探讨Struts框架的专业技术书籍,主要针对Java Web开发领域。Struts作为MVC(Model-View-Controller)设计模式的实现,是早期非常流行的一个开源框架,它简化了Java Servlet和JSP的...
### Jakarta Struts2:Web应用开发的里程碑 Jakarta Struts2是Apache Software Foundation下的一个开源框架,专门用于简化和标准化Java web应用程序的开发过程。它基于Model-View-Controller(MVC)设计模式,旨在...
**Jakarta Struts 1.x 框架详解** Jakarta Struts 是一款经典的Java Web应用程序框架,由Apache软件基金会的Jakarta项目开发并维护。它在2000年代初期广泛流行,为构建MVC(Model-View-Controller)架构的Web应用...
Jakarta Struts编程(中英文双版版) 高效的Model 2编程并不是一项简单的任务,开发人员经常自己发现难于找到很多问题的最佳解决方式。本书是Struts项目的完全指南,引导开发人员理解概念、设计和实现方式。虽然...
**Jakarta Struts编程:深入理解MVC框架** Jakarta Struts是一款强大的Java Web应用程序框架,基于Model-View-Controller(MVC)设计模式。它为开发者提供了构建可维护、可扩展的Web应用的结构,使得后端业务逻辑与...
jakarta struts中文版
《Programming Jakarta Struts》这本书是Java Web开发领域中的一本经典之作,主要聚焦于Struts框架的使用和实践。Struts是由Apache软件基金会维护的一个开源项目,它为构建基于MVC(Model-View-Controller)设计模式...
自本书第一版发行以来,Struts开源项目变得越来越受欢迎。尽管这项技术令人振奋,但是它的说明文档却仍然少得可怜——大多数的指南都太简单,那些要编写复杂Web应用程序的开发人员根本找不到所需的关键信息。本书第...
《John Wiley And Sons Professional Jakarta Struts PROPER》是关于Java Web开发框架Jakarta Struts的专业教程,由知名出版商John Wiley & Sons发行。该压缩包包含了一本完整的电子书、相关文档以及可能的修复文件...
Jakarta Struts 编程Jakarta Struts 编程Jakarta Struts 编程Jakarta Struts 编程Jakarta Struts 编程
Other solutions do not—those that fail to serve the needs of users and add value usually fall by the wayside. <br>Through this evolutionary process, the Jakarta Struts framework (created by Craig...
《Manning - Art of Java Web Development and Jakarta Struts》是一本深入探讨Java Web开发和Jakarta Struts框架的专业书籍。本书旨在帮助开发者理解和掌握使用Struts进行高效、可维护的Web应用开发的方法。 ...
Jakarta Struts是一个开源的Java Web应用程序框架,它极大地简化了构建基于Model-View-Controller (MVC)架构的应用程序的过程。这个框架最初由Apache软件基金会开发,是Java社区中的一个重要组成部分,尤其在Web应用...
Jakarta Struts是一个由Apache软件基金会赞助的开源项目,它为Java Web应用程序提供了一个基于Model-View-Controller(MVC)设计模式的框架。MVC设计模式是一种将应用程序的业务逻辑、用户界面和数据分离的设计策略...