Struts框架的核心配置文件就是struts.xml配置文件,该文件主要负责管理Struts 2框架的业务控制器Action。
在默认情况下,Struts 2框架将自动加载放在WEB-INF/classes路径下的struts.xml文件。在大部分应用里,随着应用规模的增加,系统中Action数量也大量增加,导致struts.xml
配置文件变得非常臃肿。
为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件
。
下面的struts.xml文件中就通过include手动导入了一个配置文件:struts-part1.xml文件,通过这种方式,就可以将Struts 2的Action按模块配置在多个配置文件中。
Struts2也给出了struts.xml文件的DTD(Document Type Definition,文档类型定义)。在Struts2的核心类库(struts2-core-2.0.11.jar)中有一个struts-2.0.dtd文件该文件就
上struts.xml和struts-default.xml文件的DTD。
在编写struts.xml文件时,除了要按照struts-2.0.dtd定义的元素结构使用配置元素外,还要记得为sttruts.xml文件加上文档类型声明同,如下:
<!DOCTYPE struts PUBLIC
“-//Apache Software Foundation//DTD Strus Configuration 2.0//EN”
“http://strus.apache.org/dtds/struts-2.0.dtd”>
Struts-2.0.dtd
<?xml version=”1.0” encoding=”UTF=8”?>
<!--START SNIPPET : strutsDtd-->
<!--
Struts configuration DTD. Use the following DOCTYPE
<!DOCTYPE struts PUBLIC
“-//Apache Software Foundation//DTD Struts Configturaion 2.0//EN”
“http://struts.apache.org/dads/struts-2.0.dtd”>
-->
<!ELEMENT struts (package|include|bean|constant)*>
<!ELEMENT package (resutl-types?,interceptors?,default-interceptor-ref?,default-action-ref?,
Default-action-ref?,default-class-ref?,global-results?,global-exception-mapping?,action*)>
<!ATTLIST package
name CDATA #REQUIRED
extends CDATA #IMPLIED
namespace CDATA #IMPLIED
abstract CDATA #IMPLIED
exteralReferenceResolver NMTOKEN #IMPLIED
>
<!ATTLIST result-type (result-type+)>
<!ATTLIST result-type
name CDATA #REQUIRED
class CDATA #REQUIRED
default (true|false)”false”>
>
<!ELEMENT interceptors(interceptor|interceptor-stack)+>
<!ELEMENT interceptor (param*)>
<!ATTLIST interceptor
name CDATA #REQUIRED
class CDATA #REQUIRED
>
<!ELEMENT interceptor-stack (interceptor-ref*)>
<!ATTLIST interceptor-stackj
name CDATA #REQUIRED
>
<!ELEMENT default-interceptor-stack (interceptor-ref*)>
<!ATTLIST default-interceptor-stackj
name CDATA #REQUIRED
>
<!ELEMENT default-action-ref param*)>
<!ATTLIST default- interceptor-ref
name CDATA #REQUIRED
>
<!ELEMENT default-class-ref param*)>
<!ATTLIST default- class-ref
name CDATA #REQUIRED
>
<!ElEMENT global-results (result+)>
<!ELEMENT global-exception-mapping(exception-mapping+)>
<!ELEMENT action (parm|result|interceptor-ref/exception-mapping)>
<!ELEMENT action
Name CDATA #REQUIRED
Class CDATA #IMPLIED
Method CDATA #IMPLIED
Converter CDATA #IMPLIED
>
<!ELEMENT param(#PCDATA|param)*>
<!ATTLIST result-type
name CDATA #IMPLIED
type CDATA #IMPLIED
>
<!ATTLIST exception-mapping (#PCDATA|param)*>
<!ATTLIST exception-mapping
Name CDATA #IMPLIED
Exception CDATA #REQUIRED
Result CDATA #REQUIRED
>
<!ELEMENT include(#PCDATA)*>
<!ATTLIST include
File CDATA #REQUIRED
>
<!ELEMENT bean (#PCDATA)>
<!ATTLIST bean
Type CDATA #IMPLIED
Name CDATA #IMPLIED
Class CDATA #REQUIRED
Scope CDATA #IMPLIED
Static CDATA #IMPLIED
Option CDATA #IMPLIED
>
<!ELEMENT constant (#PCDATA)>
<!ATTLIST constant
Type CDATA #REQUIRED
Name CDATA #REQUIRED
>
<!—END SNIPPET :strutsDtd-->