一:<constant>
<constant>标签主要定义Struts2的一些常量。
如:
<constant name="struts.action.extension" value="do" />
上述定义表示以.do结尾的请求,ActionMapper决定它是一个action请求
当然,struts的常量也可以定义在
struts.properties配置文件中,形如:
#这个是注释
#修改struts2的action判定标准
struts.action.extension=do
当然struts.properties配置文件应和struts.xml一样,位于src目录下。
二:<package>
#这个是注释
#修改struts2的action判定标准
struts.action.extension=do
在Struts2框架中是通过包<package>
来管理action、result、interceptor、interceptor-stack等配置信息的,可以把<package>理解为一个文件夹。
包
<package>
属性如下:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
属性 是否必需 描述
name 是 包名,作为其它包应用本包的标记
extends 否 设置本包继承其它包
namespace 否 设置包的命名空间
abstact 否 设置为抽象包
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
name属性详解:
name属性被用作包名。作用在于区分不同的包。一个<package>必须有name属性,并且其name必须为唯一值。
extends属性详解:
1.通常配置struts.xml的时候,都继承一个名为“struts-default.xml”的包,这是struts2中内置的包。
2.如果需要继承其他包,由于包信息的获取是按照配置文件的先后顺序进行的,所以父包必须在子包之前被定义。
3.当一个包通过配置extends属性继承了另一个包的时候,该包将会继承父包中所有的配置,包括action、result、interceptor等。
namespace属性详解:
1.命名空间的作用:namespace主要是针对大型项目中Action的管理,更重要的是解决Action重名问题,因为不在同一个命名空间的Action可以使用相同的Action名的。
2.命名空间体现:使用命名空间后,访问的url必须包含命名空间。
例如:<package> 的namespace=“/student” <
action> 的name="text"
那么url地址就应为:ip:端口/项目名/student/text.action
3.命名空间可以为一级目录形式,也可以为多级目录形式。
例如:<package> 的namespace=“/student/a/” <action> 的name="text"
那么url地址就应为:ip:端口/项目名/student/a/text.action是可以运行的
4:默认命名空间:Struts2中如果没有为某个包指定命名空间,该包使用默认的命名空间,默认的命名空间总是""。
5:指定根命名空间:当设置了命名空间为“/”,即指定了包的命名空间为根命名空间时,此时所有根路径下的Action请求都会去这个包中查找对应的资源信息。
url地址:ip:端口/项目名/*.action 都是可以运行
<package>使用范例:
<package name="student" namespace="/" extends="struts-default">
</package>
三:<action>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
属性名称 是否必须 功能描述
name 是 请求的Action名称
class 否 Action处理类对应具体路径
method 否 指定Action中的方法名
converter 否 指定Action使用的类型转换器
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
name属性详解:
name属性被用作<action>名称。作用在于区分不同的<action>。<action>必须定义name属性,并且在一个<package>内。
class属性详解:
class属性表示调用这个<action>时,程序需要执行的action类。该属性值由包名加类名构成。
method属性详解:
method属性表示在调用action类时,需要调用的方法。该属性值为方法名。当没有设置该属性时,默认调用execute方法。
<action>使用范例:
<action name="test" class="com.Demo.StrutsDemo" method="execute">
</action>
<action name="test" class="com.Demo.StrutsDemo" method="execute">
</action>
因为method属性默认调用execute方法。所以上述事例中,method属性可以省略。
<action name="test" class="com.Demo.StrutsDemo" >
</action>
四:<result>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
属性名称 是否必须 功能描述
name 否 对应Action返回值,默认为success
type 否 返回结果类型,默认为dispatcher
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
name属性详解:
<result>标签的name属性表示action类返回的值。默认为success
name属性的值可以是自定义的,也可以选取系统默认的值
当使用系统默认的值时,action类中实现validate方法。例如:
struts.xml
<package name="user" namespace="/" extends="struts-default">
<!-- 解决struts2.5 通配符调用无效的问题 -->
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="*_*" class="com.lhb.StrutsText.{1}" method="{2}">
<result name="success">/success.jsp</result>
<result name="input">/user_login.jsp</result>
</action>
</package>
action类:
public String check() {
if (!"admin".equals(user.getUseName())) {
this.addFieldError("userName", "用户名不正确!");
return INPUT;
} else if (!"123".equals(user.getPassword())) {
this.addFieldError("password", "用户名不正确!");
return INPUT;
} else {
return SUCCESS;
}
}
上述代码等价于
public String check() {
return SUCCESS;
}
@Override
public void validate() {
if(!"admin".equals(user.getUseName())){
this.addFieldError("userName", "用户名不正确!");
}else if(!"123".equals(user.getPassword())){
this.addFieldError("passWord","密码不正确!");
}
}
当使用系统默认值时,调用validate方法,系统会判定addFieldError方法是否运行,如果运行,直接返回INPUT;
type属性详解:
<result>使用范例:
<result name="success">/test.jsp</result>
因为
name属性
默认为success,所以上述事例中,name属性可以省略。
<result>/test.jsp</result>
五:<default-action-ref>
如果在请求一个没有定义过的Action资源时,系统就会抛出404错误。这种错误不可避免,但这样的页面并不友好。我们可以使用<default-action-ref>来指定一个默认的Action,如果系统没有找到指定的Action,就会指定来调用这个默认的 Action。
代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="demo" extends="struts-default">
<default-action-ref name="acctionError"></default-action-ref>
<action name="acctionError">
<result>/actionError.jsp</result>
</action>
</package>
</struts>
六:<default-class-ref>
在配置Action的时候,如果没有为某个Action指定具体的class值时,系统将自动引用<default-class- ref>标签中所指定的类。在Struts2框架中,系统默认的class为ActionSupport,该配置在xwork的核心包下的 xwork-default.xml文件中找到。有特殊需要时,可以手动指定默认的class。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="text" extends="struts-default">
<!-- 为Test指定默认class -->
<default-class-ref class="default.action.DefaultClassRef"/>
<action name="test">
<result>/index.jsp</result>
</action>
</package>
</struts>
七:<include>
struts_user.xml:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="user" namespace="/" extends="struts-default">
<action name="test" class="com.Demo.StrutsDemo">
<result>/test.jsp</result>
</action>
</package>
</strut
struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts_user.xml"/>
</struts>