动态action的基本配置及实现

动态action是指一个action中实现多个方法,用户能够请求调用action中的某个方法。

动态action有三种实现方法,分别为:

1、请求URL为actionName!methodName形式

该方法要想开启动态action功能,必须在struts.xml中配置常量:struts.enable.DynamicMethodInvocation = true,如下所示:

该方法的配置如下:

    "-//Apache SoftwareFoundation//DTD Struts Configuration 2.5//EN" 

   "http://struts.apache.org/dtds/struts-2.5.dtd">

   

           regex:.*

          

                  /webpage/add.jsp

                  /webpage/update.jsp

          

   

   

示例代码如下:

package com.struts2.test;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorld extends ActionSupport {

 

    private static final longserialVersionUID = 1L;

    private String message;

   

    public StringgetMessage(){

           return message;

    }

   

    public String update()throws Exception{

           message ="update data!";

           return"update";

    }

 

    public String add() throwsException{

           message = "adddata!";

           return"add";

    }

}

访问URL形式为:http://localhost:8080/StrutsTest/HelloWorld!update。

注意:在struts 2.5及以上版本中为了提升安全性,该种实现方法须在struts package节点下配置:regex:.*,否则会报HTTP Status 404 - Method XXX for action XXX is not allowed!错误。

2、指定action的method属性

该方法是在package节点下的action节点中使用method来实现,配置示例如下红色部分:

    "-//Apache SoftwareFoundation//DTD Struts Configuration 2.5//EN" 

   "http://struts.apache.org/dtds/struts-2.5.dtd">

   

           regex:.*

          

                  /webpage/add.jsp

                  /webpage/update.jsp

          

          

          

                  /webpage/HelloWorld.jsp

          

   

   

上文红色部分配置了名称为HelloWorldUpdate的action映射到类com.struts2.test.HelloWorld中的update方法上。

访问的URL形式为:http://localhost:8080/StrutsTest/HelloWorldUpdate。

3、使用通配符

仔细看上面struts.xml中两个action的定义,可以发现他们除了name和method属性不同以外,其余的都一样,这种定义相当的冗余,为了解决这种类型的问题,Struts2提供了通配符定义方式。

在配置元素时,需要指定name、class、method等属性,这3个属性都支持通配符,在使用通配符定义Action的name属性时,相当于一个元素action定义多个逻辑Action。以上的action配置可以更改为:

 

    "-//Apache SoftwareFoundation//DTD Struts Configuration 2.5//EN" 

   "http://struts.apache.org/dtds/struts-2.5.dtd">

   

           regex:.*

          

                  /webpage/{1}.jsp

          

   

   

    {1}表示为第一个*,也可能使用多个*,{N}表示第N个*。

  代码示例如下:

package com.struts2.test;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorld extends ActionSupport {

 

    private static final longserialVersionUID = 1L;

    private String message;

   

    public StringgetMessage(){

           return message;

    }

   

    public String update()throws Exception{

           message ="update data!";

           return"update";

    }

 

    public String add() throwsException{

           message = "adddata!";

           return"add";

    }

}

注意:在struts 2.5及以上版本中为了提升安全性,该种实现方法须在struts package节点下配置:regex:.*,否则会报HTTP Status 404 - There is no Action mapped for namespace [/] andaction name [updateAction] associated with context path [/StrutsTest]错误。

访问的URL形式为:http://localhost:8080/StrutsTest/updateAction。

你可能感兴趣的:(软件开发)