使用多个Struts配置文件(1)

发表于:2007-06-11来源:作者:点击数: 标签:
开始之前 关于这份教程 这份教程向 Java Web 开发 人员介绍如何将 Apache Struts 设置为使用多个配置文件。将学习不同的Struts 配置文件的目的和结构,以及使用更小文件的合理性。将经历把现有 Struts 应用程序的大型、复杂的 struts-config.xml 文件分成按

开始之前

关于这份教程

这份教程向 Java™ Web 开发人员介绍如何将 Apache Struts 设置为使用多个配置文件。将学习不同的Struts 配置文件的目的和结构,以及使用更小文件的合理性。将经历把现有 Struts 应用程序的大型、复杂的 struts-config.xml 文件分成按功能组织的多个配置文件的步骤。处理的是更小、更具可管理性的部分,可以让 Struts 应用程序更容易管理和重新配置,也有助于在出现问题的时候更容易找出故障点。还将学习其他一些可以改善 Struts 配置的清理类型。

谁应当阅读这份教程?

这份教程针对的 Java Web 开发人员至少应当有一些 Apache Struts 和 Apache Tomcat servlet 引擎的基本经验。应当知道如何启动和停止 Tomcat、安装 Struts 和部署 Struts 应用程序。

也可以使用 Tomcat 之外的 servlet 引擎(Struts 和其他 servlet 引擎也配合得很好),但是要知道如何设置和配置。这份教程假设正在使用 Tomcat,没有提供关于非 Tomcat 配置的额外细节。请参阅 参考资料 获得在非 Tomcat 的 servlet 容器上安装 Struts 的 Struts 文档链接。

Struts 使用 XML 配置文件,所以读者应当熟悉 XML。但是不需要是配置专家,因为在进入对配置文件进行分解的细节之前,我将提供一些 Struts 如何使用这些文件的基本信息。

前提条件

需要一台安装了 servlet 引擎(例如 Apache Tomcat)的机器或 ISP。强烈建议在本地的开发计算机上或者在非生产的 ISP 帐户上执行这份教程介绍的过程。不要在为成千上万用户服务的机器上做试验,因为将要对 servlet 容器做修改(如果 servlet 引擎不能自动重新装入修改,还需要手工地重启容器)。

我使用的是 Mac OS X 上的 Java 平台 5.0 版,但对这份教程来说这两者并不是必需的。Java 1.4 也工作得很好,但是可能会在教程示例中看到一些在以前的 JVM 中没有看到的编译警告。建议至少要使用Tomcat 的 5.0 版;5.5 更好。还需要一个自己选择的编辑器来处理 XML。

显然,需要安装了 Struts;如果不清楚如何安装 Struts,请参阅 Using the Struts Validator 的附录,那里一步一步地详细介绍了完整过程。也可以参阅这份教程中的 参考资料 获得多个有帮助的链接。

最后,在这份教程中,要配置 Struts 在线银行应用程序,在由 Chuck Cavaness 编写的 Programming Jakarta Struts 中描述了这个程序(请参阅 参考资料),所以还需要得到并安装它:

◆访问 http://examples.oreilly.com/0596006519/。

◆下载 jakarta2ed-source.zip。

◆展开 ZIP 文件。

◆把 banking.war 放到 servlet 引擎的 Web 应用程序目录。

配置问题

我仍然记得那个时候:应用程序的配置 意味着保存连接数据库所需的用户名和口令的一两个文本文件。应用程序会读入这些文件(用手写的代码),然后基本上忘记了这些文件曾经存在过。这就是我当作真正傻瓜化配置的东西。不要笑 —— 在世界上有一些开发人员用专用格式保存应用程序需要的数据,用自己专用的代码读取这些值,而且从来不组织(或重新组织)这些文件。您可能会尴尬地想起自己最近写的一个应用程序正好做了同样的事。但是,这没什么;到了这一节末尾,对于配置您将了解得更多:为什么配置很重要、配置如何提供帮助。

应用程序与配置文件

在这份教程中使用应用程序配置数据 这个术语或仅使用配置 这个术语时,我指的是每个应用程序都常用的一种特定数据。在设置应用程序时使用这种数据;它控制应用程序如何设置某个选项或特性。在某些情况下,这个数据可能就是一个简单的用户名和口令组合,可能用于连接数据库或目录服务器。在其他情况下,它可能规定应用程序是否应当运行在调试模式、是否应当记录用户的请求、是否让管理员和经理登录。在更复杂的应用程序中,配置数据可能规定应用程序应当启动哪个模块,甚至指定这些模块本身应当如何表现。

但是,在所有这些情况中,这种数据并不经常变化。这些数据是相当静态的(应用程序用来与数据库对话的用户名和口令是经常改变,还是只用一个呢?),而且通常不是由用户和潜在客户输入的数据。更重要的是,它也不是应用程序的业务逻辑生成或使用的数据,例如订单细节或收费额。相反,它只是应用程序自己在幕后使用的数据。

这种数据类型 对所有应用程序来说是公共的;而数据本身则不是。应用程序的配置数据在地区之间、公司之间,甚至在同一公司的同一应用程序的不同实例之间都会有不同。但是,要正确地设置自己,应用程序经常使用一些 不需要经常变化、甚至根本不变化的数据集。如果可以把这些数据分离出来,把它从代码中取出,放入静态资源(例如配置文件)中,那么就方便多了。当特殊情况出现时,数据库连接确实需要变化,那么只要更新用户名和口令,可能要重新启动用程序,然后就可以安心上床睡觉了。因为,在现实世界中,这类变化通常发生在早晨 4:00,是不是?谁想在午夜的时候,在代码中痛苦地寻找并更新硬编码的字符串,然后重新编译呢?好的配置通常意味着只需修改文本文件中的一两个值,然后就回去睡觉。

声明式编程

需要了解的一种特殊类型的配置是声明式编程。声明式编程的想法是:声明程序的某些方面,然后让某些引擎把这些声明变成实际的代码。您确实是在编程,但是没有实际地编写代码 —— 这是个奇怪的,但是很重要的范式。清单 1 是一个简单的示例,它是一个简单的 struts-config.xml 文件的一部分:

清单 1. struts-config.xml 中的声明式编程





           type="pizza.delivery.security.LoginAction"

name="loginForm"

scope="request"

input="/loginForm.jsp">

              type="pizza.exception.InvalidPasswordException"

path="/loginForm.jsp" />

              type="pizza.exception.InvalidUsernameException"

path="/loginForm.jsp" />





在这个代码段中,定义了两个异常,对应于用户试图登录时可能发生的两个特定问题。第一个处理错误的口令,第二个处理错误的用户名。在每种情况下,动作都被引导到预定义的异常类,这些类在应用程序的其他地方编码。在这里值得注意的是,这就是处理这些错误所需要做的全部工作。不需要以自己的形式编写任何检查错误用户名的代码,然后手工抛出 InvalidUsernameException 异常;对于错误口令来说也是一样。Struts 会替您做这些工作,因为您已经声明了出错情况,还声明了出错时要做什么。通过这种方式,可以把某些一般需要进行编程的工作转到配置数据中。


共6页: 1 [2] [3] [4] [5] [6] 下一页

原文转自:http://www.ltesting.net

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
...