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

Struts2 Convention plugin

阅读更多

Convention Plugin

原文: http://cwiki.apache.org/WW/convention-plugin.html

翻译:石太祥 ealpha@gmail.com    http://www.lalfa.com

·                                 Introduction

·                                 Setup

·                                 Converting a Codebehind based application to Convention

·                                 Hello world

·                                 Code behind hello world

·                                 Results and result codes

·                                 Chaining

·                                 XWork packages

·                                 Annotation reference

o                                                        9.1 Action annotation

o                                                        9.2 InterceptorRef annotation

o                                                        9.3 Result annotation

o                                                        9.4 Namespace annotation

o                                                        9.5 ResultPath annotation

o                                                        9.6 ParentPackage annotation

o                                                        9.7 ExceptionMapping Annotation

·                                 10 Actions in jar files

·                                 11 Automatic configuration reloading

·                                 12 Troubleshooting

o                                                        12.1 Tips

o                                                        12.2 Common Errors

·                                 13 Configuration reference

Introduction

struts2.1 版本开始, Convention Plugin 作为替换替换 Codebehind Plugin 来实现 Struts2 的零配置。

  • 包命名习惯来指定 Action 位置
  • 命名习惯制定结果(支持 JSP,FreeMarker 等)路径
  • 类名到 URL 的约定转换
  • 包名到命名空间( namespace )的约定转换
  • 遵循 SEO 规范的链接地址(即:使用 my-action 来替代 MyAction
  • 基于注解的 Action
  • 基于注解的拦截机( Interceptor
  • 基于注解的命名空间( Nameespace
  • 基于注解的 XWork
  • 默认 action 以及默认的结果(比如: /products 将会尝试寻找 com.example.actions.Products com.example.actions.products.Index 进行处理)

无需配置 Convention 即可使用 Convention Convention 的某些约束习惯可以通过配置属性来控制,您也可以在类中覆写其中的方法来达到扩展目地。

安装

使用 Convention 插件,你需要将其 JAR 文件放到你应用的 WEB-INF/lib 目录中,你也可以在你 Macen 项目的 POM 文件中添加下面包依赖

<dependency>

  <groupId> org.apache.struts </groupId>

  <artifactId> struts2-convention-plugin </artifactId>

  <version> 2.1.6 </version>

</dependency>

转换基于 Codebehind 项目到 Convention

跳转到 此页面 ,查看需要修改的变化和小提示

如果你想在你系统中结合 Convention 插件使用 REST 。需要在你项目的 struts.xml 中添加如下配置

<constant name= "struts.convention.action.suffix" value= "Controller" />

<constant name= "struts.convention.action.mapAllMatches" value= "true" />

<constant name= "struts.convention.default.parent.package" value= "rest-default" />

Hello world

到目前为止,你已经在你项目中添加了 Convention 插件支持,首先我们从一个非常简单的例子开始入手。本例中,我们将演示根据访问 URL 来访问固定的 Action ,默认情况下, Convention 会默认所有的结果页面都存储在 WEB-INF/content 下,你也可以在 struts properties 文件中设定 struts.convention.result.path 的值到一个新的路径。路径最后 “/” 是不必要的, Convention 会自动进行处理。以下是本例的 JSP 文件

WEB-INF/content/hello-world.jsp

<html>

<body>

Hello world!

</body>

</html>

启动 Tomcat 或其他你所使用的 JEE 容器,在浏览器访问 http://localhost:8080/hello-world 你可看到以下信息:

WEB-INF/content/hello-world.jsp

Hello world!

这表明, Convention 已经能正常运行,并找到了结果。即使在没有 action 存在情况下, convention 也会根据 URL 规则来找到结果页面。

Code behind hello world

我们继续扩展本例并添加代码实现类。为了实现本功能,首先需要 Convention 能正确找到我们的 Action 类,默认情况下, Convention 会找到 com.opensymphony.xwork2.Action 的实现类,或制定包中以 Action 结尾的类 action

Convention 使用以下方法来搜索类路径,首先, Convention 会从根 package 中寻找包名含有 struts struts2action  or actions 的任意 packages 。下一部, Convention 从前一步找到的 package 以及其子 package 中寻找 com.opensymphony.xwork2.Action 的实现以及以 Action 结尾的类,下面为 Convention 寻找的类

Classes

com.example.actions.MainAction

com.example.actions.products.Display ( implements com.opensymphony.xwork2.Action)

com.example.struts.company.details.ShowCompanyDetailsAction

每一个被 Convention 找到 action 都会对应一个明确的 URL 地址, URL package 的名字以及 Action 类名为基础。

首先 Convention 从根 package 以及类所在的 package 名来确定对应的 URL 中的路径( namespace ),以下就是根据 package 确定的 URL namespace

Namespaces

com.example.actions.MainAction -> /

com.example.actions.products.Display -> /products

com.example.struts.company.details.ShowCompanyDetailsAction -> /company/details

接下来 Convention 需要确定 URL 的具体资源部分。第一步取消类名中的 Action ,并以 ”-” 来分割类名的其他部分,且将每个分部的首字母转为小写。如下所示

Full URLs

com.example.actions.MainAction -> /main

com.example.actions.products.Display -> /products/display

com.example.struts.company.details.ShowCompanyDetailsAction -> /company/details/show-company-details

你也可以通过配置 struts.convention.exclude.packages 来告诉 Convention 忽略某些包,也可以设置 struts.convention.package.locators 用来更改 Convention 默认的根 packages ,最后你还可以设置  struts.convention.action.packages . 来让 Convention 只搜索特定 package 下的 Action

以下就是 action 类的实现代码:

com.example.actions.HelloWorld

package com.example.actions;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorld extends ActionSupport {

  private String message;

  public String getMessage() {

    return message;

 }

  public String execute() {

    message = "Hello World!" ;

    return SUCCESS;

 }

}

编译以上代码,并将其 class 放到 WEB-INF/classes 中, Convention 将会将 /hello-world 映射到这个

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics