3 如何配置Action

配置Action就是让Struts 2的容器知道Action的存在,并且能调用Action来处理用户请求,Struts 2是用包来管理Action的,所以Action是在package元素下定义的。

Action只是一个控制器,不对用户的请求作任何响应,因此当Action处理完所有的用户请求后,它需要将一个视图资源返回给用户,因此配置Action时需建立逻辑与物理视图的映射(class)默认的Actioncom.opensymphony.xwork2.ActionSupport

3.1 struts.xmlAction配置实例:

<packagename="default"namespace="/"extends="struts-default">

<actionname="login"class="com.action.LoginAction">

<!-- result配置逻辑视图和物理视图的映射关系 ,

每一个<result/>元素就是一个逻辑视图与物理视图的映射-->

<resultname="success">success.jsp</result>

</action>

</package>

3.2 Action配置的各项默认值

(1)、如果没有为action指定class,默认是ActionSupport
(2)、如果没有为action指定method,默认执行action中的execute()方法。
(3)、如果没有为action指定result,默认值为success

4 动态方法调用DMI

DMI == Dynamic Method Invocation

Struts 2中一个Action处理多个请求时,可以使用动态方法调用。

将不同的请求交给同一个Action的不同方法去做。

4.1 方式一 —— 指定method属性

一个Action可处理多个逻辑。在struts.xml配置文件中配置Action时,可以为其指定method属性,可让Action调用指定的方法来处理用户请求,而不是处理默认的execute()方法。

<!-- 使用LoginAction的regist方法来处理注册请求 -->

<actionname="reg"class="com.action.LoginAction"method="regist">

</action>

4.2 方式二 —— 感叹号

首先需要开启一个开关:

<constant name="struts.enable.DynamicMethodInvocation" value="true" />

在处理用户请求的Action的名称后加上!然后再加上处理请求的方法名称。

<!-- action的形式为actionName!MethodName -->

<formaction="login!userlogin"method="post">

</form>

JS代码示例:

<scripttype="text/javascript">

function userlogin(){

var form=document.forms[0];

form.action="login!userlogin";

form.submit();

}

</script>

4.3 方式三 —— 通配符 *

在配置Action时需填写nameclassmethod属性,都支持通配符。

思想:约定优于配置(约定好了名称以后,才可成功使用通配符)

<action="*_*" class="day02.{1}Action" method="{2}"

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

/action>

自动匹配参数,第一个*{1}来代替,第二个*{2}来代替……

{0}表示匹配所有内容

{1}表示第一个*的内容

4.4 默认的Action

有时用户请求非常简单,比如请求一个简单的视图资源,不需做其他处理或一个简单的转发。

<default-action-ref>默认的Action引用,当系统找不到指定的Action时,就会交个这个默认的Action去处理。

<packagename="org"namespace="/"extends="struts-default">

<!--配置默认的Action只需要配置<default-action-ref>即可,同时必须指定它的name属性,指向已存在的Action  -->

<default-action-refname="login"></default-action-ref>

<actionname="login"class="com.action.LoginAction"method="login">

</action>

</package>