- 包配置
在struts框架中,是通过包配置来管理Action和拦截器的。在包中可以配置多个Action和拦截器。再struts.xml配置文件中,包是通过<package>元素来配置的。
包配置在struts.xml中的配置格式如下:
<package name= "包名" extends="包名" namespace="/命名空间">……</package>
<package>元素的常用属性如下所示:
- name:指定包名,是供其它包继承的时候使用的属性,必选项。
- extends:指定要继承的包名。可选项。
- namespace:指定包的名称空间。可选项。
- abstract:指定该包是否是一个抽象包。如果该包是一个抽象包,包中不能定义Action。
包的配置(struts.xml)
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">……
<packagename="loginReg" extends="struts-default"namespace="/">
<!--
对Action的配置可以有多对;name为业务逻辑层,该名是在表单中指定的地址;class指定Action类的位置。
--!>
<actionname="loginReg" class="action.LoginRegAction">
<!--
定义两个四个逻辑视图和物理资源之间的映射,name值是Action返回的结果,即逻辑视图。
-->
<resultname="login_success">/login_success.jsp</result>
<resultname="login_error">/login_error.jsp</result>
<resultname="reg_success">/reg_success.jsp</result>
<resultname="reg_error">/reg_error.jsp</result>
</action>
</package>
……</span></span>
配置包时必须指定name属性,只有指定了这个属性后此包才可以被引用。extends属性用来指定该包继承于其它包,其值必须是另外一个包的名称。通过继承,子包可以继承父包的Acting和拦截器。上述代码定义的包名是loginReg,继承的包是struts-default,该包是struts框架的默认包。
- 命名空间配置
在Java语言中为了避免同名的Java类冲突,可以使用包。例如,两个Login.java文件存在同一个包中是不允许的,但是如果分别在不同的两个包中是可以的。同样Struts2的配置中,也存在同名的Action命名的问题。
命名空间再struts.xml中的配置格式如下:
<package name= "包名" extends="包名" namespace="/命名空间">……</package>
例如在项目中的不同模块中都需要一个LoginAction,如果用户在访问时不加以区分,项目就会出现问题。
命名空间的配置(struts.xml)
<span style="font-family:KaiTi_GB2312;font-size:18px;">……
<package name="login" extends="struts-default">
<action name="login" class="action.login.LoginAction">
<result name="success">/login/success.jsp</result>
<result name="error">/login/error.jsp</result>
</action>
</package>
<!-- 配置loginReg包,继承自login,包名称空间/loginReg -->
<package name="loginReg" extends="login" namespace="/loginReg">
<action name="login" class="action.loginReg.LoginAction">
<result name="success">/loginReg/success.jsp</result>
<result name="error">/loginReg/error.jsp</result>
</action>
</package>
……
</span>
在上述代码中定义了两个包:login和loginReg,其中login继承了struts-default包,loginReg继承了login包,两个包中都定义了Action(LoginAction)。包login没有指定namespace属性,默认值是""。loginReg指定命名空间为namespace="/loginReg",说明用户请求发那个文该包下所有的Action时,URL应该是名称空间(namespace)+Action。
- 注意:
name是供其它包继承的时候使用的属性,package的name不可重复。
namespace是用来解决Action重名的