您的位置:首页 > 编程语言 > Java开发

理解 Struts 配置文件

2006-09-01 15:51 411 查看
 

[align=left]理解 Struts 配置文件
通过一个基于 XML 的配置文件来记录和控制 Struts 配置。缺省情况下,该文件的名称是struts-config.xml,位于 Web 应用程序的WEB-INF 目录中。Struts 有一个中央控制器 Servlet (org.apache.struts.action.ActionServlet),首次加载 Struts 应用程序时,它会对该配置文件进行分析。 [/align]
[align=left]该配置文件包含 Action 类与 Form 类的映射。映射为应用程序提供页面流。因此,配置文件的两个重要部分是<form-beans>和<action-mappings>。[/align]
下面是一个示例form-bean:

[align=left]<form-beans>

<form-bean
name="LoginForm"
type="com.test.LoginForm"/>

</form-beans>[/align]
[align=center] [/align]

对应的action-mapping是这样的:

[align=left]<action-mappings>

<action
path="/login"
type="com.test.LoginAction"
name="LoginForm"
scope="request"
validate="true"
input="/pages/Login.jsp"/>

</action-mappings>[/align]
[align=center] [/align]

[align=left]合并后的应用程序流是这样的:[/align]
[align=left]如果Struts 配置文件中提供的配置详细信息正确,Struts 控制器会对该应用程序流实施控制。如果提供的路径不正确或未在类加载器中找到 Form Bean 或 Action Bean,控制器将返回运行时错误。[/align]
[align=left][/align]
[align=center] [/align]

[align=left]Struts Form Bean[/align]
[align=left]那么,准确地讲什么是 Form Bean 呢?Form Bean 是一种 Java Bean,广泛用于映射 HTML 表单与相应的 Java Bean。Form Bean 的编码和使用都很简单。在使用 Form Bean 时,需要密切注意以下几点:[/align]
1.       Form Bean 映射到的是 HTML 表单上的元素或控件。例如,如果 HTML 表单包含名为 name 的字段,Form Bean 就会包含名为 name 的属性。
[align=left]2.       在映射到 HTML 控件的 Form Bean 中定义的每个属性都必须有与之对应的赋值方法和取值方法。例如,该属性有两个方法:setName()和getName()。 [/align]
[align=left]3.       Form Bean 还包含一个名为validate()的方法。可以使用 validate 方法验证表单项,如果验证失败,则填充actionErrors对象,并将控制权返还给调用页面,随后调用页面会显示这些错误。下一小节将对验证和错误处理做更多介绍。[/align]
[align=left][/align]
[align=left]Action[/align]
[align=left]Action 类主要用于处理来自视图的数据和对该数据执行任何业务操作。Action 类是org.apache.struts.action.Action(其实就是一个HttpServlet)的扩展。因此实际上是在执行 Servlet。 [/align]
[align=left]这些 action 类与 Servlet 不同,它们不是在web.xml中注册,而是映射到 Struts 配置文件中的 action 表单。其类似于以下代码:[/align]
[align=center] [/align]

[align=left]<action
path="/login"
type="com.test.LoginAction"
name="LoginForm"
scope="request"
validate="true"
input="/pages/Login.jsp"/>[/align]
[align=left] [/align]
[align=center] [/align]

[align=left]可以使用其中的 path 属性"/login"调用 Servlet。[/align]
[align=left]Action 类定义需要先行覆盖,才能执行任何任务的 execute 方法。Execute 方法有权访问对应视图的actionForm Bean、对整个 Struts 配置的引用、HttpServletRequest对象及HttpServletResponse对象。这使 execute 方法能够对 HttpSession 对象、HttpSelvletRequest 对象及HttpServletResponse对象执行操作。[/align]
[align=center] [/align]

[align=left] [/align]
[align=left]public ActionForward execute(ActionMapping mapping,
                                                        ActionForm form, 
                                                       HttpServletRequest request, 
                                                       HttpServletResponse response)[/align]
[align=left] [/align]
[align=center] [/align]

[align=left]备注:在 Struts 1.0 中,该方法的名称是perform()。Struts 1.1 已不支持该方法。[/align]
[align=left]Action 类返回ActionForward对象。此ActionForward对象确定需要将请求发送到的正确视图。还会在 Struts 配置文件中注册需要将控制权转交给的正确视图。 [/align]
[align=left]在上例中,假定在登录失败时需要将控制权传递给error.jsp,在登录成功时需要将控制权传递给nextPage.jsp。Forward 标记的注册方式如下:[/align]
[align=center] [/align]

[align=left] [/align]
[align=left]<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>
[/align]
[align=left] [/align]
[align=center] [/align]

[align=left]Execute 方法通常以下列语句作为结束语句。[/align]
[align=left]return (mapping.findForward("failure"));[/align]
[align=left]其中的 mapping 指的是ActionMapping对象。已定义了特定 action 的 "failure" 路径。因此以上语句实际执行的操作是将请求发送给error.jsp。  [/align]
[align=left]以上示例中的<forward>标记具有局部作用域,可以在定义时所针对的 action 内使用。但也可以定义全局 forward。全局 forward 也在 Struts 配置文件中定义,这与任何其它配置信息是一样的。正如定义全局变量那样,全局 forward 可以在应用程序中的任何地方使用。 [/align]
[align=center] [/align]

[align=left] [/align]
[align=left]<global-forwards>
<forward
name="welcome"
path="/Welcome.jsp"/>
</global-forwards>[/align]
[align=left] [/align]
[align=center] [/align]

[align=left]因此,可以在应用程序中的任何地方使用mapping.findForward("welcome"),而它始终会将控制权转交给Welcome.jsp。[/align]
[align=left][/align]
[align=center] [/align]

[align=left]Validate 方法和错误处理
如前所述,可以在struts-config.xml中禁用操作和验证。Action 中央控制器将确保不进行验证。 [/align]
[align=center] [/align]

[align=left] [/align]
[align=left]<action
path="/login"
type="com.test.LoginAction"
name="LoginForm"
scope="request"
validate="true"
input="/pages/Login.jsp"/>[/align]
[align=left] [/align]
[align=center] [/align]

[align=left]Validate 方法返回ActionErrors对象。这些对象充当错误信息的容器。如果验证失败,将把这些对象返还给调用 JSP,它可以处理对象以显示它们。[/align]
[align=left][/align]
[align=center] [/align]

[align=left]排除消息资源故障
消息资源帮助开发人员在一个集中位置存储标签、错误信息等内容,简化了后续阶段的维护工作。该集中位置是一个属性文件,存储在应用程序的类路径中,因此组件可以方便地访问。[/align]
[align=left]以下是为 Struts 应用程序定义消息资源的两种方法:[/align]
web.xml 

struts-config.xml

[align=left]对于web.xml,将属性文件定义为ActionServlet的 param-value。下面是一个简短的示例:[/align]
[align=center] [/align]

[align=left]<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> [/align]
[align=center] [/align]

[align=left]请注意,param-name 应用程序和值表示为beatest.ApplicationResources这表示在应用程序类路径的包 beatest 内一定存在一个名为ApplicationResources.properties的属性文件。[/align]
[align=left]在 Struts 1.1 中,可以在struts-config.xml中定义资源包。[/align]
[align=left]<message-resources parameter="beatest.ApplicationResources"/>[/align]
[align=left]此处的参数为必需值,它引用类路径 beatest 包中的ApplicationResources.properties文件。使用 Struts 1.1 时可以有多个资源包,这使开发人员还能够对资源包进行组织。例如,可以有这样的包:[/align]
[align=left]<message-resources key=”errorBundle”  parameter="beatest.ApplicationErrors"/>[/align]
[align=left]和[/align]
[align=left]<message-resources key=”labelsBundle”  parameter="beatest.ApplicationLabels"/>[/align]
[align=left]可以在应用程序中对它们进行适当设置。如果用户想要为 HTML 显示标签,则可以使用labelsBundle。[/align]
[align=left]<bean:message bundle="lablesBundle" key="some.message.key"/>[/align]
[align=left]而如果想要显示错误信息,则可以使用 errorBundle。[/align]
[align=left]<bean:message bundle="errorBundle" key="some.error.message"/>[/align]
[align=left][/align]
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息