问题描述
Struts 是 JAVA 和 J2EE 界最普及、使用最广泛的 MVC 框架之一。自诞生以来,Struts 就以其将业务逻辑与表示逻辑分离的清晰视点给业界留下了深刻印象。本模式将介绍常见错误及解决方法。
故障排除
调试 Struts 应用程序时,故障排除可能错综复杂,因为有时错误信息所指示的原因并非错误的真正成因。有时可能甚至不出现任何错误。
请注意,并非下面所有任务都需要完成。有些问题仅通过执行几项任务就可以解决。
任何 Struts 配置的大多数问题都可能是因配置问题所致,多半可能是配置不正确。因此,确保配置没有问题很重要。
更正应用程序文件
Struts 1.1 将许多公用类从 struts.jar 中分离出来。大多数公用功能(如 digestor 实用程序和 Bean 实用程序)已移至公用包中。需要将 commons jar 随 Struts 实现类一起引用。Struts 实现类中已广泛使用 commons 类。
如果不想遭遇那些恼人的 NoClassDefFound 错误,就需要确保 Struts Web 应用程序始终包含下列包。
包名称 用途
commons-beanutils.jar 简单易用的 Java 反射和内省 API 包装器
commons-collections.jar 一组用于扩展和增强 Java Collections Framework 的类
commons-digester.jar 通常用于分析 XML 配置文件的 XML 到 Java 对象映射实用程序
commons-lang.jar 一组公用实用程序类,可以为 java.lang 中的类提供附加功能
commons-logging.jar 各种日志 API 实现的包装器
commons-validator.jar 用于定义 XML 文件中的验证类(验证方法)和验证规则的可扩展框架
jakarta-oro.jar 一组文本处理 Java 类,可以提供兼容 Perl 5 的正则表达式
备注:如果从 Struts 1.0 升级到 Struts 1.1,digestor 类将以单独包的形式位于公用项目下。在 Struts 1.0 中,digestor 类是 Struts 源代码的一部分。
对于任何 Struts 应用程序,类路径中必须有上述类。
理解 Struts 配置文件
通过一个基于 XML 的配置文件来记录和控制 Struts 配置。缺省情况下,该文件的名称是 struts-config.xml,位于 Web 应用程序的 WEB-INF 目录中。Struts 有一个中央控制器 Servlet (org.apache.struts.action.ActionServlet),首次加载 Struts 应用程序时,它会对该配置文件进行分析。
该配置文件包含 Action 类与 Form 类的映射。映射为应用程序提供页面流。因此,配置文件的两个重要部分是 <form-beans> 和 <action-mappings>。
下面是一个示例 form-bean:
<form-beans>
<form-bean
name="LoginForm"
type="com.test.LoginForm"/>
</form-beans>
对应的 action-mapping 是这样的:
<action-mappings>
<action
path="/login"
type="com.test.LoginAction"
name="LoginForm"
scope="request"
validate="true"
input="/pages/Login.jsp"/>
</action-mappings>
合并后的应用程序流是这样的:
如果Struts 配置文件中提供的配置详细信息正确,Struts 控制器会对该应用程序流实施控制。如果提供的路径不正确或未在类加载器中找到 Form Bean 或 Action Bean,控制器将返回运行时错误。