理论上Struts 2.0的Action无须实现任何接口或继承任何类型,但是,我们为了方便实现Action,大多数情况下都会继承 com.opensymphony.xwork2.ActionSupport类,并重载(Override)此类里的String execute()方法。

由JavaDoc可知,ActionSupport类实现了接口。

com.opensymphony.xwork2.Action。

com.opensymphony.xwork2.LoaleProvider。

com.opensymphony.xwork2.TextProvider。

com.opensymphony.xwork2.Validateable。

com.opensymphony.xwork2.ValidationAware。

com.uwyn.rife.continuations.ContinuableObject。

java.io.Searializable。

java.lang.Cloneable。

例如下例所示:

  1. public class HelloWorld extends ActionSupport  {
  2. private String message;
  3. public String getMessage()  {
  4. return message;
  5. }
  6. public String execute()  {
  7. message = " Hello World, Now is " +
  8. DateFormat.getInstance().format( new Date());
  9. return SUCCESS;
  10. }
  11. }

然后可以配置如下映射:

  1. <package name ="ActionDemo" extends ="struts-default">
  2. <action name ="HelloWorld" class ="tutorial.HelloWorld">
  3. <result> /HelloWorld.jsp</result>
  4. </action>
  5. </package>

在默认情况下,当请求HelloWorld.do发生时,Struts 2会根据struts.xml里的Action映射集(Mapping)实例化tutoiral.HelloWorld类,并调用其execute()方 法。当然,我们可以通过以下两种方法改变这种默认调用,这个功能(Feature)有点类似Struts 1中的LookupDispathAction。

在sturts.xml中新建Action,并指明其调用的方法。

访问Action时,在Action名后加上"!xxx"(xxx为方法名)。

例如我们可以在tutorial/HelloWorld.java中加入以下方法:

  1. public String aliasAction() {
  2. message ="自定义Action调用方法";
  3. return SUCCESS;
  4. }

然后可以在sturts.xml中指定method来设置请求的函数名:

  1. <action name="AliasHelloWorld" class="
  2. tutorial.HelloWorld" method="aliasAction">
  3. <result>/HelloWorld.jsp</result>
  4. </action>

也可以直接在URL地址栏中使用"!method"来设置请求的函数名:

  1. http://localhost:8080/Struts 2Test
  2. /HelloWorld!aliasAction.action

通过上面的两个例子,细心的朋友应该可能会发现 classes/tutorial/HelloWorld.java中Action方法(execute和aliasAction)返回的都是 SUCCESS。这个属性变量笔者并没有定义,所以大家应该会猜到它在ActionSupport或其父类中定义。没错,SUCCESS在接口 com.opensymphony.xwork2.Action中定义,另外同时定义的还有ERROR、INPUT、LOGIN、NONE。

此外,笔者在配置Action时都没有为result定义名字 (name),所以它们默认都为SUCCESS。值得一提的是,Struts 2.0中的result不仅仅是Struts 1.x中Forward的别名,它可以实现除Forward外的很激动人心的功能,如将Action输出到FreeMaker模板、Velocity模 板、JasperReports和使用XSL转换等。这些都过result里的type(类型)属性(Attribute)定义的。另外,你还可以自定义 result类型。

struts 中继承ActionSupport类的更多相关文章

  1. Struts2实现Preparable接口和【struts2】继承ActionSupport类

    Struts2实现Preparable接口 实现preparable接口,实现public void prepare() throws Exception 方法.当你访问某问action指定方法之前, ...

  2. 【struts2】继承ActionSupport类

    在Struts2中,Action可以不实现任何特殊的接口或者继承特殊的类,仅仅是一个POJO(Plain Old Java Object,简单的Java对象)就可以:也可以实现Xwork2中的Acti ...

  3. struts2中的action为什么要继承ActionSupport类,不继承也可以,有什么好处?

    简单来说,有很多相关的方法都加载进来,你直接调用就行了,而且在安全上和稳定性上做了很好的处理 实际上继承ActionSupport之后 就等同于实现了很多接口 Action,Validateable, ...

  4. struts2为什么action要继承actionSupport类

    我们为了方便实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类, 并重载(Override)此类里的String execute()方法 ...

  5. Java中继承thread类与实现Runnable接口的区别

    Java中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类 在实际应用中, ...

  6. Java基础知识强化之多线程笔记05:Java中继承thread类 与 实现Runnable接口的区别

    1. Java中线程的创建有两种方式:  (1)通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中. (2)通过实现Runnable接口,实例化Thread类. 2. ...

  7. [转] Java中继承thread类与实现Runnable接口的区别

    Java中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类 在实际应用中, ...

  8. java中继承thread类的其他类的start()方法与run()方法

    java中继承thread或者实现runnable接口的类必须重写run()方法. 如果其执行了start()方法,其实就是启动了线程的run()方法. 注意:如果是实现runnable接口的类是没有 ...

  9. Java中继承,类的高级概念的知识点

    1. 继承含义 在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance). 2. 继承的优点 A.代码的可重用性 B.子类可以扩 ...

随机推荐

  1. 数据结构-模式匹配串算法(KMP)

    #include<cstdio> #include<iostream> #include<string> #include<cstring> #incl ...

  2. ActiveMQ发布-订阅消息模式(同点对点模式的区别)

    点对点与发布订阅最初是由JMS定义的.这两种模式主要区别或解决的问题就是发送到队列的消息能否重复消费(多订阅) 点对点: 消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费 ...

  3. DRF工程搭建

    环境安装与配置 DRF需要以下依赖: Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6) Django (1.10, 1.11, 2.0) DRF是以Django扩展应用的方式 ...

  4. 使用JFreeChart生成报表

    1.JFreeChart简介    JFreeChart是JAVA平台上的一个开放的图表绘制类库.它完全使用JAVA语言编写,是为applications,servlets以及JSP等使用所设计.  ...

  5. Fiddler用AutoResponder实现app升级异步更新

    先说一下我自己理解的异步更新:用app异步升级举例,app是否升级的检查是在启动app时访问服务器的,把app本地的最新版本号与服务器端的最新版本号做对比,假如不一致,则提示升级.但本次已经打开使用a ...

  6. iview框架 两侧弹框 出现第二层弹框 一闪而过的问题

    分析原因:寡人怀疑可能是,两层弹出框 采用的是一个开关值,发生了覆盖 解决方式 是在第二层弹框外套层计时器 源代码如下: 修改后为:

  7. getshell不用英文数字 或者不用下划线

    getshell不用英文字母和数字 上代码 实际代码没有echo strlen($code);我测试的时候加上去的 思路是eval执行getFlag函数. 过滤了字母和数字,长度得小于40 直接看pa ...

  8. Python+Selenium练习篇之7-利用name定位元素

    本文介绍如何通过节点中name的值来定位这个web元素.还是来看百度首页搜索输入框,通过name的值来定位. 相关脚本代码: # coding=utf-8 from selenium import w ...

  9. Python+Selenium基础篇之3-打开和关闭IE/Chrome浏览器

    前面文章介绍了,如何调用webdriver接口方法来打开和关闭Firefox浏览器,本文介绍如何打开IE和Chrome浏览器.web项目,需要做兼容性测试,最重要的是浏览器兼容性测试.如果只考虑win ...

  10. Adaboost和GBDT的区别以及xgboost和GBDT的区别

    Adaboost和GBDT的区别以及xgboost和GBDT的区别 以下内容转自 https://blog.csdn.net/chengfulukou/article/details/76906710 ...