Struts2常用的几个注解

开始Struts2最常用的几个注解的学习吧。

@Action

  • 使用@Action注解改变Convention plug约定的action与url之间的映射关系。

废话少说代码说事儿。

package com.ponpon.actions;  
 
import org.apache.struts2.convention.annotation.Action;  
  
import com.opensymphony.xwork2.ActionSupport;  
  
public class myAction extends ActionSupport {  
  
  
    @Action("/v1/url")  
    public String execute() {  
  
        return SUCCESS;  
    }  
}

本例***赟tring execute()方法上使用了@Action("/v1/url"),它改变了Action 与Action URL之间的映射关系,而这种改变并不是“OverWrite”而是在原来约定的基础上增加了另外一种调用方式。

原本在没有@Action("/v1/url")注解的情况下,我们可以在浏览器中输入:http://应用服务器ip:端口/应用/myaction,即可访问到com.ponpon.actions.myAction,并最终显示http://应用服务器ip:端口/应用/myaction.jsp页面。(当然这里也可能是html等页面)。

在@Action("/v1/url")注解的情况下,除了上述的访问方式外,我们还可以在浏览器中输入:http://应用服务器ip:端口/应用

/v1/url,也可访问到com.ponpon.actions.myaction,但最终显示http://应用服务器ip:端口/应用/v1/url.jsp页面。

  • 使用@Action注解解决一个ACTION中的一个方法,响应多个不同的URL.

实际项目开发过程中有很大的几率碰到Action的处理相同,但是最终跳转的页面不同的情况。将@Actions和@Action组合起来用即可解决这样的需求。

还是先上代码

package com.ponpon.actions;  
  
import org.apache.struts2.convention.annotation.Action;  
import org.apache.struts2.convention.annotation.Actions;  
  
import com.opensymphony.xwork2.ActionSupport;  
  
public class myaction1 extends ActionSupport {  
  
    private String message;  
  
    public String getMessage() {  
        return message;  
    }  
  
    @Actions( { @Action("/one/url"), @Action("/another/url") })  
    public String execute() {  
        message = "myaction1 execute()";  
        return SUCCESS;  
    }  
}

本例***赟tring execute()方法上使用了@Actions和@Action注解。其中@Actions注解包含@Action("/one/url")和@Action("/another/url")注解。这样的注解除了可以通过http://应用服务器ip:端口/应用/myaction1访问com.ponpon.actions.myaction1,并最终显示http://应用服务器ip:端口/应用/myaction.jsp之外,还有两种访问方式:

即:

通过http://应用服务器ip:端口/应用/one/url,访问com.ponpon.actions.myaction1,并最终显示http://应用服务器ip:端口/应用/one/url.jsp。

通过http://应用服务器ip:端口/应用/another/url,访问com.ponpon.actions.myaction1,并最终显示http://应用服务器ip:端口/应用/another/url.jsp。
这样就达到了一个ACTION中的一个方法,响应多个不同的URL的效果。

  • 使用@Action注解解决一个ACTION中的多个方法,其中每个方法响应不同的URL.

这是实际项目开发过程中最常用的。
再上一个代码示例:

package com.ponpon.actions;  
  
import org.apache.struts2.convention.annotation.Action;  
  
import com.opensymphony.xwork2.ActionSupport;  
  
public class myaction2 extends ActionSupport {  
  
    private String message;  
  
    public String getMessage() {  
        return message;  
    }  
  
    @Action("/v1/url")  
    public String execute() {  
        message = "myaction2 execute()!";  
        return SUCCESS;  
  
    }  
  
    @Action("url")  
    public String doSomething() {  
        message = "myaction2 doSomething()!";  
        return SUCCESS;  
    }  
}

本例***赟tring execute()方法上使用了@Action("v1/url")注解。在StringdoSomething()方法中使用了@Action("url")。前者可以通过http://应用服务器ip:端口/应用/v1/url访问com.ponpon.actions.mycation2中的execute()方法,并最终显示http://应用服务器ip:端口/应用/v1/url.jsp。后者是通过http://应用服务器ip:端口/应用/url来访问com.ponpon.actions.myaction2中的doSomething()方法,并最终显示http://应用服务器ip:端口/应用/url.jsp。

这个例子里面需要注意的是@Action("/v1/url")和@Action("url")的不同,在“url”前并没有“/”这意味着"url"是基于myaction2的命名空间的。假设myaction2所在的包是com.ponpon.actions.aaa,那么,只有通过http://应用服务器ip:端口/应用/aaa/url才可以访问到com.ponpon.actions.aaa.myaction2,并最终显示http://应用服务器ip:端口/应用/aaa/url.jsp。而“/v1/url”是基于“/”命名空间的。

在上文中,对于结果页面采用Convention Plugin的约定,但是这一节需要利用@Results和@Result改变一下这种约定。以及@Results和@Result对类和方法进行注解后所产生的效果。
还是先看一段代码:

package com.ponpon.actions;  
  
import org.apache.struts2.convention.annotation.Action;  
import org.apache.struts2.convention.annotation.Result;  
import org.apache.struts2.convention.annotation.Results;  
  
import com.opensymphony.xwork2.ActionSupport;  
  
@Results( { @Result(name = "global", location = "/global.jsp") })  
public class myaction3 extends ActionSupport {  
  
    @Action(value = "/v1/url", results = { @Result(name = SUCCESS, location = "/v1/success.jsp"),  
            @Result(name = "failure", location = "/v1/fail.jsp") })  
    public String execute() {  
        if (System.currentTimeMillis() % 3 == 0) {  
            return "failure";  
        } else if (System.currentTimeMillis() % 3 == 1) {  
            return SUCCESS;  
        } else {  
            return "global";  
        }  
    }  
  
    @Action("globalTest")  
    public String global() {  
        return "global";  
    }  
  
    @Action(value = "globalOverWrite", results = { @Result(name = "global", location = "/v1/globalOverWrite.jsp") })  
    public String globalOverWrite() {  
        return "global";  
    }  
  
}
  • 使用@Result注解改变Convention Plugin的约定跳转页面。

在代码的String execute()方法上进行了    @Action(value = "/v1/url", results = { @Result(name = SUCCESS, location = "/H5/success.jsp"),
            @Result(name = "failure", location = "/H5/fail.jsp") })注解。如果@Action(...)没有results = { @Result(name = SUCCESS, location = "/v1/success.jsp"),
            @Result(name = "failure", location = "/H5/fail.jsp") },那么依据Convention Plugin的约定,结果页面会是/v1/url.jsp。加上红色字体的部分后,execute()方法执行后,会根据红色字体的配置,将结果跳转到对应的页面。

  • 对Action类添加@Result注解,@Result将被Action类中的所有方法所共享。

仔细观察上述代码,在HelloWorld5上进行了@Results( { @Result(name = "global", location = "/global.jsp") })注解。这意味着该类及其子类的所有方法都可以返回一个名字为“global”的结果页面。而这个页面是"/global.jsp"。这就使得不用在每个需要跳转到"/global.jsp"的方法都进行@Result(name = "global", location = "/global.jsp")注解。这在实际工作中也是非常常见的一种情况。可以仔细观察的execute()方法和global()方法。他们都可能跳转到名字为“global”的结果页面(即location属***定义的“/global.jsp”页面)。

  • 对Action类中的方法添加@Result注解,@Result将只作用于被添加的方法。Action类方法上添加的@Result优先级高于Action类上添加的@Result。(前者覆盖后者)

再仔细观察上述代码的globalOverWrite()方法,该方法也跳转到名字为“global”的页面。但是在该方法上使用了@Action(value = "globalOverWrite", results = { @Result(name = "global", location = "/v1/globalOverWrite.jsp") })注解。并且其中@Result(...)注解中也有一个名字为“global”的结果页面定义。此时,该方法的结果页面就会跳转到/H5/globalOverWrite.jsp页面而不是在类上进行注解时候的“/global.jsp”页面。

Struts2常用的几个注解,布布扣,bubuko.com

时间: 2024-12-17 13:37:40

Struts2常用的几个注解的相关文章

Struts2 常用的常量配置

在struts2-core-2.1.8.1.jar的org.apache.struts2包下面的default.properties资源文件里可以查到常用的常量配置,这些不用刻意的记住:忘记的时候可以查询.总结长用的的常量配置如下面: <!-- 设置url请求后缀 --> <constant name="struts.action.extension" value="do,action,html,htm"></constant>

struts2常用标签

Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求. Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在各种表现技术中使用.包括最常用的jsp页面,也可以说Veloc

Struts2常用标签总结

Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求. Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在各种表现技术中使用.包括最常用的jsp页面,也可以说Veloc

Struts2常用标签(转载)--【SSH】

出处:Struts2常用标签总结 Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求. Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在各种表现技术中使用.包括最常

Struts2 - 常用的constant总结

见注释 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!--

Struts2 常用的常量 constant

常用的常量配置  struts.serve.static.browserCache 该属性设置浏览器是否缓存静态内容.当应用处于开发阶段时,我们希望每次请求都获得服务器的最新响应,则可设置该属性为false. struts.enable.DynamicMethodInvocation 该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true.如果需要关闭动态方法调用,则可设置该属性为false. struts.enable.SlashesInActionNames 该属性设置St

Struts2常用标签的使用以及Action传值

为了学习struts2框架,这次练习完成了一个简单的功能,希望能够在struts表单标签的使用以及传值方面能够对大家的学习起到参考作用. 项目功能 项目的功能是在提交页面输入个人信息之后点击提交跳转到一个新的页面,新的页面会显示之前所填写的个人信息. 开发环境和工具 已配置最新版Java开发环境的Windows系统.MyEclipse 2014/2016.Tomcat服务器7.0/8.0/9.0. 内容介绍 本次练习中出现的struts2表单标签: <s:textfield/>文本输入框 &l

Spring中常用的配置和注解详解

一.  Spring中常用的配置文件详解 Spring中的配置文件详解 1.<!-- 配置注解bean的扫描路径 该配置表示从cn包下开始扫描--> <context:component-scan base-package="cn"></context:component-scan> 2.<!-- 加载资源文件 其中Location表示从哪个路径加载配置文件properties--> <context:property-placeh

Struts2 - 常用的constant标签[转]

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 把它设