struts.xml配置详解

一:<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框架中是通过包<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>

因为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>

利用include标签,可以将一个struts.xml配置文件分割成多个配置文件,然后在struts.xml中使用<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>  








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值