1. 常量
Struts 2规定了一些特定的对整个Struts 2应用起作用的常量,通过配置这些常量的值,可以改变Struts 2框架的一些默认行为。Struts 2可以在三种文件中对常量进行配置:Struts .xml 、struts.properties 、web.xml。在不同配置文件中配置相同的常量时,会出现常量覆盖的情况:后一个配置文件会覆盖前一个配置文件中的常量值。
2. 包
在Struts 2配置文件中使用“包”来组织Action,Action定义是放在包的定义下完成的。Struts 2配置文件中的包不同于Java语言中的包,Struts 2配置文件中的包就是由多个Action,多个拦截器、多个拦截器引用组成的集合,通过包可以非常方便的对Struts 2框架的核心组件进行组织和管理。
Struts 2配置文件中的“包”是通过使用<package>元素进行定义的,每个<package>元素定义了一个包配置。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 指定Struts2处于开发阶段,可以进行调试 -->
<constant name="struts.devMode" value="true" />
<!-- Struts2的Action都必须配置在package里,此处使用默认package -->
<package name="default" namespace="/" extends="struts-default">
<!-- 定义一个名为user的Action,实现类为com.qst.chapter02.action.UserAction -->
<action name="user" class="com.qst.chapter02.action.UserAction">
<!-- 配置execute()方法返回值与视图资源之间的映射关系 -->
<result name="success">/result.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
上述代码在struts.xml中配置了一个名为default的包,该包继承struts-default包。
struts-default是Struts 2框架的默认抽象包,该包包含了大量的结果类型定义、拦截器及其引用定义等,这些定义是配置Action的基础,
Struts 2还提供了一种所谓的抽象包,抽象包意味着该包不能包含Action定义,定义抽象包需要在<package>元素中增加abstract = true 属性。另外,struts.xml配置文件是从上往下解析的,因此父包要在子包前面定义。
3. 命名空间
定义package包时,可以指定一个namespace属性,用于指定该包对应的命名空间。
Struts 2之所以提供命名空间的功能,主要是为了处理用一个Web应用中包含同名Action的情形。同一个命名空间里不能有同名的Action,不同的命名空间下可以出现同名的Action。Struts 2的命名空间提供了一个类似于文件目录的管理方式,可以在不同的命名空间中定义相同的Action。
Struts 2不支持单独为Action设置命名空间,如果配置package包时没有指定namespace属性,则该包下的所有Action属于默认的命名空间。
对于没有指定命名空间的包,命名空间是默认的命名空间,因此直接通过Action名访问包下的Action即可,其请求访问的URL如下所示:
http://ip地址: 端口号/web应用路径名称/actionName.action
而对于定义命名空间的包,当用户访问该包下的所有Action时,请求的URL应该符合namespace + Action规则:
http://ip地址: 端口号/web应用路径名称/namespace/actionName.action
除此以外,Struts 2 还可以显式地指定根“/”命名空间,通过设置某个包的 namespace = /
来实现,
默认命名空间里的Action可以处理任何命名空间下的Action请求。
4. 包含其他配置文件
实际项目开发会采用模块化开发方式,团队先独立开发某个模块,最后整合在一起。为了避免struts.xml文件过于庞大,臃肿,提高struts..xml文件的可读性,Struts 2允许将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。
<struts>
<include file = "struts-part1.xml">
<include file = "struts-part2.xml">
<include file = "struts-part3.xml">
</struts>
上述代码使用<include>元素包含了其他配置文件,被包含的配置文件都是标准的Struts 2配置文件,同样包含了DTD信息、Struts 2配置文件的根元素等信息。通常Struts 2的所有配置文件都放在Web应用的WEB-INF/classes类路径下,但在Eclipse开发工具中是放在源代码的src根目录下。
<include>元素引用的xml文件必须是完整的Struts 2配置文件,实际上在<include>元素引用文件时是单独的解析每个xml文件。