struts-config.xml的配置

时间:2022-09-09 21:26:56

1、<struts-config>  元素

<struts-cofnig> 元素是 Struts 配置文件的根元素。<struts-config> 元素有 8 个子元素。在 Struts 配置文件中,必须按照它的 DTD 指定的先后顺序来配置 <struts-config> 元素的各个子元素,如果颠倒了这些子元素在配置文件中的顺序,在 Struts 应用启动时就会生成 XML 解析错误。
    它的DTD定义如下:

1
2
3
<!ELEMENT struts-config(
data-sources?,form-beans?,global-exception?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)
)>

配置时要按照上面的顺序。

2、 <form-beans> 元素

<form-beans> 元素用来配置多个 ActionForm Bean 。 <form-beans> 元素包含零个或多个 <form-bean> 子元素。每个 <form-bean> 元素又包含多个属性。
<form-bean> 元素的属性
    属性 描述
  className 指定和 <form-bean> 元素对应的配置类,默认值为 org.apache.struts.config.FormBeanConfig 。如果在这里设置自定义的类,该类必须扩展 FormBeanConfig 类
name 指定该 ActionForm Bean 的唯一标识符,整个 Struts 框架用该标识符来引用这个 bean 。该属性是必需的。
type 指定 ActionForm 类的完整类名(类的包名也包含在内),该属性是必需的
1
2
3
<form-beans >
    <form-bean name="HelloForm" type="com.yourcompany.struts.form.HelloForm" />
</form-beans>

如果配置动态 ActionForm Bean ,还必须配置 <form-bean> 元素的 <form-property> 子元素。 <form-property> 元素用来指定表单字段,它有四个属性。

<form-property> 元素的属性
属性 描述
className 指定和 <form-property> 元素对应的配置类,默认值为 org.apache.struts.config.FormPropertyConfig
initial 以字符串的形式设置表单字段的初始值。如果没有设置该属性,则基本类型的表单字段的默认值为 0 ,对象类型的表单字段的默认值为 null
name 指定表单字段的名字。该属性是必需的
type 指定表单字段的类型。如果表单资源为 Java 类,必须给出完整的类名。该属性是必需的。
1
2
3
4
5
6
7
8
<form-beans >
   <form-bean name="HelloForm" type="com.yourcompany.struts.form.HelloForm" />
   <form-bean name="userForm" type="org.apache.struts.DynaActionForm">
   <form-property name="firstName" type="java.long.String"></form-property>
   <form-property name="lastName" type="java.long.String"></form-property>
   <form-property name="age" type="java.lang.Integer" initial="18"></form-property>
   </form-bean>
 </form-beans>

3、<global-exceptions> 元素

<global-exceptions> 元素用于配置异常处理。 <global-exceptions> 元素可以包含零个或者多个 <exception> 元素。 <exception> 元素用来设置 Java 异常和异常处理类 org.apache.struts.action.ExceptionHandler 之间的映射。
<exception> 元素的属性
属性 描述
className       指定和 <exception> 元素对应的配置类。默认值为 org.apache.struts.config.ExceptionConfig
handler 指定异常处理类。默认值为 org.apache.struts.action.ExceptionHandler
key 指定在 Resource Bundle 中描述该异常的消息 key
path 指定当异常发生时的转发路径
scope 指定 ActionMessages 实例的存放范围,可选值包括 request 和 session ,此项的默认值为 request
type 指定所需处理的异常类的名字。此项是必需的
bundle 指定 Resource Bundle
1
2
3
4
5
6
7
8
<strong><global-exception>
 <exception
   key="global.error.invalidlogin"
   path="/security/signin.jsp"
   scope="request"
   type="netstore.framework.exception.InvalidLoginException"
 />
</global-exception>   </strong>

4、 <global-forwards> 元素

    <global-forwards> 元素用来声明全局的转发关系。 <global-forwards> 元素由零个或者多个 <forward> 元素组成。 <forward> 元素用于把一个逻辑名映射到特定的 URL 。通过这种方式, Action 类或者 JSP 文件无需要指定实际的 URL ,只要指定逻辑名就能实现请求转发或者重定向,这可是减弱控制组件和视图组件之间的耦合,并且有助于维护 JSP 文件。
    <forward> 元素的属性
属性 描述
className 和 <forward> 元素对应的配置类,默认值为 org.apache.struts.action.ActionForard
contextRelative 如果此项为 true ,表示当 path 属性以“ / ”开头时,给出的是相对于当前上下文的 URL 。此项的默认值为 false
name 转发路径的逻辑名。此项是必需的
path 指定转发或重定向的 URL 。此项是必需的,必需以“ / ”开头。当 contextRelative 属性为 false 时,表示 URL 路径相对于当前应用 (application-relative) ;当 contextRelative 属性为 true 时,表示 URL 路径相对于当前上下文 (context-relative)
redirect 当此项为 true 时,表示执行重定向操作;当此项为 false 时,表示执行请求转发操作。此项默认值为 false

例如:

1
2
3
4
<global-forwards>
    <forward name="forward1" path="/Action1.do"></forward>
    <forward name="forward2" path="/JSP2.jsp"></forward>
</global-forwards><span style="font-family:SimSun;"> </span>

如果JSP1.jsp把请求转发给Action1可以<html:link forward="forward1">/或者 <logic:forward name="forward1"/>
如果Action1的excecute()方法把请求转发给JSP2.jsp的话可以这样:return(mapping.findForward("forward2"));

5、<action-mappings> 元素

    <action-mappings> 元素包含零个或者多个 <action> 元素。 <action> 元素描述了从特定的请求路径到相应的 Action 类的映射。
    在 <action> 元素中可以包含多个 <exception> 和 <forward> 子元素,他们分别配置局部的异常处理及请求转发仅被当前的 Action 所访问。
    在 <global-exceptions> 元素中定义的 <exception> 子元素代表全局的异常配置。在 <global-forwards> 元素中定义的 <forward> 子元素代表全局的请求转发。在不同位置配置 <exception> 和 <forward> 元素的语法和属性是一样的。
<action> 元素的属性
属性 描述
attribute 设置和 Action 关联的 ActionForm Bean 在 request 或 session 范围内的属性 key 。例如,假定 Form Bean 存在于 request 范围内,并且此项为“ myBean ”,那么 request.getAttribute(“MyBean”) 就可以返回该 Bean 的实例。此项为可选项。
className 和 <action> 元素对应的配置元素。默认值为 org.apache.struts.action.ActionMapping
forward 指定转发的 URL 路径
include 指定包含的 URL 路径
input 指定包含输入表单的 URL 路径。当表单验证失败时,将把请求转发到该 URL
name 指定和该 Action 关联的 ActionForm Bean 的名字。该名字必需在 <form-bean> 元素中定义过。此项是可选项
path 指定访问 Action 的路径,它以“ / ”开头,没有扩展名
parameter 指定 Action 的配置参数。在 Action 类的 execute() 方法中,可以调用 ActionMapping 对象的 getParameter() 方法来读取该配置参数
roles 指定允许调用该 Action 的安全角色。多个角色之间以逗号隔开。在处理请求时, RequestProcessor 会根据该配置项来决定用户是否有调用 Action 的权限
scope 指定 ActionForm Bean 的存在范围,可选值为 request 和 session 。默认值为 session
type 指定 Action 类的完整类名
unknown 如果此项为 true ,表示可以处理用户发出的所有无效的 Action URL 。默认值为 false
validate 指定是否要先调用 ActionForm Bean 的 validate() 方法。默认值为 true

提示: <action> 元素的 forward 、 include 和 type 属性相互排斥,也就是说只能设置其中的一项。 forward 属性的作用和 org.apache.struts.actions.ForwardAction 类相同。 Include 属性的作用和 org.apache.struts.actions.IncludeAction 类相同。 
    如果在 <action> 元素中定义了局部的 <forward> 元素,它的优先级别高于全局的 <forward> 元素。

<Action> 的 forward 属性和 <forward> 子元素是两个不同的概念。 Forward 属性指定和 path 属性匹配的请求转发路径。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<action-mappings >
  <!-- input 验证失败时的转发路径 -->
  <!-- path请求访问的Action的路径 -->
  <!-- <forward>定义请求转发的路径 -->
  <!--   path指明调用者(JSP)能通过中心控制器ActionServlet找到该Action  -->
    <action
         path="/HelloWorld"
         type="com.yourcompany.struts.action.HelloAction"
         name="HelloForm"
         scope="request"
         validate="true" 
         input="/hello.jsp">
      <forward name="SayHello" path="/hello.jsp" />
    </action>
</action-mapping>

工作原理:
            这段代码表明,如果用户的请求的URI为"HelloWord.do",那么Struts框架会把请求转发给Hello.Action;与HelloAction关联的表单为:HelloForm,它位于request范围。Struts框架会首先在配置文件中检索匹配的<form-bean>元素:

1
2
3
<form-beans >
    <form-bean name="HelloForm" type="com.yourcompany.struts.form.HelloForm" />
</form-beans>

再把请求转发给HelloAction之前,先会调用HelloForm的validate()方法,如果表单验证失败则把请求转发给<action>元素的 
input属性指定的hello.jsp文件。

对应的hello.jsp文件如下:

1
2
3
4
5
6
<html:form action="/HelloWorld.do" focus="userName">
<bean:message key="hello.jsp.promt.person"/>
<html:text property="userName" maxlength="16" size="16"></html:text>
<html:submit property="submit" value="Submit"></html:submit>
<html:reset></html:reset>
</html:form>

6、<controller> 元素

    <controller> 元素用于配置 ActionServlet 。
<controller> 元素的属性
属性 描述
bufferSize 指定上载文件的输入缓冲的大小。该属性为可选项,默认值为 4096 。
className 指定和 <controller> 元素对应的配置类。默认值为 org.apache.struts.config.ControllerConfig 。
contentType 指定响应结果的内容类型和字符编码。该属性为可选项,默认值为 text/html 。如果在 Action 和 JSP 网页中也设置了内容类型和字符编码,将会覆盖该设置
locale 指定是否把 Locale 对象保存到当前用户的 Session 中。默认值为 false
processorClass 指定负责处理请求的 Java 类的完整类名。默认值为 org.apache.struts.action.RequestProcessor 。如果把此项设置为自定义的类,那么应该保持该类扩展了 org.apache.struts.action.RequestProcessor 类
tempDir 指定处理文件上传的临时目录。如果此项没有设置,将采用 Servlet 容器为 Web 应用分配的临时工作目录
nochache 如果为 true ,在响应结果中将加入特定的头参数: Pragma , Cache-Control 和 Expires ,防止页面被存储在客户浏览器的缓存中。默认值为 false

如果应用包含多个子应用,可以在每个子应用的 Struts 配置文件中配置 <controller> 元素。这样,尽管这些子应用共享同一个 ActionServlet 对象,但是它们可以使用不同的 RequestProcessor 类。

1
2
3
4
<controller contentType="tex/html";charset="UTF-8"
  locale="true"
  processClass="CustomRequestProcessor"
/>

7、 <message-resources> 元素

    <message-resources> 元素用来配置 Resource Bundle , Resource Bundle 用于存放本地化消息文本。
    <message-resources> 元素的属性
属性 描述
className 和 <message-resources> 元素对应的配置类。默认值为 org.apache.struts.config.MessageResourcesConfig
factory 指定消息资源的工厂类。默认值为 org.apache.struts.util.PropertyMessageResourcesFactory 类
key 指定 Resource Bundle 存放在 ServletContext 对象中时采用的属性 key 。默认值为由 Globals.MESSAGES_KEY 定义的字符串常量。只允许有一个 Resource Bundle 采用默认的属性 key
null 指定 MessageResources 类如何处理未知的消息 key 。如果此项为 true ,将返回空字符串。如果此项为 false ,将返回类似“ ???global.label.missing??? ”的字符串。该属性为可选项,默认值为 true
parameter 指定 Resource Bundle 的消息资源文件名。

许多 Struts 客户化标签都通过 bundle 属性来指定 Resource Bundle ,标签的 bundle 属性和 <message-resources> 元素的 key 属性匹配。

如:<bean:message key="hello.jsp.page.hello"/>调用
           <bean:message key="hello.jsp.page.hello" bundle="images">指定bundle

<message-resources parameter="com.yourcompany.struts.ApplicationResources1" />配置
           <message-resources parameter="com.yourcompany.struts.ApplicationResources2" key="images" />配置
             hello.jsp.page.hello=Hello com.yourcompany.struts.ApplicationResources1.2定义

 10  <plug-in> 元素

<plug-in> 元素用于配置 Struts 插件。<plug-in> 元素的属性

属性 描述
className 指定 Struts 插件类。插件类必需实现 org.apache.struts.action.PlugIn 接口
1
2
3
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>

11 配置多应用模块

    Struts 1.1 支持多应用模块,即同一个应用包含多个子应用,每个子应用可以处理相关的一组功能。 所有的子应用都共享同一个 ActionServlet 实例,但每个子应用都有单独的配置文件。把应用划分成多个子应用模块包含一下步骤:
(1)  为每个子应用创建单独的 Struts 配置文件。
(2)   在 web.xml 的 ActionServlet 的配置代码中添加每个子应用信息。

(3)  采用 <forward> 元素或 SwitchAction 类来实现子应用之间的切换。 
例如:

1
2
3
4
5
6
7
8
<init-param>
      <param-name>config</param-name><!--参数名  -->
      <param-value>/WEB-INF/struts-config.xml</param-value><!--文件名  -->
</init-param>
<init-param>
    <param-name>config/application2</param-name>
    <param-value>/WEB-INF/struts-module2.xml</param-value>
</init-param>

第二个<init-param>的名字必须以"config/"开头。子模块之间的切换有两种方式: 
   1、使用<forward>元素,全局或者局部的。但是它的contexRelative的属性应该设置为true.如:

1
2
3
4
5
6
<forward name="toModule2"
  contexRelative="true"
  path="/module2/index.do"
  redirect="true"
>
</forward>

2.使用org.apcahe.struts.actions.SwitchAction类

1
2
3
4
5
<action-mapping>
 <action path="/toModule"
         type="org.apache.struts.actions.SwitchAction"
 />
</action-mapping>