PackageProvider 用于将struts xml中的package元素转成PackageConfig对象。
由DefaultConfiguration 调用PackageProvider.loadPackages()方法,生成多个PackageConfig对象。
由DefaultConfiguration 对PackageConfig对象处理生成RuntimeConfiguration。
RuntimeConfiguration在struts处理请求流程中被使用,struts解析请求的url而生成namesapce 和 actionName,从RuntimeConfiguration就可以获取对应Action的配置信息ActionConfig.
strus中 xml的配置元素:
<struts> <!--用于对bean的定义,置于Contatiner中--> <bean type="类型" name="实现类名称(为空则取默认值default)" class="实现类全路径" static="true/false(是否只是静态注入)" scope="default|request|session|singleton|thread"/> <constant name="param1" value="value1"> <!--用于对bean参数的配置Contatiner中,可以代替properties文件--> <package name="包名" namespace="/ 或 /xxx 或 /xxx/yyy " extends="struts-default(多个用逗号分隔,自动继承)" abstract="true/false (true:被子类扩展时才能被使用)" strict-method-invocation=""> <result-types> <result-type name="结果类型名称" class="结果类型实现类" default="是否为默认的"> <param name="param1">value1</param> </result-type> </result-types> <interceptors> <interceptor name="栏截器名称" class="栏截器实现类" > <param name="param1">value1</param> </interceptor> </interceptors> <interceptor-stack name="栏截器堆栈名称"> <interceptor-ref name="栏截器名称1|栏截器堆栈名称1"> <param name="param1">value1</param> </interceptor-ref> <interceptor-ref name="栏截器名称2|栏截器堆栈名称2"> <interceptor-ref name="栏截器名称3||栏截器堆栈名称3"> </interceptor-stack> <interceptor-stack name=""> 。。。。。。 </interceptor-stack> <default-interceptor-ref name="栏截器名称|栏截器堆栈名称"> <default-class-ref class=""/> <global-results> <result name="ACTION的返回值(不设置默认取success)" type="结果类型名称(如果为空则取本包或父包中result-type.default=true的)"> [<param name="param1">value1</param>|value值(需要result-type.class类中有DEFAULT_PARAM = 默认参数名,来对应value值) ] </result> </global-results> <global-exception-mappings> <exception-mapping name ="为空取result属性" exception="java.lang.Exception" result="对应global-results.result.name"> <param name="param1">value1</param> </exception-mapping> </global-exception-mappings> <action name="支持通配符 (如[*!*|*_*|User_*]),在method 或result中可以使用{1}或{2}表示第一个或第二个通配符值" class="如果未配置则取default-class" method="未定义则从url中获取,未取到则使用execute"> <result name="ACTION的返回值(不设置默认取success)" type="结果类型名称(如果为空则取result-type.default=true的)"> [<param name="param1">value1</param>|value值(需要result-type.class类中有DEFAULT_PARAM = 默认参数名,来对应value值) ] </result> <!--本pagckage 和父package 中的global-results中的result 自动被添加进来 --> <exception-mapping name ="为空取result属性" exception="java.lang.Exception" result="对应action-results.result.name 或 global-results.result.name"> <param name="param1">value1</param> </exception-mapping> <!--本pagckage 和父package 中的global-exception-mappings中的exception-mapping 自动被添加进来--> <interceptor-ref name="栏截器名称1"> <param name="param1">value1</param>(用于覆盖“栏截器名称1”定义时的参数) <interceptor-ref name="栏截器堆栈名称1"> <param name="堆栈内栏截器名称1.param1">value1</param>(用于覆盖(栏截器堆栈名称1中某个栏截器)定义时的参数) </interceptor-ref> <!--如果未定义interceptor,则从本包中取默认的拦截器,没有默认则到父包中找--> <allowed-methods> 允许的方法名,多个方法名用逗号分隔 </allowed-methods> </action> <default-action-ref name="name"> </package> </struts>