Action是用于处理请求操作的,它是由StrutsPrepareAndExceuteFilter分发过来的。

1、Action的创建方式

1) POJO类(PlainOldJavaObjects简单的Java对象),不需要继承任何父类,实现任何接口

 public class TestAction {
public String execute() {
return "success";
}
}

这种方式是Struts2框架通过反射来实现的,步骤:

  • struts2框架通过读取struts.xml配置文件获得完整的Action类名;
  • object = Class.forName("完整类名").newInstance();
  • Method method = Class.forName("完整类名").getMethod("execute");
  • method.invoke(object);

2)实现Action接口

 public class TestAction implements Action {
/**
* 可以不重写execute方法,用自定义的方法,但是
* 在配置文件中需要显示指定方法名method=要执行的方法
*/
@Override
public String execute() {
return "success";
}
}

Action接口中,定义默认五种逻辑视图名称:

public static final String SUCCESS = "success";  // 数据处理成功 (成功页面)
public static final String NONE = "none"; // 页面不跳转 return null; 效果一样
public static final String ERROR = "error"; // 数据处理发送错误 (错误页面)
public static final String INPUT = "input"; // 用户输入数据有误,通常用于表单数据校验 (输入页面)
public static final String LOGIN = "login"; // 主要权限认证 (登陆页面)

五种逻辑视图用来解决Action处理数据后,跳转页面

3)继承ActionSupport类(推荐)

其实ActionSupport类本身已经实现了Action接口,而且可以在Action中使用表单校验、错误信息设置、读取国际化信息三个功能,所以推荐使用。

 public class TestAction extends ActionSupport {
/**
* 可以不重写execute方法,用自定义的方法,但是
* 在配置文件中需要显示指定方法名method=要执行的方法
*/
@Override
public String execute() {
return "success";
}
}

2、Action的访问

在配置<action>元素时,没有指定method属性,默认执行Action类中execute方法。

1)基本访问

在jsp页面中有下面的action访问路径:

 <a href="${pageContext.request.contextPath}/book/update.action">测试</a>

struts.xml的配置文件:

 <struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/book" extends="struts-default">
<action name="add" class="cn.sunny.action.BookAction" method="add">
<result name="success">/success.jsp</result>
</action>
<action name="update" class="cn.sunny.action.BookAction" method="update">
<result name="success">/success.jsp</result>
</action>
<action name="delete" class="cn.sunny.action.BookAction" method="delete">
<result name="success">/success.jsp</result>
</action>
<action name="search" class="cn.sunny.action.BookAction" method="search">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>

通过<package>的namespace与<action>的name属性结合与请求资源路径对比,可以知道访问哪一个action,在通过<action>的class知道访问哪一个Action类,通过method知道访问哪一个方法。

2)使用通配符

使用通配符* 可以简化struts.xml配置

jsp页面:

 <a href="${pageContext.request.contextPath}/book/Book_add">book_add</a><br>
<a href="${pageContext.request.contextPath}/book/Book_update">book_update</a><br>
<a href="${pageContext.request.contextPath}/book/Book_delete">book_delete</a><br>
<a href="${pageContext.request.contextPath}/book/Book_search">book_search</a><br>

action的配置:

 <struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/book" extends="struts-default">
<action name="*_*" class="cn.itcast.action.{1}Action" method="{2}">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>

<action>中的name属性的值中每一个"*"代表长度不为0的任意字符串,name="*_*"表示页面访问的action名称必须为为类似book_add.action、book _update.action形式。

如果在name属性定义了通配符之后,可以在class属性、method属性、<result>的name属性以及返回的jsp页面名字中都可以使用通配符,{1}代表第一个*,{2}代表第二个*。

3)动态方法调用

当在<action>中不配置method属性同时又不希望执行默认的execute方法时,可以使用动态方法调用,访问的方式为"action名"+"!"+"方法名":

<a href="${pageContext.request.contextPath}/book/book!add">bookadd</a>

action配置:

 <struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/book" extends="struts-default">
<action name="book" class="cn.sunny.action.BookAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>

注意事项:在struts2的常量配置中有一项可以设置关闭动态方法调用,默认是允许:

 struts.enable.DynamicMethodInvocation = true

3、Action名称搜索顺序

1)获取请求路径的URL,例如URL为:

<a href="${pageContext.request.contextPath}/path1/path2/path3/update.action">测试</a>

2)首先寻找namespace为/path1/path2/path3的package,如果存在这个package,则在这个package中寻找名字为update的action,如果不存在这个package则执行第3步;

3)寻找namespace为/path1/path2的package,如果存在这个package,则在这个package中寻找名字为update的action,如果不存在这个package则执行第4步;

4)寻找namespace为/path1的package,如果存在这个package,则在这个package中寻找名字为update的action,如果仍然不存在这个package,则去默认的namespace的package中寻找名字为update的action(默认的namespace值为"/"),如果还是找不到,页面提示找不到action。

4、package配置中默认值

1)如果没有为package指定namespace,则默认的namespace值为"/";

2)如果action中没有指定class,则默认的class为ActionSupport;

3)如果action中没有指定method,则默认的method为execute;

4)如果result中没有指定name,则默认的name为success。

Struts2学习笔记(三)——Action详解的更多相关文章

  1. Struts2学习笔记二 配置详解

    Struts2执行流程 1.简单执行流程,如下所示: 在浏览器输入请求地址,首先会被过滤器处理,然后查找主配置文件,然后根据地址栏中输入的/hello去每个package中查找为/hello的name ...

  2. Struts2学习笔记(二)——配置详解

    1.Struts2配置文件加载顺序: default.properties(默认常量配置) struts-default.xml(默认配置文件,主要配置bean和拦截器) struts-plugin. ...

  3. expect学习笔记及实例详解【转】

    1. expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的语法如下所示:1.1 首行加上/usr/bin/expect1.2 spawn: 后面加上需要执行的shell命令,比如说sp ...

  4. [C#] 类型学习笔记二:详解对象之间的比较

    继上一篇对象类型后,这里我们一起探讨相等的判定. 相等判断有关的4个方法 CLR中,和相等有关系的方法有这么4种: (1) 最常见的 == 运算符 (2) Object的静态方法ReferenceEq ...

  5. [原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. Android学习笔记之Activity详解

    1 理解Activity Activity就是一个包含应用程序界面的窗口,是Android四大组件之一.一个应用程序可以包含零个或多个Activity.一个Activity的生命周期是指从屏幕上显示那 ...

  7. Redis学习笔记4-Redis配置详解

    在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server   xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...

  8. Struts2学习笔记(六)——Action处理请求参数

    在struts2框架中关于Action处理请求参数有两种方案(三个方式),表单属性的名称应该和在Action类中定义的成员属性或者在JavaBean中定义的成员属性名称一样: 1.属性驱动 1)直接在 ...

  9. Docker技术入门与实战 第二版-学习笔记-3-Dockerfile 指令详解

    前面已经讲解了FROM.RUN指令,还提及了COPY.ADD,接下来学习其他的指令 5.Dockerfile 指令详解 1> COPY 复制文件 格式: COPY  <源路径> .. ...

随机推荐

  1. jsp注册页面的省份联动(网上copy别人的,然后自己弄了一下才知道怎么用)

    首先写一个js里面是所有的省份一些七七八八的东西,直接复制黏贴过去就好了. var addressInit = function(_cmbProvince, _cmbCity, _cmbArea, d ...

  2. Linux 学习记录 四(Bash 和 Shell scirpt)

    一.什么是 Shell? 狭义的shell指的是指令列方面的软件,包括基本的Linux操作窗口Bash等,广义的shell则包括 图形接口的软件,因为图形接口其实也可以操作各种驱动程序来呼叫核心进行工 ...

  3. Mac终端查看sqlite3数据库、表数据等

    背景: 我们在用FMDB处理iOS数据库时,沙盒里保存的数据库格式为.sqlite3. 当我们需要在模拟器上调试或查看数据库内容时,我们可以直接在终端里查看到. 正文: 1.在沙盒路径找到需要查看到文 ...

  4. If I were you

    别让孩子输在起跑线上,这句话有道理吗? 答:和别人比较是人生悲剧的源头. 做哪些事情可以提高生活的品质? 答:定期扔东西. 结婚以后,两个人在一起最重要的是什么? 答:就当这婚还没结呢. 去做你害怕的 ...

  5. bzoj2038: [2009国家集训队]小Z的袜子(hose) [莫队]

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...

  6. (转)关于eclipse的TestNG的插件安装方法

    背景:最近在学习spring 4.x时候,用到了testNG的测试方法,发现需要在eclipse安装testNG插件才能够正常进行单元测试. 1 插件安装 今天在配置eclipse+selenium+ ...

  7. 银河英雄传说[NOI2002]

    题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展.       宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发 ...

  8. RabbitMQ入门-Routing直连模式

    Hello World模式,告诉我们如何一对一发送和接收消息: Work模式,告诉我们如何多管齐下高效的消费消息: Publish/Subscribe模式,告诉我们如何广播消息 那么有没有灵活强一点的 ...

  9. dfs+剪枝:poj2362

    贴题目 Square Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 24604   Accepted: 8449 Descr ...

  10. asp.net mvc项目远程发布到windows server服务器

    文章参考 自学MVC看这里——全网最全ASP.NET MVC 教程汇总 图文详解远程部署ASP.NET MVC 5项目 配置Web部署处理程序 设备及环境 一台装有windows server 201 ...