4.1 Action基础
4.1.1 Action是什么
在Struts2中,一个Action类代表一次请求或调用,每个请求的动作都对应于一个相应的Action类,一个Action类是一个独立的工作单元。
也就是说,用户的每次请求,都会转到一个相应的Action类里面,由这个Action类来进行处理,因此说一个Action类代表了用户的一次请求或调用。
换句简单的话来说,Action就是用来处理一次用户请求的对象。
4.1.2 Action能干什么
认识了Action是什么过后,来看看Action能干什么。
1:先看看前面HelloWorld中实现的Action对象,示例代码如下:
public class HelloWorldAction implements Action {
private String account;
private String password;
private String submitFlag;
public String execute() throws Exception {
//1:收集参数,不用做了,数据会直接映射到上面的属性里面
//2:组织参数,暂时不需要,先不做
//3:调用模型的逻辑功能处理,这里不需要,只是简单的输出一下传入的参数
System.out.println("用户输入的参数为==="+"account="+account
+",password="+password+",submitFlag="+submitFlag);
//4:根据逻辑处理的结果来选择下一个页面,这里直接选择转向欢迎页面的result
return "toWelcome";
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSubmitFlag() {
return submitFlag;
}
public void setSubmitFlag(String submitFlag) {
this.submitFlag = submitFlag;
}
}
根据上面的Action实现,你会发现,在Struts2里面,Action充当着MVC中模型的角色,也就是说Action既封装了业务数据,又要处理业务功能。当然,在实际的JavaEE开发中,逻辑部分会放到逻辑层去实现,这就演变成Action只是去调用逻辑层来进行业务逻辑的处理,并不是真的在Action里面去实现业务逻辑的处理。
上面这个Action的属性和属性对应的getter/setter方法,就是用来接收用户请求的数据,并把这些数据封装在Action中,在后续处理中可以访问这些数据。
再仔细察看上面Action的实现中的execute方法的实现,你会发现execute方法里面实现的功能,正是前面学习的MVC的控制器部分的功能。因此,从另外一个角度来说,Struts2的Action也充当着MVC中控制器的角色。
2:那么到底Struts2的Action相当于MVC中的控制器部分还是模型部分呢?
虽然两种说法都过得去,但是目前大家的共识是把Struts2的Action作为MVC中的模型角色来看待。
原因在于,在Struts2运行的时候,是由Struts2中的前端控制器FilterDispatcher分发并调用相应的Action的,此时这个Action仅仅相当于一次请求的命令处理,层面比较小,再加上已经有FilterDispatcher来做控制器进行分发调度了,因此,一般不把Struts2的Action当作MVC的控制器来看,而是当作MVC的模型部分来看。
4.1.3 Action的基本配置
不管Action采用何种实现方式,要正确运行,都需要在struts.xml中进行配置,这是使用Action的基础。
就以前面HelloWorldAction为例来看看Action的基本配置,复杂的配置在后面有详细介绍。HelloWorldAction的定义如下:
package cn.javass.hello.struts2impl.action;
public class HelloWorldAction implements Action {
//省略了
}
那么此时在struts.xml中,Action对应的配置为:
<action name="helloworldAction" class="cn.javass.hello.struts2impl.action.HelloWorldAction">
</action>
对于Action本身的配置非常简单,只需要配置Action的名称,和Action类的全路径名,简单点说就是:一个类的全路径名=这个类的包路径+“.”+这个类的名称。
本教程是ajava.org会员hellospring的原创作品,转载请注明出处。
作者博客:http://sishuok.com/forum/blogPost/list/3983.html
作者ajava空间:http://ajava.org/space-uid-2358.html