Convention Plugin
原文:
http://cwiki.apache.org/WW/convention-plugin.html
翻译:石太祥
(
ealpha@gmail.com
http://www.lalfa.com
)
·
1 Introduction
·
2 Setup
·
3 Converting a Codebehind based application to Convention
·
4 Hello world
·
5 Code behind hello world
·
6 Results and result codes
·
7 Chaining
·
8 XWork packages
·
9 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
从
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"
/>
到目前为止,你已经在你项目中添加了
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
规则来找到结果页面。
我们继续扩展本例并添加代码实现类。为了实现本功能,首先需要
Convention
能正确找到我们的
Action
类,默认情况下,
Convention
会找到
com.opensymphony.xwork2.Action
的实现类,或制定包中以
Action
结尾的类
action
Convention
使用以下方法来搜索类路径,首先,
Convention
会从根
package
中寻找包名含有
struts
, struts2
, action
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
映射到这个
分享到:
相关推荐
Struts2 Convention Plugin 是从 Struts2.1 版本开始引入的一个插件,它的主要目标是实现 Struts2 框架的零配置。通过约定优于配置的原则,开发者可以更加专注于业务逻辑,减少大量的 XML 配置工作。以下是 ...
Struts2 Convention Plugin是Apache Struts框架的一个重要组成部分,它为开发者提供了一种更为便捷的配置方式,使得在Struts2应用中实现MVC模式变得更加简单。这个测试项目旨在帮助我们理解和掌握如何在实际开发中...
然而,随着版本的更新,Struts2引入了一个名为Convention Plugin的新特性,旨在简化配置过程,实现所谓的“零配置”开发。 **什么是Struts2 Convention Plugin?** Convention Plugin是Struts2的一个插件,它基于...
Struts2 Convention Plugin是Apache Struts框架的一个重要插件,主要目标是简化MVC(Model-View-Controller)架构中的配置工作。这个插件引入了一种约定优于配置(Convention over Configuration)的理念,允许...
### Struts2 Convention Plugin详解 #### 一、引言 从Struts2的2.1版本开始,Convention Plugin被引入,旨在替代原有的Codebehind Plugin,实现Struts2框架下的零配置理念。这一转变简化了应用程序的开发流程,...
Struts2 Convention Plugin 应用详解 Struts2 是一个非常流行的开源 Java 框架,用于构建基于 Model-View-Controller(MVC)架构的Web应用程序。它提供了丰富的功能和灵活性,使得开发者能够更高效地开发Web应用。...
struts2-convention-plugin-2.3.24.1
struts2-convention-plugin-2.3.15.1.jar
自Struts2.1版本开始,引入了一个重要的插件——Convention Plugin,该插件通过一系列约定简化了Struts2的配置过程,使得开发者可以更加专注于业务逻辑而非繁琐的配置。 #### 二、Struts2 Convention Plugin核心...
struts2-convention-plugin-2.1.6.jar
为了在项目中启用Convention插件,首先需要添加`struts2-convention-plugin`到项目的依赖中。对于Struts2.1.6版本来说,需要将`struts-Convention-plugin-2.1.6.jar`文件放置于项目的`WEB-INF/lib`目录下。 #### 2....
struts2-convention-plugin-2.3.1.jar,使用注解的方式代替xml配置action,必须要引用这个包。
struts2-convention-plugin-2.1.8.jar
struts2-convention-plugin-2.3.32
struts2-convention-plugin-2.3.24.jar
struts2-convention-plugin-2.3.1.2.jar