也说说Struts2的Convention和REST插件

转载 2012年03月28日 18:52:16
首先个人觉得Struts2.1有很大的进步,不再单单是struts2.0.x刚刚出道时被人评做仅仅是webwork2换个包名而已;其中我觉得支持插件和模块化开发是一个很大的进步,这直接让struts2的生态圈得到了改善,目前有几十个插件了,而且很多第三方的插件也慢慢加入到了官方插件列表中。

使用过Rails like的框架之后,我们都会想如果可以在传统的Java Web应用中可以有Rails类似的友好的URL该多好啊,现在似乎convention plugin 和REST plugin可以做到这些,可是经过一些文档和源码的查阅之后,我觉得convention plugin还是不够方便,不知道是自己水平所限,无法充分利用上这个插件,所以有相关经验的大侠也可以指点一二。

个人感受最深的一点便是Multi Action的支持,convention插件中,默认是用Java包名作为namespace的层级关系,但是我觉得在MultiActiond的情形中,还需要可以以一个Action类的名字作为NameSpace才好;一个Action中编写多个方法供页面调用,虽然Struts2提供了Dynamic Method Invocation的方法,但是个人觉得这种通过后面加‘!’的调用方式最终形成的URL,并不符合我们的预期,虽然可以通过足够的@Action标记,实现友好的URL,可以那么多写到代码里面的“配置”,让我觉得这个convention不够力度,说说我理想中的convention的实现。
Java代码 复制代码 收藏代码
  1. package com.xxx.actions;  // the root package   
  2.   
  3. public class FoobarAction implements Action {   
  4.     public String index() throws Exception {   
  5.          ///do someting   
  6.          return SUCCESS;   
  7.     }   
  8.     public String save() throws Exception {   
  9.         // do something   
  10.         return SUCCESS;   
  11.     }   
  12.     @Jsonify(root="foobarList")  // custom annotation   
  13.     public String list() throws Exception {   
  14.         // do somethind   
  15.         return SUCCESS;   
  16.     }   
  17. }  

对于上面的这个Action,我的原意是想实现对Foobar实体的CRUD操作,我希望我不要写一行的@Action配置最终达到这样效果:
/foobar/ -> mapping to method index() of FoobarAction
/foobar/save -> mapping to method save() of FoobarAction
/foobar/list -> return jsonify data of foobarList
上面的URL匹配,尽管不是RESTful的,但是可以简单化URL,并且需要配置的东西很少;这样的URL对Controller的映射关系,在很多语言框架中都是这样设计的,但是在Struts2不考虑这么设计我觉得有点out的嫌疑。现在Spring MVC在这方面就做得很好,为什么Struts2的convention插件不考虑如此呢?当然,对于只有唯一的execute方法的Action,使用java的包结构作为namespace是无可厚非的,而对于一个支持动态方法调用的框架,为其设计一个了一个CoC的插件,为什么不考虑上面说的URL组织方式呢?感觉现在convention的设计就感觉要一个Action只做一件事似的,压根就不要写MultiAction,但是这样明显会造成类急剧膨胀和相关逻辑代码的分散,以及set/get参数的代码增加。大家觉得呢?是否有没有必要扩展和改写convention插件,甚至开始一个新的插件?请大家讨论和指点!

Struts2的零配置插件convention的简单总结

在使用Struts2开发过程中为了避免多人同时更改配置文件带来的各种冲突,可以使用约定大于配置的插件。导入struts-Convention-plugin-x.x.x.jar然后在Struts.xml...
  • IAmMrLi
  • IAmMrLi
  • 2016年09月30日 09:43
  • 487

struts2 convention插件的使用(一)

struts2 convention插件的相关文章在网络上还很少,今天研究了一下 官方文档 http://cwiki.apache.org/WW/convention-plugin.html ...
  • luckily01
  • luckily01
  • 2012年11月27日 18:23
  • 4977

struts2采用convention-plugin实现零配置,Struts2 Convention插件的使用

使用Convention插件,你需要将其JAR文件放到你应用的WEB-INF/lib目录中,你也可以在你Maven项目的POM文件中添加下面包依赖 org.apache.s...
  • lexang1
  • lexang1
  • 2016年09月29日 18:51
  • 1466

Struts2的零配置和REST插件

和朋友共同开发一个小项目中用到了RESTful风格,在这里总结一下。 首先在Struts2工程中导入所需的jar包 ezmorph-1.0.3.jar json-lib-2.1-jdk1...
  • zheng0518
  • zheng0518
  • 2014年05月27日 08:10
  • 8015

struts2-convention-plugin插件

convention插件最重要的一条原则,约定优于配置,所以首先先熟悉一些约定规则,否则打死你也不知道为什么总是no mapping 一、按照约定部署Action类         1、根据str...
  • boloyz
  • boloyz
  • 2012年11月28日 22:55
  • 1469

struts2 rest插件

REST 简介 REST 是英文 Representational State Transfer 的缩写,这个术语由 Roy Thomas Fielding 博士在他的论文《Architectu...
  • wxwlife2006
  • wxwlife2006
  • 2013年01月24日 15:19
  • 3642

说说struts1与struts2的区别。

1.都是MVC的WEB框架,      2 struts1的老牌框架,应用很广泛,有很好的群众基础,使用它开发风险很小,成本更低!struts2虽然基于这个框架,但是应用群众并多,相对不成熟,未知...
  • u012927417
  • u012927417
  • 2014年08月06日 16:49
  • 953

Struts2的Convention插件导致”No result defined for action”

Convention插件自动注册Action的功能让我们从struts.xml配置的繁杂工作中解放出来,但有时候也能带来一些麻烦。出现”No result defined for action”错...
  • luckily01
  • luckily01
  • 2012年11月27日 18:09
  • 2097

Struts2 注解零配置方法(convention插件使用)

最近接触到一个新的项目,是做一个使用S2SH的电子商务商城的二次开发。之前使用过S2SH,在此之前的项目中,Struts2 使用的是XML配置而这个项目是使用注解。在这个项目中,注解还不需要使用Act...
  • frankaqi
  • frankaqi
  • 2015年11月01日 00:27
  • 606

struts2 rest插件详细说明

此REST插件简化了人们和电脑客户端对REST风格资源的访问。其目标是100%实现和Ruby on Rails REST URL风格相兼容的,并且可以免除使用XML作为资源的开发模式。它基于Conve...
  • shendeguang
  • shendeguang
  • 2013年01月29日 10:10
  • 2542
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:也说说Struts2的Convention和REST插件
举报原因:
原因补充:

(最多只允许输入30个字)