pony

抄袭是一种美德

struts2 action 配置方法 &&struts2的配置文件

 struts2 action几乎完全吸收了xwork 的精华,近日学习struts 2,总结一下action的配制方法。首先看一下com.opensymphony.xwork2.Action的接口声明,Action提供execute() 方法,子类必须实现execute() 方法。

  public interface Action {
    public String execute() throws Exception;
}

com.opensymphony.xwork2.ActionSupport是com.opensymphony.xwork2.Action的缺省实现,实现了execute()方法。我们开发的Action通常继承com.opensymphony.xwork2.ActionSupport

1.简单的action配置

 <action name="logon" class="tutorial.Logon">
  <result type="redirect-action">Menu</result>
  <result name="input">/tutorial/Logon.jsp</result>
</action>

   前台发送调用logon.action的请求,截听器调用默认的execute()方法

2.在开发中通常将多个方法写在一个action中,对于这样action可以采用集中配置方式
2.1.一个方法一个action配制

 <action name="delete" class="example.CrudAction" method="delete">


2.2通配符方式
2.2.1 *

 <action name="*Crud" class="example.Crud" method="{1}">

  method="{1}"表示,第一个通配符是方法.

  action调用的例子:addCrud.action, deleteCrud.action, updateCrud.action, viewCrud.action


2.2.2 分割符加上*,分割符如:下划线_, 惊叹号!

 <action name="crud_*" class="example.Crud" method="{1}">

   调用方式:crud_add.action, crud_delete.action

 <action name="crud!*" class="example.Crud" method="{1}">

      调用方式:crud!add.action, crud!delete.action


2.3 url pattern: /{model}/{method}.action
“/User/add.action” 调用User的add方法

 

<action name=”*/*” method=”{2}”
class=”com.infoq.actions.{1}Action”>
<result type=”redirect”>/{1}/view.action</result>
<result name=”view”>/{1}/view.jsp</result>
<result name=”input”>/{1}/edit.jsp</result>
<result name=”home”>/{1}/home.jsp</result>
</action>

 

=========================================================

 

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、<include>标签重用配置文件

如果package,action,interceptor等配置较多时,都放到一个struts.xml中比较不容易维护。

所以需要将struts.xml文件分成多个配置文件,然后在struts.xml文件中使用<include>标签引用这些配置文件。结构清晰,配置文件复用。

例子:

<struts>

   <include file="struts1.xml"/>

   <package name="" extends="/sturts-default">...</package>

<action name=>..</action>

</struts>

2、action配置

默认情况下,struts2会调用动作类的execute方法,但有时,好几个请求动作对应一个action类中不同的方法。

这种情况下,可以在<action>标签中通过method方法指定要执行的动作类的方法名,并且需要为不同的动作起不同的名字(也叫别名,即name值)。

<action name="my1" class="action2.method.Myaction">

   ......

</action>

<action name="my2" class="action2.method.Myaction" method="print">

   ......

</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、请求参数设置

<action name="" class="">

<param name="name">zhengsha</param>

<param name="age">26</param>

<result name="save">/result.jsp</result>

</action>

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属性是"dispatcher",即转发。

如果result的type属性没有定义,struts2会自动将其定义为success。

用户也可以自己设置

<result name="save" type="redirect">/result.jsp</result>

如有一个result被多个<action>使用,这时可以使用<global-results>标签来定义全局的<result>,代码如下:

<struts>

<package name="demo" extends="struts-default">

<global-results>

<result name="print">/result.jsp</result>

</global-results>

<action name="submit" class="...">

 如果action里没有相应的result,那struts2就会使用全局的<result>

</action>

</package>

</struts>

6、拦截器配置

struts2拦截器如同servlet里的过滤器,struts2执行action的execute()方法前先执行在struts.xml中配置的拦截器,执行完所有的intercepor方法后,会执行execute方法。

注意:在action里面最后必须一定要引用struts2自带的拦截器缺省堆栈defaltStack,否则出错。

如:

<interceptor-ref name="defaultStack"/>(必须加,否则出错!)

7、package配置

package 可以将逻辑上相关的一组action,result,interceptor等组件分为一组。

package 属性有:

name(必须的)       package的表示,为了让其他的package引用

extends(可选的)  从哪个package继承的

namespace(可选的)  下面讲

abstract(可选的)  定义这个package为抽象的,这个package中不需要定义action

namespace 讲解

"/" 表示根namespace,所有直接在应用程序上下文环境下的请求(Context)都在这个package下查找。

""表示默认的namespace。当所有的namespace中都找不到的时候,就在这里找。

例如:

<package name="default">

<action name="bar" class="">...</action>

</package>

<package name="mypack1" namespace="/barspace">

<action name="bar" class="">...</action>

</package>

<package name="mypack2" namespace="/">

<action name="no" class="">...</action>

</package>

a、 如果请求为 /barspace/bar.action ,则查找 “/barspace”,如果找到"bar",则执行相应的    action;如果没找到,就执行默认的namespace。

b、     如果请求为“/no.action”则namespace(“/”)被查找,找到了则执行对应的action,否则执行默认的namespace。

8、action配置

result默认的name为success.

action中的方法通配符

例子:

<action name="*curd" class="" method="{1}"></action>

editcurd action 将调用edit方法,

deletecurd action将调用delete方法。

默认的action

当没有指定action的class属性的时候,默认使用com.opensymphiony.xwork.ActionSupport。

ActionSupport下有2个方法,input 和 execute,每个方法都是简单的返回success。

当请求的action不存在的时候,struts2会返回404错误页面,但我们也可以定义自己的默认页面,使用如下方法:

<package name="hello" extends="action-default">

<default-action-ref name="Under">

<action name="Under">

<result>/error.jsp</result>

</action>

<action name="*">

<result>/{1}.jsp</result>

</action>//每个action将会被映射到以自己名字 命名的 jsp上。

</package>

posted on 2011-06-09 11:16  马森  阅读(12017)  评论(0编辑  收藏  举报

导航