一步一步学习struts2(3):Action的配置

*********************************************************************************************

@author lue

@e-mail luecsc@gmail.com

学习笔记,仅供参考,如有错误请联系

*********************************************************************************************

首先观察以下一个action的简单配置:

<package name="loginTest" extends="struts-default" namespace="/">
        <action name="login" class="cn.luecc.action.LoginAction" >
		<result name="success">/loginSuc.jsp</result>
		<result name="error">/loginFail.jsp</result>
	</action>
</package>
注意 package 中的 namespaceNamespace 决定了 action 的访问路劲,默认为 ”” ,可以接收所有路径的 actionNamespace 可以写成 / ,或者 /xxx ,或者 /xxx/yyy ,对应的 action 访问路径为 login.action/xxx/login.action/xxx/yyy/login.action

Namespace最好用模块来进行命名

这里首先说明一点,Action执行的时候并不是一定要执行execute方法的,所以请看下面示例:

//UserAction.java
package cn.luecc.action;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{
	public String add() {
		return SUCCESS;
	}
}

这个action中并没有execute()方法,那怎么来执行这个action呢?先看以下action配置:

//struts.xml
<package name="user" extends="struts-default" namespace="/user">
	<action name="userAdd" class="cn.luecc.action.UserAction" method="add">
		<result>/userAddSuc.jsp</result>
	</action>
</package>

action标签中,name属性值任取,class属性值为你写的action类,method属性值为需要执行的action中的方法名。上面的userAddSuc.jsp很简单,只是显示一句话而已:

<%@ page language="java" pageEncoding="GB18030"%>
	用户添加成功!!

访问的url为:

http://localhost:8080/xxx(1)/user(2)/userAdd.action(3)

其中: (1)为项目名称;(2)packagenamespace(3)配置的action属性名称

所以这里可以这样访问add方法:

这里我们考虑这样一个问题:如果UserAction中还有一个delete方法或update方法,我们该如何配置呢?

很明显,根据上面的方法,就应该配置更多的action,如

<action name="userAdd" class="cn.luecc.action.UserAction" method="delete">
	<result>/userAddDel.jsp</result>
</action>
<action name="userAdd" class="cn.luecc.action.UserAction" method="update">
	<result>/userAddUpd.jsp</result>
</action>
........

再设想,如果UserAction中还有更多的方法,那么这里就需要配置更多的action,是否感觉到这样会很麻烦,所以我们不提倡使用这样的方法,每增加一个方法,就需要多配置一个action,给我们的开发增添了额外的负担,我们提倡使用第以下action的配置方法。

       我们只需要配置一个action,采用动态访问的方式:

<action name="user" class="cn.luecc.action.UserAction">
	<result>/userAddSuc.jsp</result>
</action>

我们现在action中添加一个方法:

public class UserAction extends ActionSupport{
	public String add() {
		return SUCCESS;
	}
	public String delete() {
		return SUCCESS;
	}
	public String update() {
		return SUCCESS;
	}
}

同样我们的userAddSuc.jsp就不能只是添加成功了,所以这里修改为:

<%@ page language="java"pageEncoding="GB18030"%>

    用户数据更新成功!!

这样就可以通过以下url访问了add()

http://localhost:8080/xxx/user/user!add.action

如果还有其他方法就将add换成UserAction.java中的方法就可以了,如:

http://localhost:8080/xxx/user/user!delete.action

上面action配置中不管action类中增添了多少方法,都只需要配置一个action,采用动态访问的方式来访问。再设想,如果你的项目中有多个模块,那么就需要多个action,比如上面管理用户用一个UserAction,管理类别用一个CategoryAction

管理XX用一个XXAction,这样同样需要配置很多的action,为了提高效率,struts2中为我们提供了一种更为便捷的配置方式:通配符配置,采用通配符配置可以将配置量降到最低。

看下面的配置:

<package name="user" extends="struts-default" namespace="/user">
	<action name="*_*" class="cn.luecc.action.{1}Action" method="{2}">
		<result>/{1}_{2}_Suc.jsp</result>
	</action>
</package>
其中 action name 属性使用了 ”*_*”,class 的属性值中的 {1} 代表 ”*_*” 中的前一个星号, method 的属性值中的 {2} 代表 ”*_*” 中的第二个星号; <result> 中的 {1}{2} 跟此一样。再看一下访问的 url ,那么 * 号代表的意思就一目了然了:

http://localhost:8080/Struts2_004/user/User_add.action

首先看action的名字为User_add,那么”*_*”中的第一个星号就代表:User,第二个星号就代表:add,所以上面的配置在执行的时候就是:

<action name="User_add" class="cn.luecc.action.UserAction" method="add">
	<result>/User_add_Suc.jsp</result>
</action>

这样做的好处就是,当我们事先约定好的情况下,我们的配置文件中只需要利用通配符配置一个actionok了,所以我们这里要记住一个规则:

约定优于配置

下面是运行示例:

注意:在配置的所有action中,如果一个action中没有通配符,那么此action的优先级最高,其他包含通配符的action则按顺序匹配

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值