Struts 配置是你的应用的真实蓝图。它知道表单中有什么字段。它知道哪里可以找到JSP
文件。它也知道应用执行的每一个Action,以及每个action需要的实际资源。
这看起来好像是把许多信息集中在了一个地方。实际上就是。但是通过将这些实现细节
放在一起,许多开发人员会发现他们的应用更加易于创建和维护。
Struts 配置中的每个组件都是Java对象。ActionForm对象知道字段和表单。
ActionForward对象知道何处可以找到JSP。ActionMapping 对象知道那个表单和转发用于每
个应用能理解的命令。
一个非常简单的应用可以在一个实例化方法内创建所有这些信息对象,然后设置需要的
缺省值。例如:
ActionForwards globals = new ActionForwards();
ActionForward logoff = new ActionForward();
logoff.setName("logoff");
logoff.setPath("/Logoff.do");
globals.addForward (logoff);
ActionForward logon = new ActionForward();
logoff.setName("logon");
logoff.setPath("/Logon.do");
Struts In Action
Page 3- 8 -
globals.addForward (logon);
等等。
但是,实践中,初始化方法很快就会成为维护负担,并造成许多问题。
具有讽刺意味的是,像这样的类并不涉及到多少编程问题。它只是从存在的类中实例化
对象。它几乎不需要位于Java代码中。
事实上,它也不。Java 语言可以通过名称创建一些给定的类。Java 也支持一些如可以
决定一个类在运行时支持那些方法的反射特征。
定义
反射 告诉我们Java类提供什么方法。自省(Introspection)帮助我们推论出这些方法哪些是可以在运行时
用来配置JavaBean 的属性。Java 工具和框架 (如Struts)使用反射和自省来自动化装入和配置JavaBean
对象。这样就消除了哪些因为粗心易导致错误的编写和装入仅仅为了装入其他对象的简单对象时的任务。
将这些特征结合在一起,其实并不需要一个Java类。你需要的是一个文档来描述如何实
例化一个Java 类使之成为一个全功能的对象。
当然,象Struts这样的框架并不是唯一具有这个问题的东西。Servlet 容器基于同一原因
也需要同样的东西。开发人员不得不告诉容器应用中需要什么servlet以及其他一些对象。
不是编写一个Java 类并插入到容器之中,Sun 的工程师却是选择了使用一个XML文档。
容器读入这个文档并使用它来实例化和配置应用需要的servlet。
Struts 配置文件对Struts来说就像部署描述符对容器一样。Struts 控制器读入配置文件并
使用它来创建和配置框架需要的那些对象。