理解 Struts 配置文件

本文介绍了Struts框架的配置文件struts-config.xml的作用及其组成部分,包括FormBean与Action的映射,以及如何通过配置文件控制应用程序流程。同时,文章详细解释了FormBean和Action类的功能与实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
理解 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 ,控制器将返回运行时错误。
 
Struts Form Bean
那么,准确地讲什么是 Form Bean 呢? Form Bean 是一种 Java Bean ,广泛用于映射 HTML 表单与相应的 Java Bean Form Bean 的编码和使用都很简单。在使用 Form Bean 时,需要密切注意以下几点:
1.       Form Bean 映射到的是 HTML 表单上的元素或控件。例如,如果 HTML 表单包含名为 name 的字段, Form Bean 就会包含名为 name 的属性。
2.       在映射到 HTML 控件的 Form Bean 中定义的每个属性都必须有与之对应的赋值方法和取值方法。例如,该属性有两个方法: setName() getName()  
3.       Form Bean 还包含一个名为 validate() 的方法。可以使用 validate 方法验证表单项,如果验证失败,则填充 actionErrors 对象,并将控制权返还给调用页面,随后调用页面会显示这些错误。下一小节将对验证和错误处理做更多介绍。
Action
Action 类主要用于处理来自视图的数据和对该数据执行任何业务操作。 Action 类是 org.apache.struts.action.Action (其实就是一个 HttpServlet )的扩展。因此实际上是在执行 Servlet  
这些 action 类与 Servlet 不同,它们不是在 web.xml 中注册,而是映射到 Struts 配置文件中的 action 表单。其类似于以下代码:
 
<action
path="/login"
type="com.test.LoginAction"
name="LoginForm"
scope="request"
validate="true"
input="/pages/Login.jsp"/>
 
 
可以使用其中的 path 属性 "/login" 调用 Servlet
Action 类定义需要先行覆盖,才能执行任何任务的 execute 方法。 Execute 方法有权访问对应视图的 actionForm Bean 、对整个 Struts 配置的引用、 HttpServletRequest 对象及 HttpServletResponse 对象。这使 execute 方法能够对 HttpSession 对象、 HttpSelvletRequest 对象 HttpServletResponse 对象执行操作。
 
 
public ActionForward execute(ActionMapping mapping,
                                                        ActionForm form, 
                                                       HttpServletRequest request, 
                                                       HttpServletResponse response)
 
 
备注:在 Struts 1.0 中,该方法的名称是 perform() Struts 1.1 已不支持该方法。
Action 类返回 ActionForward 对象。此 ActionForward 对象确定需要将请求发送到的正确视图。还会在 Struts 配置文件中注册需要将控制权转交给的正确视图。 
在上例中,假定在登录失败时需要将控制权传递给 error.jsp ,在登录成功时需要将控制权传递给 nextPage.jsp Forward 标记的注册方式如下:
 
 
<action
path="/login"
type="com.test.LoginAction"
name="LoginForm"
scope="request"
validate="true"
input="/pages/Login.jsp">
<forward 
    name="failure" 
    path="/error.jsp"/>
<forward 
    name="success" 
    path="/nextPage.jsp"/></action>
 
 
Execute 方法通常以下列语句作为结束语句。
return (mapping.findForward("failure"));
其中的 mapping 指的是 ActionMapping 对象。已定义了特定 action "failure" 路径。因此以上语句实际执行的操作是将请求发送给 error.jsp   
以上示例中的 <forward> 标记具有局部作用域,可以在定义时所针对的 action 内使用。但也可以定义全局 forward 。全局 forward 也在 Struts 配置文件中定义,这与任何其它配置信息是一样的。正如定义全局变量那样,全局 forward 可以在应用程序中的任何地方使用。 
 
 
<global-forwards>
<forward
name="welcome"
path="/Welcome.jsp"/>
</global-forwards>
 
 
因此,可以在应用程序中的任何地方使用 mapping.findForward("welcome") ,而它始终会将控制权转交给 Welcome.jsp
 
Validate 方法和错误处理
如前所述,可以在 struts-config.xml 中禁用操作和验证。 Action 中央控制器将确保不进行验证。 
 
 
<action
path="/login"
type="com.test.LoginAction"
name="LoginForm"
scope="request"
validate="true"
input="/pages/Login.jsp"/>
 
 
Validate 方法返回 ActionErrors 对象。这些对象充当错误信息的容器。如果验证失败,将把这些对象返还给调用 JSP ,它可以处理对象以显示它们。
 
排除消息资源故障
消息资源帮助开发人员在一个集中位置存储标签、错误信息等内容,简化了后续阶段的维护工作。该集中位置是一个属性文件,存储在应用程序的类路径中,因此组件可以方便地访问。
以下是为 Struts 应用程序定义消息资源的两种方法:
  • web.xml 
  • struts-config.xml
对于 web.xml 将属性文件定义为 ActionServlet param-value 。下面是一个简短的示例:
 
<servlet>
<servlet-name>action</servlet -name>
<servlet-class>
    org.apache.struts.action .ActionServlet
</servlet-class>
<init-param>
<param-name>
    application
</param-name>
<param-value>
   beatest.ApplicationResources
</param-value>
</init-param>
</servlet>
 
请注意, param-name 应用程序和值表示为 beatest.ApplicationResources 这表示在应用程序类路径的包 beatest 内一定存在一个名为 ApplicationResources.properties 的属性文件。
Struts 1.1 中,可以在 struts-config.xml 中定义资源包。
<message-resources parameter="beatest.ApplicationResources"/>
此处的参数为必需值,它引用类路径 beatest 包中的 ApplicationResources.properties 文件。使用 Struts 1.1 时可以有多个资源包,这使开发人员还能够对资源包进行组织。例如,可以有这样的包:
<message-resources key=”errorBundle”  parameter="beatest.ApplicationErrors"/>
<message-resources key=”labelsBundle”  parameter="beatest.ApplicationLabels"/>
可以在应用程序中对它们进行适当设置。如果用户想要为 HTML 显示标签,则可以使用 labelsBundle
<bean:message bundle="lablesBundle" key="some.message.key"/>
而如果想要显示错误信息,则可以使用 errorBundle
<bean:message bundle="errorBundle" key="some.error.message"/>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值