Struts2-关于struts.xml文件的action配置的说明

一、Action的说明:

Struts2的核心功能就是action,对于开发者,使用Struct2框架的主要工作就是编写Action类来实现业务。action类可以不用继承任何父类和实现任何接口,但是在开发中通过实现com.opensymphony.xwork2.Action接口(下文中以Action来替代)或者继承com.opensymphony.xwork2.ActionSupport(下文中以ActionSupport来替代),可以简化action的开发。

对于Action,有5个很重要的字符串常量(一般性约定的视图)和一个抽象方法需要说明:

public static final String SUCCESS = "success";     // 数据处理成功 (成功页面)

 public static final String NONE = "none";    //页面不跳转  return null; 效果一样,常用于ajax请求时

public static final String ERROR = "error";    //数据处理发送错误 (错误页面)

public static final String INPUT = "input";    //用户输入数据有误,通常用于表单数据校验 (输入页面)

public static final String LOGIN = "login";    //主要权限认证不通过 (登陆页面)

public String execute() throws Exception;     //action如果不指定method的属性值,默认将执行execute方法

在实际开发中,很少直接实现Action接口,一般都是通过继承ActionSupport类,来极大地简化开发。ActionSupport已经帮我们完成了一些常用的功能,如:输入验证、错误信息存取以及国际化等。继承ActionSupport,即可继承这些功能。

二、Action的配置:

对于开发好的action,需要在struts.xml文件中进行配置,告诉Struts2框架该action负责处理哪一个(些)的URL请求。

action元素属性
属性是否必要说明
nameaction的名字,用于匹配URL请求
classAction实现类的完整类名
method执行action时调用的方法
converter应用于action的类型转换器的完整类名
<package name="default" extends="struts-default">
	<action name="test" class="com.struts2.action.TestAction" method="execute">
		<result name="success">/index.jsp</result>
	</action>
</package>

1、name属性:

name属性是必须的,name属性的值默认是不允许出现斜杠(/)的,如果需要name中使用斜杠,就需要在struts.xml文件中通过指定<constant name="struts.enable.SlashesInActionNames" value="true"/>来打开这个功能,并且name的属性值中最好不要有点号(.)。

2、method属性:

如果不指定method属性值,在执行action时,默认是调用execute()方法。如果指定了相应action的method的属性值,将执行指定method的方法。对于action的method的定义,需要遵循一定的规则(和Action接口中的execute()方法格式一样):

(1)方法全选必须是public

(2)方法的返回值必须是String类型

(3)方法签名必须为空

3、class属性:

class属性的属性值为action类完整类名,如果省略,默认的class的属性值将是ActionSupport的完整类名。当然这个class的属性值基本上都会填写开发人员编写的action类,否则就没有必要编写action类了。

三、Action的动态方法调用:

默认情况下,开发人员编写的action类中的方法都需要定义一个对应的action(一般是方法名就是action的name属性的属性值),若是开发人员编写的action方法很多,那么在struts.xml文件中定义相应的action,那么应该算上苦力活了。如:

public class UserAction extends ActionSupport{

	public String login() {
		//....
	}
	public String regist(){
		//....
	}
	public String logout(){
		//....
	}
	//....    
}

相应的在struts.xml文件中,需要声明action:

<action name="lognin" class="com.struts2.action.UserAction" method="lognin">
	<!-- 省略 -->
</action>
<action name="regist" class="com.struts2.action.UserAction" method="regist">
	<!-- 省略 -->
</action>
<action name="logout" class="com.struts2.action.UserAction" method="logout">
	<!-- 省略 -->
</action>
可以使用 Action的动态方法调用来简化action的配置。其中有两种方式实现动态方法调用:

(1)使用感叹号(!)来标识要调用的方法名,其语法格式如下:

        actionName!methodName.action

在struts.xml文件中的配置方式如下:

<action name="user" class="com.struts2.action.UserAction">
	<!-- 省略 -->
</action>

当请求user!login.action时,将调用UserBean的login()方法,这样就能简化开发人员编写的action的配置。

(2)使用通配符(*):

<action name="*_*" class="com.struts2.action.{1}Action" method="{2}">
	<!-- 省略 -->
</action>

当请求的是user_login,这时就会调用UserAction类中的login()方法。上面的代码中,其中的第一个通配符代表Action类的User,第二个通配符代表method的方法名。使用通配符时,需要遵循统一的命名规范。通配符可以定义多个,不过一般定义最好是两个以内,以便可读性。

一个通配符的情况也很常见(更便于阅读和修改struts.xml文件):

<action name="user_*" class="com.struts2.action.UserAction" method="{1}">
	<result>/.../{1}.jsp</result>
</action>

四、默认的action:

如果请求一个不存在的action,那么结果将是HTTP 404错误。在Struts2中,可以指定一个默认的action,如果一个请求没有其他的action匹配,那么默认的action将被执行,一般配置于默认空间中,因为在相应的命名空间中没有action匹配,将会在默认空间中匹配,默认空间中没有action匹配,才调用默认空间的默认action。

<package name="default" extends="struts-default">
    <!-- 此package的namespace为默认空间 -->
    <default-action-ref name="default"></default-action-ref>
    <action name="user_*" class="com.struts2.action.UserAction" method="{1}">
    <result>/.../{1}.jsp</result>
    </action>
    <action name="default" class="com.struts2.action.DefaultAction"></action>
</package>




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值