struts2 action几乎完全吸收了xwork 的精华,近日学习struts 2,总结一下action的配制方法。首先看一下com.opensymphony.xwork2.Action的接口声明,Action提供execute() 方法,子类必须实现execute() 方法。
public interface Action { |
com.opensymphony.xwork2.ActionSupport是com.opensymphony.xwork2.Action的缺省实现,实现了execute()方法。我们开发的Action通常继承com.opensymphony.xwork2.ActionSupport
1.简单的action配置
|
前台发送调用logon.action的请求,截听器调用默认的execute()方法
2.在开发中通常将多个方法写在一个action中,对于这样action可以采用集中配置方式
2.1.一个方法一个action配制
|
2.2通配符方式
2.2.1 *
|
action调用的例子:addCrud.action, deleteCrud.action, updateCrud.action, viewCrud.action
2.2.2 分割符加上*,分割符如:下划线_, 惊叹号!
|
调用方式:crud_add.action, crud_delete.action
|
调用方式:crud!add.action, crud!delete.action
2.3 url pattern: /{model}/{method}.action
“/User/add.action” 调用User的add方法
|
=========================================================
struts2的配置文件
struts2相关的配置文件有web.xml(必须的),struts.xml(必须的),struts.properties,struts-default.xml,velocity.properties,struts-default.vm。
web.xml: 包含所有必须的框架组件的web部署描述符;
struts.xml:配置包含result/view类型、action映射、拦截器等的struts2的主要配置文件。
struts.properties: 配置struts2的框架属性;
struts.properties 配置文件(此文件放在/WEB-INF/classes/)
此文件包含了一系列的key-value对象,每个key就是一个struts2的属性,value就是一个struts2的属性值。
此配置文件提供了一种改变框架默认行为的机制。其所包含的所有属性都可以在web.xml配置文件中使用"ini-param"标签进行配置,或者在struts.xml文件中使用"constant"标签进行配置。
****************************
struts.xml常用配置使用方法**
****************************
1、
如果package,action,interceptor等配置较多时,都放到一个struts.xml中比较不容易维护。
所以需要将struts.xml文件分成多个配置文件,然后在struts.xml文件中使用
例子:
2、action配置
默认情况下,struts2会调用动作类的execute方法,但有时,好几个请求动作对应一个action类中不同的方法。
这种情况下,可以在
......
......
上面2个动作的class属性都指向同一个类,name为他起了2个动作别名,my1和my2.
在每个动作里又指定了要运行的方法名。
下来在action类里一定要有这1个方法print。
package ction2.method
public class Myaction extends ActionSupport{
public String execute() throws Exception{
........这是一般的方法,配合第一个action
}
public String print() throws Exception{
....... 这是第2个action的方法
}
}
除了 在struts.xml中配置别名外,还可以不用修改struts.xml而直接用请求参数来描述指定动作,格式如下:
http://localhost:8080/contextPath/actionName!method.action
通过请求指定动作的详细内容: actionName!method.action
如这个,后面可以这样写:/my2!print.action 即可访问之。
3、请求参数设置
zhengsha
26
4、action类中定义相应的setter方法读取此参数,一般不用设置getter方法
public class Myaction extends ActionSupport
{
private String name;
private String age;
public void setName(String name)
{
this.name= name;
}
public void setAge(String age)
{
this.age= age;
}
public String execute() throws Exception
{System.out.println("name is"+name+";age is"+age);}
}
5、result 配置
默认状态下,
如果result的type属性没有定义,struts2会自动将其定义为success。
用户也可以自己设置
如有一个result被多个
如果action里没有相应的result,那struts2就会使用全局的
6、拦截器配置
struts2拦截器如同servlet里的过滤器,struts2执行action的execute()方法前先执行在struts.xml中配置的拦截器,执行完所有的intercepor方法后,会执行execute方法。
注意:在action里面最后必须一定要引用struts2自带的拦截器缺省堆栈defaltStack,否则出错。
如:
7、package配置
package 可以将逻辑上相关的一组action,result,interceptor等组件分为一组。
package 属性有:
name(必须的) package的表示,为了让其他的package引用
extends(可选的) 从哪个package继承的
namespace(可选的) 下面讲
abstract(可选的) 定义这个package为抽象的,这个package中不需要定义action
namespace 讲解
"/" 表示根namespace,所有直接在应用程序上下文环境下的请求(Context)都在这个package下查找。
""表示默认的namespace。当所有的namespace中都找不到的时候,就在这里找。
例如:
a、 如果请求为 /barspace/bar.action ,则查找 “/barspace”,如果找到"bar",则执行相应的 action;如果没找到,就执行默认的namespace。
b、 如果请求为“/no.action”则namespace(“/”)被查找,找到了则执行对应的action,否则执行默认的namespace。
8、action配置
result默认的name为success.
action中的方法通配符
例子:
editcurd action 将调用edit方法,
deletecurd action将调用delete方法。
默认的action
当没有指定action的class属性的时候,默认使用com.opensymphiony.xwork.ActionSupport。
ActionSupport下有2个方法,input 和 execute,每个方法都是简单的返回success。
当请求的action不存在的时候,struts2会返回404错误页面,但我们也可以定义自己的默认页面,使用如下方法:
//每个action将会被映射到以自己名字 命名的 jsp上。