也说说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 中,使用了 Rest与Convention插件后,访问 动态方法 的注意点

以前使用struts2  的 2.3.4 版本,做的一个项目,使用了stuts2的 Rest与Convention插件,然后动态访问某个action中的方法时,都是使用 “!” 去进行指定的,如   ...

Struts2插件convention

  • 2014年09月24日 09:06
  • 300KB
  • 下载

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

最近接触到一个新的项目,是做一个使用S2SH的电子商务商城的二次开发。之前使用过S2SH,在此之前的项目中,Struts2 使用的是XML配置而这个项目是使用注解。在这个项目中,注解还不需要使用Act...

Struts2的Convention插件 --- 基于注解的Action映射

新项目采用了Struts2的最新版本--Struts2.3.4,也摒弃了烦琐的配置文件,转而采用Annotation来配置Action映射,以前我没有接触过这方面的知识,最近一段时间了解不少相关知识,...

struts2中,在使用 convention 插件的情况下,如何使用 “chain” 这个result

执行完一个Action之后,一般就是跳转至某个JSP页面之类的,但在某些情况下,也有执行完一个Action之后需要跳转至另一个Action继续执行。 比如,使用 addUser 这个Action 新增...

Struts2的 Convention插件和Annotation使用(二)

struts2_Convention的Annotation 分类: java ee struts java web2013-07-30 13:27 153人阅读 评论(0) 收藏 举报 str...

Struts2-- Convention插件

1.1. 设置结果页面路径 默认所有的结果页面都存储在WEB-INF/content下,你可以通过设置struts.convention.result.path这个属性的值来改变到其他路径。如:...
  • ylchou
  • ylchou
  • 2012年03月28日 18:50
  • 533

JavaEE struts2的convention插件

struts在2.1版本时提供了convention插件来替代Codebehind插件来实现struts的零配置,零配置并不是没有配置,而是通过约定大于配置的方式,大量通过约定来调度页面的跳转而使得配...

Struts2中 Convention插件的使用

在Struts2.1开始,Struts2通过引入Convention插件来支持零配置,也就是说我们不需要配置struts.xml文件,Struts2通过约定来自动配置。要实现这个功能我们只需要把str...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:也说说Struts2的Convention和REST插件
举报原因:
原因补充:

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