`
tanghui
  • 浏览: 7285 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java零配置详解(二)

阅读更多

另外的配置说明如下:

 

Using our example from above, the XWork package for our action would be:

上例中,action对应的 XWORK package如下:

XWork package naming

com.example.actions#/#conventionDefault

Annotation 参考

Convention使用某些注解语句来覆写插件默认的actionurl的映射和自动搜索渲染到的页面。此外,你还可以修改action配置文件中定义的父XWORK的包信息

Action annotation

Convention 插件可以使用Action注解语句来修改action返回的URL地址。本注解同时也允许包含在Actions语句中,用来使一个action对应于多个URL。在action 方法中使用本注解语句,可以参考以下代码

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

 

public class HelloWorld extends ActionSupport {

  @Action("/different/url")

  public String execute() {

    return SUCCESS;

  }

}

现在我们action类中将使用 /different/url 来替代默认的 /hello-world,如果未指定@Result(参考下节),result的路径将会使用actionnamespace,上面的例子中将会返回一下路径 "/WEB-INF/content/different/url.jsp"

Action类中的单个方法可以使用Actions 注解来映射多个地址。

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

 

public class HelloWorld extends ActionSupport {

  @Actions({

    @Action("/different/url"),

    @Action("/another/url")

  })

  public String execute() {

    return SUCCESS;

  }

}

另外的 Action Actions 的使用方法是,在单个action类中定义多个action方法,每个方法对应一个不同的地址。下面是多个action方法的范例:

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

 

public class HelloWorld extends ActionSupport {

  @Action("/different/url")

  public String execute() {

    return SUCCESS;

 

  }

 

  @Action("url")

  public String doSomething() {

    return SUCCESS;

  }

}

前面的例子中,第二个URL地址是不推荐的,上面url将使用java 包名作为namespace,而不会直接使用Action注解的地址。

Interceptor interceptor stacks 同样可以使用interceptorRefs 注解来指定。下例演示了在action中同时添加"validation""defaultStack"拦截机。

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

 

public class HelloWorld extends ActionSupport {

  @Action(interceptorRefs={@InterceptorRef("validation"), @InterceptorRef("defaultStack")})

  public String execute() {

    return SUCCESS;

  }

 

  @Action("url")

  public String doSomething() {

    return SUCCESS;

  }

}

可以通过params属性来将参数传递给结果。属性的值是一个偶数个元素的String的数组,由形如{"key0", "value0, "key1", "value1" ... "keyN", "valueN"}所组成,举个例子:

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

 

public class HelloWorld extends ActionSupport {

  @Action(interceptorRefs=@InterceptorRef(value="validation",params={"programmatic", "false", "declarative", "true}))

  public String execute() {

    return SUCCESS;

  }

 

  @Action("url")

  public String doSomething() {

    return SUCCESS;

  }

}

如果未指定interceptors,将会使用默认的。

InterceptorRef annotation

Interceptors 可以在方法级进行指定,使用Action 注解或在类上使用InterceptorRefs注解。Class级别的拦截会被应用到类包含的所有action上。可以参考下面例子:

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

 

@InterceptorRefs({

    @InterceptorRef("interceptor-1"),

    @InterceptorRef("defaultStack")

})

public class HelloWorld extends ActionSupport {

  @Action(value="action1", interceptorRefs=@InterceptorRef("validation"))

  public String execute() {

    return SUCCESS;

  }

 

  @Action(value="action2")

  public String doSomething() {

    return SUCCESS;

  }

}

下面的拦截机将会应用到“action1”中:"interceptor-1","defaultStack"中的所有拦截机, "validation"

"defaultStack"中的所有拦截机也会对”action2”生效

Result annotation

Convention 允许action类为每个action定义不同的resultsresults分为两类,全局的(global)和本地的(local),全局results可以被action类中所有的action分享,这种resultsaction类上使用注解进行声明。本地results只能在action方法上进行声明。下面是两种results注解的例子:

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

import org.apache.struts2.convention.annotation.Result;

import org.apache.struts2.convention.annotation.Results;

 

@Results({

  @Result(name="failure", location="fail.jsp")

})

public class HelloWorld extends ActionSupport {

  @Action(value="/different/url",

    results={@Result(name="success", location="http://struts.apache.org", type="redirect")}

  )

  public String execute() {

    return SUCCESS;

  }

 

  @Action("/another/url")

 

  public String doSomething() {

    return SUCCESS;

  }

}

参数同样可以在results中通过params属性进行传递,和上面一样,由形如{"key0", "value0, "key1", "value1" ... "keyN", "valueN"}所组成。可参考下例:

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

import org.apache.struts2.convention.annotation.Result;

import org.apache.struts2.convention.annotation.Results;

 

public class HelloWorld extends ActionSupport {

  @Action(value="/different/url",

    results={@Result(name="success", type="httpheader", params={"status", "500", "errorMessage", "Internal Error"})}

  )

  public String execute() {

    return SUCCESS;

  }

 

  @Action("/another/url")

  public String doSomething() {

    return SUCCESS;

  }

}

Namespace annotation

namespace注解允许action使用指定的路径替代默认的以package包名作为路径。本注解可以在action类或Java 包中的package-info.java类中进行设置。设置在action类中的namespace注解,对本action类中所有的action都有效,这是不完全合乎规范的action URL处理地址。设置在package-info.java中的namespace注解,将会改变本java包下所有的action的默认namespace。下面是此注解的例子:

com.example.actions.HelloWorld

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Namespace;

 

@Namespace("/custom")

public class HelloWorld extends ActionSupport {

  @Action("/different/url")

  public String execute() {

    return SUCCESS;

  }

 

  @Action("url")

  public String doSomething() {

    return SUCCESS;

  }

}

在上例中的action 会对2个不同的地址响应:/different/url  /custom/url

下面是一个在package-info.java中使用namespace注解的例子

com/example/actions/package-info.java

@org.apache.struts2.convention.annotation.Namespace("/custom")

package com.example.actions;

这会改变com.example.actions包下所有action的默认namespace请注意一点,本注解不会应用到子一级的包中。

border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #f0f0f0; padding-bottom: 1pt; border-left: me
分享到:
评论

相关推荐

    Tomcat与java web 开发技术详解-孙卫琴-第二版

    《Tomcat与Java Web开发技术详解》是孙卫琴老师撰写的一本深入解析Java Web开发和Tomcat服务器的著作,其第二版进一步更新了内容,提供了更为详尽的指导。这本书针对初学者和有一定经验的开发者,旨在帮助读者掌握...

    Java零基础 - 环境变量PATH配置.md

    ### Java零基础-环境变量PATH配置详解 #### 一、引言 对于初学者来说,配置Java开发环境可能是一项挑战性的任务。特别是当涉及到环境变量的设置时,很多新手可能会感到困惑。本篇文章旨在帮助Java初学者理解如何...

    Struts2配置精要之常量constant配置详解(包括零配置Convention 的常量)

    本文将深入探讨Struts2中的常量配置,包括基本的constant配置以及零配置(Convention)的常量。 首先,让我们理解什么是Struts2的常量配置。在Struts2中,常量配置是通过`struts.xml`或`struts.properties`文件进行...

    Java零基础基础教程

    ### Java零基础基础教程知识点详解 #### 一、Java简介 - **定义**:Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems公司于1995年推出。 - **特点**: - 跨平台性(Write Once, Run Anywhere,即编译...

    SpringMVC4零配置

    **SpringMVC4零配置详解** SpringMVC作为Spring框架的一部分,是用于构建Web应用程序的控制器层。在SpringMVC4版本中,引入了“零配置”概念,旨在简化开发流程,提高开发效率。本文将深入探讨SpringMVC4的零配置...

    Java零基础 - classpath环境变量详解.md

    ### Java零基础 - classpath环境变量详解 #### 1. classpath环境变量的定义与作用 **classpath** 是一个环境变量,在Java编程中扮演着极其重要的角色。它指定了Java虚拟机(JVM)搜索和加载类文件(class files)的...

    java视频教程_黑马Java零基础辅导班[第二期]08天课件源码

    本教程“java视频教程_黑马Java零基础辅导班[第二期]08天课件源码”针对初学者,通过8天的课程设计,深入浅出地讲解了Java的基础知识,并提供了丰富的实践代码示例,旨在帮助学员快速掌握Java编程。 1. **Java开发...

    学习hadoop--java零基础学习hadoop手册

    **标题**:“学习hadoop--java零基础学习hadoop手册” **描述**:“学习hadoop--java零基础学习hadoop手册” 本手册旨在为完全没有Java基础的学习者提供一个从零开始学习Hadoop的路线图。Hadoop是一个能够处理大量...

    java视频教程_黑马Java零基础辅导班[第二期]09天课件源码

    本教程针对零基础的学习者,通过“黑马Java零基础辅导班[第二期]09天课件源码”,旨在帮助大家快速理解和实践Java编程。 教程内容分为理论讲解和实战演练两部分。理论部分涵盖了Java语言的基础概念,包括: 1. **...

    Java基础详解(基础)

    标题《Java基础详解(基础)》所涵盖的知识点主要针对Java入门新手,详细讲解了Java语言的基本知识和开发环境的搭建方法。该部分涉及了Java的多个版本,包括JavaSE、JavaEE和JavaME,并强调了对于不同版本的JDK新...

    Java零基础 - 环境变量PATH.md

    ### Java零基础 - 环境变量PATH详解 #### 一、引言 对于初学者而言,正确地配置Java开发环境是学习Java编程的第一步。本文将深入介绍如何配置环境变量`PATH`,并提供相应的示例源码来验证配置是否成功。无论您是...

    java 笔记详解

    总的来说,"Java笔记详解"覆盖了从零开始学习Java的所有基础环节,包括环境配置、基础语法、开发工具的使用以及必要的辅助工具,是Java初学者理想的参考资料。通过深入学习和实践,可以逐步掌握这门强大的编程语言,...

    JAVA编程语言视频详解.rar

    这个名为"JAVA编程语言视频详解.rar"的压缩包文件包含了一套详细的Java教学视频,由知名专家讲解,旨在帮助学习者从零基础开始理解和掌握Java编程。 首先,Java的环境编译是学习过程中不可或缺的一环。Java开发需要...

    【2024最新版】Java JDK安装配置全攻略:图文详解

    - 零基础Java学习者 - 需要安装配置JDK的开发者 - 对Java环境搭建感兴趣的爱好者 **使用场景及目标**: - 个人学习Java编程时,搭建开发环境 - 项目开发中,确保团队成员使用统一的Java开发环境 - 作为教学辅助资料...

    Java零基础 - main方法.md

    ### Java零基础-main方法 #### 源码详解与运行过程 本文主要针对Java初学者,详细介绍`main`方法的基本结构、语法以及如何编写和运行一个最简单的Java程序。此外,还会涉及如何利用`System.out.println`方法输出...

    Java使用路径通配符加载Resource与profiles配置使用详解

    Java使用路径通配符加载Resource与profiles配置使用详解 本文主要介绍了Java使用路径通配符加载Resource与profiles配置使用详解。通过示例代码,详细介绍了Java使用路径通配符加载Resource与profiles配置的使用方法...

Global site tag (gtag.js) - Google Analytics