`

Struts2 Convention Plugin(一)

阅读更多

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文件中添加下面包依赖

 
1.<dependency> 
2.    <groupId>org.apache.struts</groupId> 
3.    <artifactId>struts2-convention-plugin</artifactId> 
4.    <version>2.1.6</version> 
5.</dependency>

转换基于Codebehind项目到Convention
跳转到此页面,查看需要修改的变化和小提示
如果你想在你系统中结合Convention插件使用REST。需要在你项目的struts.xml中添加如下配置

 
1.<constant name="struts.convention.action.suffix" value="Controller"/> 
2.<constant name="struts.convention.action.mapAllMatches" value="true"/> 
3.<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

 
1.<html> 
2.<body> 
3.    Hello world! 
4.</body> 
5.</html>
启动Tomcat或其他你所使用的JEE容器,在浏览器访问http://localhost:8080/hello-world , 你可看到以下信息:
Hello world!
这表明,Convention已经能正常运行,并找到了结果。即使在没有action存在情况下,convention也会根据URL规则来找到结果页面。

Code behind hello world
我们继续扩展本例并添加代码实现类。为了实现本功能,首先需要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寻找的类

 
1.com.example.actions.MainAction 
2.com.example.actions.products.Display (implements com.opensymphony.xwork2.Action) 
3.com.example.struts.company.details.ShowCompanyDetailsAction 
4.com.example.actions.MainAction
5.com.example.actions.products.Display (implements com.opensymphony.xwork2.Action)
6.com.example.struts.company.details.ShowCompanyDetailsAction

每一个被Convention找到action都会对应一个明确的URL地址,URL以package的名字以及Action类名为基础。
首先Convention从根package以及类所在的package名来确定对应的URL中的路径(namespace),以下就是根据package确定的URL namespace

 
1.com.example.actions.MainAction -> / 
2.com.example.actions.products.Display -> /products 
3.com.example.struts.company.details.ShowCompanyDetailsAction -> /company/details

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

 
1.com.example.actions.MainAction -> /main 
2.com.example.actions.products.Display -> /products/display 
3.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类的实现代码:

 
1.package com.example.actions; 
2.  
3.import com.opensymphony.xwork2.ActionSupport;  
4.  
5.public class HelloWorld extends ActionSupport { 
6.    private String message; 
7.  
8.    public String getMessage() { 
9.        return message; 
10.    } 
11.  
12.    public String execute() { 
13.        message = "Hello World!"; 
14.        return SUCCESS; 
15.    } 
16.}

编译以上代码,并将其class放到 WEB-INF/classes中,Convention将会将 /hello-world 映射到这个Action. 部署上面的类以后,我们在JSP文件中添加打印message的语句,具体代码如下:

 
1.<html> 
2.<body> 
3.    The message is ${message} 
4.</body> 
5.</html>

启动应用服务器,在浏览器访问 http://localhost:8080/hello-world 地址,我们看到如下结果界面:
The message is Hello World!

分享到:
评论

相关推荐

    Struts2 Convention Plugin中文文档 Annotion

    Struts2 Convention Plugin 是从 Struts2.1 版本开始引入的一个插件,它的主要目标是实现 Struts2 框架的零配置。通过约定优于配置的原则,开发者可以更加专注于业务逻辑,减少大量的 XML 配置工作。以下是 ...

    struts2 convention plugin(插件) 测试项目

    Struts2 Convention Plugin是Apache Struts框架的一个重要组成部分,它为开发者提供了一种更为便捷的配置方式,使得在Struts2应用中实现MVC模式变得更加简单。这个测试项目旨在帮助我们理解和掌握如何在实际开发中...

    struts2采用convention-plugin实现零配置

    然而,随着版本的更新,Struts2引入了一个名为Convention Plugin的新特性,旨在简化配置过程,实现所谓的“零配置”开发。 **什么是Struts2 Convention Plugin?** Convention Plugin是Struts2的一个插件,它基于...

    struts2-convention-plugin-2.3.24.1

    struts2-convention-plugin-2.3.24.1

    Struts2_Convention_Plugin中文文档

    Struts2 Convention Plugin是Apache Struts框架的一个重要插件,主要目标是简化MVC(Model-View-Controller)架构中的配置工作。这个插件引入了一种约定优于配置(Convention over Configuration)的理念,允许...

    struts2-convention-plugin-2.1.6.jar

    struts2-convention-plugin-2.1.6.jar

    STRUTS2 Convention零配置

    Struts2框架自2.1版本开始引入了一种新的零配置方式——Convention插件。与之前的Codebehind插件不同,Convention插件更加彻底地摆脱了对配置文件的需求,包括struts.xml以及Annotation等传统配置方式,通过约定而非...

    struts2-convention-plugin-2.3.1.jar

    struts2-convention-plugin-2.3.1.jar,使用注解的方式代替xml配置action,必须要引用这个包。

    struts2-convention-plugin

    ### Struts2 Convention Plugin详解 #### 一、引言 从Struts2的2.1版本开始,Convention Plugin被引入,旨在替代原有的Codebehind Plugin,实现Struts2框架下的零配置理念。这一转变简化了应用程序的开发流程,...

    struts2-convention-plugin-2.3.32

    struts2-convention-plugin-2.3.32

    struts2-convention-plugin-2.1.8.jar

    struts2-convention-plugin-2.1.8.jar

    struts2-convention-plugin-2.3.24.jar

    struts2-convention-plugin-2.3.24.jar

    struts2-convention-plugin-2.3.1.2.jar

    struts2-convention-plugin-2.3.1.2.jar

    struts2-convention-plugin-2.3.15.2

    Struts开始使用convention-plugin代替codebehind-plugin来实现struts的零配置,使用Convention插件,你需要此JAR文件

    struts2-convention-plugin-2.3.15.3 JAR包

    struts2-convention-plugin-2.3.15.3.jar struts2配置Action注解要用到的包,真正实现零配置

    struts _convention _plugin application

    Struts2 Convention Plugin 应用详解 Struts2 是一个非常流行的开源 Java 框架,用于构建基于 Model-View-Controller(MVC)架构的Web应用程序。它提供了丰富的功能和灵活性,使得开发者能够更高效地开发Web应用。...

    struts2-convention-plugin-2.3.32.jar

    综上所述,"struts2-convention-plugin-2.3.32.jar"是Struts2框架中一个强大且实用的插件,它通过约定优于配置的方式提高了开发效率。然而,理解和掌握其工作原理以及如何有效地结合使用注解是成功运用此插件的关键...

Global site tag (gtag.js) - Google Analytics