简介

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

在 Struts2 框架中,Action 是框架的核心类,被称为业务逻辑控制器,主要用于实现对用户请求的处理。

一个 Action 类代表一次请求或调用,每个请求的动作都对应一个相应的 Action 类。也就是说,用户的每次请求,都会转到一个相应的 Action 类中,由这个 Action 类进行处理。

简而言之,Action 就是用于处理一次用户请求的对象。

Action的创建

注意:action类的全路径(即包名)必须含有”action”的词汇。

① 创建一个POJO类 - hibernate自动会封装成PO类

public class DefaultAction {

    public String execute() throws Exception {
System.out.println("DefaultAction...run");
return "";
}
}

② 创建一个类实现一个实现Action接口

import com.opensymphony.xwork2.Action;

public class ImplAction implements Action {

    public String execute() throws Exception {
System.out.println("ImplAction...run");
return "defaultAction";
}

Action 接口位于 com.opensymphony.xwork2 包中,并且接口中只定义了五个字符串常量和一个 execute() 方法。

其中,execute() 方法是 Action 类的默认请求处理方法,该方法返回一个字符串,而上面五个字符串常量的作用是统一 execute() 方法的返回值。

③ 创建一个类继承ActionSupport类

import com.opensymphony.xwork2.ActionSupport;

public class ExtAction extends ActionSupport {

    @Override
public String execute() throws Exception {
System.out.println("ExtAction...run");
return "";
} }

ActionSupport 是 Action 接口的默认实现类,所以继承 ActionSupport 就相当于实现了 Action 接口。

除 Action 接口以外,ActionSupport 类还实现了 Validateable、ValidationAware、TextProvider、LocaleProvider 和 Serializable 等接口,这为用户提供了更多的功能。

ActionSupport 类中提供了许多默认方法,这些默认方法包括数据校验的方法、默认的处理用户请求的方法等。

如果开发者的 Action 类继承 ActionSupport 类,会大大简化 Action 的开发

配置Action

配置 Action 主要就是配置 struts.xml 文件中 Action 的映射信息。

Action 映射是指将一个请求的 URL 映射到一个 Action 类,当一个请求匹配某个 Action 名称时,Struts2 框架就使用这个 Action 确定如何处理请求。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts> <constant name="struts.devMode" value="true"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <!-- name:配置包名 ;namespace:给action的访问路径定义一个命名空间;extends:固定形式继承struts-default -->
<package name="MyPackage" namespace="/" extends="struts-default">
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="LoginAction_*" class="com.sikiedu.web.UserAction" method="{1}">
<!-- 重定向 -->
<result name="success" type="redirect">/index.html</result>
<!-- 默认为转发 -->
<result name="error">/login.jsp</result>
</action> <action name="LoginActionDefault" class="com.sikiedu.web.DefaultAction" method="execute"></action>
<action name="LoginActionImpl_*" class="com.sikiedu.web.ImplAction" method="{1}">
<!-- 转发到LoginActionDefault -->
<result name="defaultAction" type="chain">LoginActionDefault</result>
<!-- 重定向到Action(LoginAction_*) -->
<result name="toLogin" type="redirectAction">
<param name="actionName">LoginAction_login</param>
<param name="username">${username}</param>
<param name="password">${password}</param>
</result>
</action>
</package>
</struts>

action常用属性说明

① package标签(strust.xml只存在一个package相当于一个struts的项目)
  ● name:定义一个包的名称,用来指定包名,它必须唯一;建议跟namespace保持一致
  ● namespace:用来action的访问路径定义一个命名空间;与URL中的路径保持一致;
  ● extends:指定继承自哪个包。一般值是struts-default,struts-default包是 在struts-default.xml文件中声明的。
  ● abstruct:它代表当前包是一个抽象的,主要是用于被继承。 ② action标签(对应相应的以action结尾的类,一个package可以有多个action)
  ● name:action访问的资源路径,与package的namespace联合使用。对应Servlet中的:url-pattern;
  ● class:表示当前action的完整类名。
  ● method:表示调用action类中的哪个方法处理请求。 ③ result标签(用于显示视图的结果)
  ● name:与action中的的method方法的返回值进行匹配,来确定跳转路径。默认是"success"
  ● type:是用于指定打开结果对应页面或资源的方式。默认是"dispatch"

动态方法调用

由于在一个 Action 类中可能有多个业务逻辑处理方法,在配置 Action 时,就需要使用多个 <action> 元素。在实现同样功能的情况下,为了减少 struts.xml 配置文件的代码量,可以借助于通配符映射信息。

<constant name="struts.devMode" value="true"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="MyPackageName" namespace="/" extends="struts-default">
  <global-allowed-methods>regex:.*</global-allowed-methods>
  <action name="LoginActionImpl_*" class="com.sikiedu.web.ImplAction" method="{1}">
    ...
  </action>
</package>

method 属性值中的数字 1 表示匹配第 1 个 *。当客户端发送 /user/userAction_login.action 这样的请求时,<action> 元素的 name 属性值就被设置成 userAction_login,method 属性值就被设置成 login。

当客户端发送 /user/userAction_register.action 这样的请求时,<action> 元素的 name 属性值就被设置为 userAction_register,method 属性值也被设置成 register。

对 <result> 元素也可以采用通配符配置:

<result>/(1).jsp</result>

当客户端发送 userAction_login 这样的请求时,<result> 元素被设置成跳转到 login.jsp 页面。当客户端发送 userAction_register 这样的请求时,<result> 元素被设置成跳转到 register.jsp 页面。

参数传递

接收参数

- 属性驱动
  1.在 Action 类中创建与请求参数匹配的属性,
  2.为属性提供get/set方法
- 模型驱动
  1.让 Action 类要实现一个指定接口 ModelDriven;
  2.实例化模型对象(就是要new出来javaBean);
  3.重写getModel方法将实例化的模型返回。

传递参数:ActionContext、ServletActionContext

① ActionContext生命周期是一次请求,每次请求都会创建一个对应的ActionContext对象,请求结束时销毁ActionContext对象。

  就和request一样,它本身也具备了request域的功能,可以从后台携带数据到前台。

② 通过ActionContext的子类ServletActionContext可以直接获得session和application等多个域对象,操作方便。

③ ActionContext本身也是一个map,它存储了很多对象例如request、response等多个对象。

//通过 ActionContext 类中的方法调用,分别在 request、application 和 session 中放入了("name","akai")键值对。
ActionContext.getContext().put("name", "akai");
ActionContext.getContext().getSession().put("name", "akai");
ActionContext.getContext().getApplication().put("name", "akai"); //得到原生的Request、Response等域。
ServletActionContext.getRequest().setAttribute("message","通过ServletActionContext类访问Servlet API");
ServletActionContext.getRequest().setAttribute("message","通过ServletActionContext类访问Servlet API");
ServletActionContext.getResponse().setAttribute("message","通过ServletActionContext类访问Servlet API");

- ActionContext:常见方法

方法声明 功能描述
void put(String key,Object value) 将key-value键值对放入ActionContext中,模拟Servlet API中的HttpServletRequest的setAttribute()方法
Object get(String key) 通过参数key查找当前ActionContext中的值
Map<String,Object> getApplicatin() 返回一个Application级的Map对象
static ActionContext getContext() 获取当前线程的ActionContext对象
Map<String,Object> getParameter() 返回一个包含所有HttpServletRequest参数信息的Map对象
Map<String,Object> getSession() 返回一个Map类型的HttpSession对象

- ServletActionContext:常见方法

方法声明 功能描述
static PageContext getPageContext() 获取Web应用的 PageContext  对象
static HttpServletRequest getResponse() 获取Web应用的 HttpServletRequest  对象
static HttpServletResponse getResponse() 获取Web应用的 HttpServletResponse  对象
static ServletContext getServletContext() 获取Web应用的 ServletContext 对象

Action详解的更多相关文章

  1. (七)Transformation和action详解-Java&Python版Spark

    Transformation和action详解 视频教程: 1.优酷 2.YouTube 什么是算子 算子是RDD中定义的函数,可以对RDD中的数据进行转换和操作. 算子分类: 具体: 1.Value ...

  2. Spring MVC 学习总结(三)——请求处理方法Action详解

    Spring MVC中每个控制器中可以定义多个请求处理方法,我们把这种请求处理方法简称为Action,每个请求处理方法可以有多个不同的参数,以及一个多种类型的返回结果. 一.Action参数类型 如果 ...

  3. Struts2学习笔记(三)——Action详解

    Action是用于处理请求操作的,它是由StrutsPrepareAndExceuteFilter分发过来的. 1.Action的创建方式 1) POJO类(PlainOldJavaObjects简单 ...

  4. Struts2 配置Action详解

     Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实 ...

  5. vuex 源码分析(五) action 详解

    action类似于mutation,不同的是Action提交的是mutation,而不是直接变更状态,而且action里可以包含任意异步操作,每个mutation的参数1是一个对象,可以包含如下六个属 ...

  6. Odoo中的五种Action详解

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826232.html Odoo中的五种action都是继承自ir.actions.actions模型实现的 ...

  7. Struts 2 配置Action详解_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 实现了Action处理类之后,就可以在struts.xml中配置该Action,从而让Struts 2框架知道哪个Act ...

  8. 转载 Struts2的配置 struts.xml Action详解

    在学习struts的时候,我们一定要掌握struts2的工作原理.只有当我们明确了在struts2框架的内部架构的实现过程,在配置整个struts 的框架时,可以很好的进行逻辑上的配置.接下来我就先简 ...

  9. sparkStreaming的transformation和action详解

    根据Spark官方文档中的描述,在Spark Streaming应用中,一个DStream对象可以调用多种操作,主要分为以下几类 Transformations Window Operations J ...

随机推荐

  1. http://ajax.open-open.com/ ajax开源家园

    http://ajax.open-open.com/ 本站为广大OPEN爱好者搭建了一个OPEN家园,大家可以方便快捷地发布日志.上传照片,分享生活中的精彩瞬间:与好友一起玩转游戏,增加好友感情:创建 ...

  2. SpringCloud学习笔记(八):Zuul路由网关

    概述 是什么? Zuul包含了对请求的路由和过滤两个最主要的功能: 其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请 ...

  3. jquery判断是pc端还是移动端

    原文地址:https://www.cnblogs.com/mo-cha/p/6038872.html $(function(){ var system = { win: false, mac: fal ...

  4. Android Support Library详细介绍

    网上对Android Support Library中各个依赖包介绍的中文资料太少了,结合官方文档和有限的参考资料做了一次总结,有描述得不对的地方还请指正. 一.主工程.依赖包.jar包.androi ...

  5. 常用终止python程序方法

    方法1:采用sys.exit(0)正常终止程序,从图中可以看到,程序终止后shell运行不受影响. 方法2:采用os._exit(0)关闭整个shell,从图中看到,调用sys._exit(0)后整个 ...

  6. <day002>Selenium基本操作+unittest测试框架

    任务1:Selenium基本操作 from selenium import webdriver # 通用选择 from selenium.webdriver.common.by import By # ...

  7. <Python基础>装饰器的基本原理

    1.装饰器 所谓装饰器一般是对已经使用(上线)的函数增加功能. 但是因为一般的大公司的严格按照开放封闭原则(对扩展是开放的,对修改是封闭的),不会让你修改原本的函数. 装饰器就是在不改变原本的函数且不 ...

  8. selenium基础(下拉菜单操作)

    selenium基础(下拉菜单操作) 非select/option元素: 1.触发下拉列表出现 2.等待下拉列表中的元素出现,然后进行选择元素即可. select/option元素: 下拉框操作-Se ...

  9. JS流程控制语句 继续循环continue continue的作用是仅仅跳过本次循环,而整个循环体继续执行。

    继续循环continue continue的作用是仅仅跳过本次循环,而整个循环体继续执行. 语句结构: for(初始条件;判断条件;循环后条件值更新) { if(特殊情况) { continue; } ...

  10. vc 获取窗口标题GetWindowText

    今天在写一个模块,具体功能是想时刻监控用户当前活动窗口,需要获取窗口标题以及其它相关信息,记得API GetWindowText就是用来做这个的,结果试了半天,有的获取成功了有的获取失败了,而且有关汉 ...