struts-config.xml常用配置详解(转)

以下是一份完整的struts-config.xml文件,配置元素的说明详见注释.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config.dtd">
<!-- struts-config.xml中的元素必须按照上述doc指令中的dtd文档定义顺序书写,本例即遵从了dtd定义顺序 -->
<!-- struts-config是整个xml的根元素,其他元素必须被包含其内 -->
<struts-config>
<!--
   名称:data-sources
   描述:data-sources元素定义了web App所需要使用的数据源
   数量:最多一个
   子元素:data-source
-->
<data-sources>
   <!--
    名称:data-source
    描述:data-source元素定义了具体的数据源
    数量:任意多个
    属性:
     @key:当需要配置多个数据源时,相当于数据源的名称,用来数据源彼此间进行区别
     @type:可以使用的数据源实现的类,一般来自如下四个库
      Poolman,开放源代码软件
      Expresso,Jcorporate
      JDBC Pool,开放源代码软件
      DBCP,Jakarta
   -->
   <data-source key="firstOne" type="org.apache.commons.dbcp.BasicDataSource">
    <!--
     名称:set-property
     描述:用来设定数据源的属性
     属性:
      @autoCommit:是否自动提交 可选值:true/false
      @description:数据源描述
      @driverClass:数据源使用的类
      @maxCount:最大数据源连接数
      @minCount:最小数据源连接数
      @user:数据库用户
      @password:数据库密码
      @url:数据库url
    -->
    <set-property property="autoCommit" value="true"/>
    <set-property property="description" value="Hello!"/>
    <set-property property="driverClass" value="com.mysql.jdbc.Driver"/>
    <set-property property="maxCount" value="10"/>
    <set-property property="minCount" value="2"/>
    <set-property property="user" value="root"/>
    <set-property property="password" value=""/>
    <set-property property="url" value="jdbc:mysql://localhost:3306/helloAdmin"/>
   </data-source>
</data-sources>

<!--
   名称:form-beans
   描述:用来配置多个ActionForm Bean
   数量:最多一个
   子元素:form-bean
-->
<form-beans>
   <!--
    名称:form-bean
    描述:用来配置ActionForm Bean
    数量:任意多个
    子元素:form-property
    属性:
     @className:指定与form-bean元素相对应的配置类,一般默认使用org.apaceh.struts.config.FormBeanConfig,如果自定义,则必须继承 FormBeanConfig
     @name:必备属性!为当前form-bean制定一个全局唯一的标识符,使得在整个Struts框架内,可以通过该标识符来引用这个ActionForm Bean。
     @type:必备属性!指明实现当前ActionForm Bean的完整类名。
   -->
   <form-bean name="Hello" type="myPack.Hello">
    <!--
     名称:form-property
     描述:用来设定ActionForm Bean的属性
     数量:根据实际需求而定,例如,ActionForm Bean对应的一个登陆Form中有两个文本框,name和password,ActionForm Bean中也有这两个字段,则此处编写两个form-property来设定属性
     属性:
      @className:指定与form-property相对应的配置类,默认是org.apache.struts.config.FormPropertyConfig,如果自定义,则必须继承FormPropertyConfig类
      @name:所要设定的ActionForm Bean的属性名称
      @type:所要设定的ActionForm Bean的属性值的类
      @initial:当前属性的初值
    -->
    <form-property name="name" type="java.lang.String"/>
    <form-property name="number" type="java.lang.Iteger" initial="18"/>
   </form-bean>
</form-beans>

<!--
   名称:global-exceptions
   描述:处理异常
   数量:最多一个
   子元素:exception
-->
<global-exceptions>
   <!--
    名称:exception
    描述:具体定义一个异常及其处理
    数量:任意多个
    属性:
     @className:指定对应exception的配置类,默认为org.apache.struts.config.ExceptionConfig
     @handler:指定异常处理类,默认为org.apache.struts.action.ExceptionHandler
     @key:指定在Resource Bundle种描述该异常的消息key
     @path:指定当发生异常时,进行转发的路径
     @scope:指定ActionMessage实例存放的范围,默认为request,另外一个可选值是session
     @type:必须要有!指定所需要处理异常类的名字。
     @bundle:指定资源绑定
   -->
   <exception
    key=""hello.error
    path="/error.jsp"
    scope="session"
    type="hello.HandleError"/>
</global-exceptions>

<!--
   名称:global-forwards
   描述:定义全局转发
   数量:最多一个
   子元素:forward
-->
<global-forwards>
   <!--
    名称:forward
    描述:定义一个具体的转发
    数量:任意多个
    属性:
     @className:指定和forward元素对应的配置类,默认为org.apache.struts.action.ActionForward
     @contextRelative:如果为true,则指明使用当前上下文,路径以“/”开头,默认为false
     @name:必须配有!指明转发路径的唯一标识符
     @path:必须配有!指明转发或者重定向的URI。必须以"/"开头。具体配置要与contextRelative相应。
     @redirect:为true时,执行重定向操作,否则执行请求转发。默认为false
   -->
   <forward name="A" path="/a.jsp"/>
   <forward name="B" path="/hello/b.do"/>
</global-forwards>

<!--
   名称:action-mappings
   描述:定义action集合
   数量:最多一个
   子元素:action
-->
<action-mappings>
   <!--
    名称:action
    描述:定义了从特定的请求路径到相应的Action类的映射
    数量:任意多个
    子元素:exception,forward(二者均为局部量)
    属性:
     @attribute:制定与当前Action相关联的ActionForm Bean在request和session范围内的名称(key)
     @className:与Action元素对应的配置类。默认为org.apache.struts.action.ActionMapping
     @forward:指名转发的URL路径
     @include:指名包含的URL路径
     @input:指名包含输入表单的URL路径,表单验证失败时,请求会被转发到该URL中
     @name:指定和当前Acion关联的ActionForm Bean的名字。该名称必须在form-bean元素中定义过。
     @path:指定访问Action的路径,以"/"开头,没有扩展名
     @parameter:为当前的Action配置参数,可以在Action的execute()方法中,通过调用ActionMapping的getParameter()方法来获取参数
     @roles:指定允许调用该Aciton的安全角色。多个角色之间用逗号分割。处理请求时,RequestProcessor会根据该配置项来决定用户是否有调用该Action的权限
     @scope:指定ActionForm Bean的存在范围,可选值为request和session。默认为session
     @type:指定Action类的完整类名
     @unknown:值为true时,表示可以处理用户发出的所有无效的Action URL。默认为false
     @validate:指定是否要先调用ActionForm Bean的validate()方法。默认为true
    注意:如上属性中,forward/include/type三者相斥,即三者在同一Action配置中只能存在一个。
   -->
   <action path="/search"
    type="addressbook.actions.SearchAction"
    name="searchForm"
    scope="request"
    validate="true"
    input="/search.jsp">
    <forward name="success" path="/display.jsp"/>
   </action>  
</action-mappings>

<!--
   名称:controller
   描述:用于配置ActionServlet
   数量:最多一个
   属性:
    @bufferSize:指定上传文件的输入缓冲的大小.默认为4096
    @className:指定当前控制器的配置类.默认为org.apache.struts.config.ControllerConfig
    @contentType:指定相应结果的内容类型和字符编码
    @locale:指定是否把Locale对象保存到当前用户的session中,默认为false
    @processorClass:指定负责处理请求的Java类的完整类名.默认org.apache.struts.action.RequestProcessor
    @tempDir:指定文件上传时的临时工作目录.如果没有设置,将才用Servlet容器为web应用分配的临时工作目录.
    @nochache:true时,在相应结果中加入特定的头参数:Pragma ,Cache-Control,Expires防止页面被存储在可数浏览器的缓存中,默认为false
-->
<controller 
   contentType="text/html;charset=UTF-8"
   locale="true"
   processorClass="CustomRequestProcessor">
</controller>
<!--
   名称:message-resources
   描述:配置Resource Bundle.
   数量:任意多个
   属性:
    @className:指定和message-resources对应的配置类.默认为org.apache.struts.config.MessageResourcesConfig
    @factory:指定资源的工厂类,默认为org.apache.struts.util.PropertyMessageResourcesFactory
    @key:
    @null:
    @parameter:
-->
<message-resources
   null="false"
   parameter="defaultResource"/>
<message-resources
   key="images"
   null="false"
   parameter="ImageResources"/>
  
<!--
   名称:plug-in
   描述:用于配置Struts的插件
   数量:任意多个
   子元素:set-property
   属性:
    @className:指定Struts插件类.此类必须实现org.apache.struts.action.PlugIn接口
-->
<plug-in
   className="org.apache.struts.validator.ValidatorPlugIn">
   <!--
    名称:set-property
    描述:配置插件的属性
    数量:任意多个
    属性:
     @property:插件的属性名称
     @value:该名称所配置的值
   -->
   <set-property 
    property="pathnames"
    value="/WEB-INF/validator-rules.xml,/WEB-INF/vlaidation.xml"/>
</plug-in>

</struts-config>

================================================

struts-config.xml是Struts的主要配置文件,在该文件中,可以配置数据源、form-bean、action和plug-in(插件)和资源文件的信息。其文件主要结构如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<data-sources>

<data-source>

</data-source>

</data-sources>

<form-beans>

<form-bean / >

</form-beans>

<global-forwards>

<forward / >

</global-forwards>

<action-mappings>

<action / >

</action-mappings>

<controller / >

<message-resources / >

<plug-in />
</struts-config>

       以上各元素必须是按照这个顺序的,若开发人员打乱顺序,很可能引起Struts容器启动时出错。

       当然struts-config.xml还有<display-name />、<description />和<icon />子元素,因为它们用得很少,在此不再赘述。只是讲述常用的子元素的配置。

1. data-sources

本节讲述子元素data-sources的配置,该元素可以配置一个或多个data-source元素,即数据源元素,可以通过<set-property>设置driverClass、url、user、password等属性。配置实例如下:

<data-source>

                            <!-- 所用的JDBC驱动类,必须-->

                            <set-property property="driverClass" value="com.mysql.jdbc.Driver"/>

                            <!-- 所用的JDBCURL,必须-->

                            <set-property property="url" value="jdbc:mysql://localhost/test"/>

                            <!-- 同时打开的最小连结数,缺省值为1,可选-->

                            <set-property property="minCount" value="1"/>

                            <!-- 同时打开的最大连结数,缺省值为2,可选-->

                            <set-property property="maxCount" value="5"/>

                            <!-- 连结到数据库的用户名,必须-->

                            <set-property property="user" value="root"/>

                            <!-- 连结到数据库的密码,必须-->

                            <set-property property="password" value="root"/>

                   </data-source>

开发人员还可以设置Key(绑定在ServletContext上的DataSource实例的索引键,若不设定则缺省为Action.DATA_SOURCE_KEY,如果在应用程序中有多于一个的DataSource,则必须设置Key的值)、Description(关于DataSource的描述信息)、ReadOnly(如果设为true,则表示该连结是只读的,缺省为false)、LoginTimeout(创建连结的最大允许时间,以秒为单位)和AutoCommit(如果为true,则每次execute之后会强制回滚。缺省为true)属性。

在实际项目中,例如在Hibernate + Struts构建的系统中,一般使用Hibernate的hibernate.cfg.xml文件来配置数据源的信息。而在Hibernate + Struts + Spring构建的系统中,一般使用spring的配置文件(eg. applicationContext.xml)来配置数据源的信息。

2. form-beans

子元素form-beans用来配置绑定到Action的各个FormBean的实例。每个FormBean实例用form-bans的子元素form-bean来定义。form-bean又分普通的FormBan和动态FormBean。

(1)普通form-bean

普通FormBean需要定义一个JavaBean类,在form-bean元素中指定该类。普通form-bean元素的定义格式如下:

<form-bean name="FormBean的名称" type="FormBean对应JavaBean类的全路径"/>

Eg. <form-bean name="UserForm"

              type="com.amigo.struts.form.user.UserForm" />

对应的FormBean类一般是继承ActionForm类,例如下面的例子定义了一个UserForm,它具有userName和password两个属性。该类的代码如下:

package com.amigo.struts.form.user;

import org.apache.struts.action.ActionForm;

public class UserForm extends ActionForm {

         private static final long serialVersionUID = 1L;

        

         /** 用户名.*/

         private String userName;

        

         /** 密码. */

         private String password;

         public String getPassword() {

                   return password;

         }

         public void setPassword(String password) {

                   this.password = password;

         }

         public String getUserName() {

                   return userName;

         }

         public void setUserName(String userName) {

                   this.userName = userName;

         }

}

(2)动态form-bean

       动态form-bean不需要定义对应的javabean类,其元素都在struts-config.xml中定义。其type为:org.apache.struts.validator.DynaValidatorForm。下面的动态FormBean定义了userName和password属性,配置如下:

<form-bean name="UserForm" type="org.apache.struts.validator.DynaValidatorForm">

             <form-property name="userName" type="java.lang.String"/>

             <form-property name="password" type="java.lang.String"/>

</form-bean>

3 global-forwards

       global-forwards用于配置全局转发,struts首先会在<action-mappings>元素中找对应的<forward>,若找不到,则到全局转发配置中找。它包含0个或多个<forward/>元素,格式如下所示:

<forward name="唯一的名称" path="指向资源的相对路径"/>

Eg.

<global-forwards>

                   <forward name="failed" path="/error.jsp" />

                   <forward name="success" path="/ success.jsp" />

</global-forwards>

<forward/>元素还有一个redirect属性,其默认值为false,如果redirect设为true的时候,则用HttpServletResponse.sendRedirect()方法,否则用RequestDispatcher.forward()方法,缺省为false。

4 action-mappings

       该元素用于将Action元素定义到ActionServlet类中,它含有0到多个<action/>元素,其格式如下:

<action-mappings>

<action path="Action请求的相对路径"

type="Action的对应类的全路径"

name="Action绑定的FormBean"

<forward name="指定处理相应请求所对应的地址" path="相对路径"/>

</action>

</action-mappings>

       每个action子元素可包含一个或多个forward子元素。除了path、type和name属性外,action还具有如下属性:

l         scope:指定ActionForm Bean的作用域(session和request),缺省为session。(可选);

l         input:当Bean发生错误时返回的路径(可选);

l         classname:指定一个调用这个Action类的ActionMapping类的全名。缺省用org.apache.struts.action.ActionMapping(可选);

l         include:如果没有forward的时候,它起forward的作用(可选);

l         validate:若为true,则会调用ActionForm的validate()方法,否则不调用,缺省为true(可选)。

forward属性也是可选的。

action元素定义举例如下:

Eg1.

<action-mappings>

<action

 path="/userAction"

 type="com.amigo.struts.action.UserAction"

 name="UserForm"

 scope="request"

 validate = "false"

 parameter="method" >

             <forward name="error" path="/user/error.jsp" />

         <forward name="success" path="/user/success.jsp"/>

                   <forward name="add" path="/user/addUser.jsp"/>

                   <forward name="update" path="/user/updateUser.jsp"/>

                   <forward name="list" path="/user/userList.jsp"/>

</action>

</action-mappings>

Eg2. 有input属性的例子:

<action-mappings>

<action path="/calcAction"

type="com.amigo.struts.action.CalcAction"

name="CalcForm"

scope="request"

validate="true"

input="/index.jsp">

<forward name="success" path="/success.jsp"/>
<forward name="error" path="/error.jsp"/>

</action>

</action-mappings>

Eg3. 仅有JSP的action元素:

<action path="/menu"

parameter="/default.jsp"

type="org.apache.struts.actions.ForwardAction" />

首先,ActionServlet接到请求后调用ForwardAction的execute()方法,execute()根据配置的parameter属性值来forward到那个URI。

这样做的效果是:没有任何form被实例化,比较现实的情形可能是form在request更高级别的范围中定义;或者这个action被用作在应用程序编译好后充当系统参数,只需要更改这个配置文件而不需要重新编译系统。

5. message-resources

       该元素用来定义资源文件,格式如下:

<message-resources parameter="给定资源文件的全名"

classname="定义处理消息资源的类名的全名"

factory="定义MessageResourcesFactory类的全名"

key="定义绑定在这个资源包中的ServletContext的属性主键"

null=" 如果为true,则找不到消息key时,则返回null "/>

       message-resources的各属性中,只有parameter是必选的,其余都为可选,classname属性默认为:org.apache.struts.config.MessageResourcesConfig,factory属性默认为:org.apache.struts.util.property.MessageResourcesFacotry,key属性默认为:Action.MESSAGES_KEY,null属性默认为:true。

       举例如下,在struts配置文件中添加如下信息:

Eg1. <message-resources parameter="ApplicationResources" />

Eg2. <message-resources

 parameter="com.amigo.struts. ApplicationResources "

null="false"/>

6. plug-in

       该元素用于定义插件,可定义0到多个插件元素,最常见的plug-in为Struts的验证的插件,配置举例如下:

Eg1. Struts的验证的plug-in:

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">

         <set-property property="pathnames"

                   value="/WEB-INF/validator-rules.xml, /WEB-INF/manager/validation.xml" />

         <set-property property="stopOnFirstError" value="false" />

</plug-in>

Eg2. Spring提供的载入插件配置:

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

<set-property property="contextConfigLocation"

              value="/WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml"/>

 </plug-in>

7. 完整配置实例

       本小节举例说明struts-config.xml文件的配置:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

 <data-sources />

 <form-beans>

    <form-bean name="UserForm"

                   type="com.amigo.struts.form.user.UserForm" />

 </form-beans>

 

 <global-exceptions />

 <global-forwards />

 <action-mappings>

<action

                path="/userAction"

                type="com.amigo.struts.action.UserAction"

                name="UserForm"

                scope="request"

                validate = "false"

                parameter="method" >

             <forward name="error" path="/user/error.jsp" />

                  <forward name="success" path="/user/success.jsp"/>

                   <forward name="add" path="/user/addUser.jsp"/>

                   <forward name="update" path="/user/updateUser.jsp"/>

                   <forward name="list" path="/user/userList.jsp"/>

</action>

</action-mappings>

<message-resources parameter="com.amigo.struts. ApplicationResources " />

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">

<set-property property="pathnames"

value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>

<set-property property="stopOnFirstError" value="false" /> 

</plug-in>

</struts-config>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值