首先个人觉得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的实现。
package com.xxx.actions; // the root package
public class FoobarAction implements Action {
public String index() throws Exception {
///do someting
return SUCCESS;
}
public String save() throws Exception {
// do something
return SUCCESS;
}
@Jsonify(root="foobarList") // custom annotation
public String list() throws Exception {
// do somethind
return SUCCESS;
}
}
对于上面的这个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插件,甚至开始一个新的插件?请大家讨论和指点!
分享到:
相关推荐
由于 Struts 2 的 Convention 插件的主要特点是“约定优于配置”,当我们已经习惯了 Struts 2 的基本开发方法之后,如果希望改为使用 Convention 插件也非常容易,我们只要放弃 Stuts 2.1 应用原有的配置文件,改为...
将 Struts 2 项目下 struts2-convention-plugin-2.1.6.jar、struts2-rest-plugin-2.1.6.jar 两个 JAR 包复制到 Web 应用的 WEB-INF/lib 路径下。 由于 Struts 2 的 REST 插件还需要将提供 XML、JSON 格式的数据,...
8. **插件集成**:Convention插件与其他Struts2插件(如Validation、Tiles等)很好地协同工作,使得整个框架更加灵活和强大。 总结起来,Struts2的Convention配置是一个强大的工具,它让开发者能够专注于业务逻辑,...
Struts2 Convention Plugin 是从 Struts2.1 版本开始引入的一个插件,它的主要目标是实现 Struts2 框架的零配置。通过约定优于配置的原则,开发者可以更加专注于业务逻辑,减少大量的 XML 配置工作。以下是 ...
在项目中结合使用Convention插件和REST风格的URL,可在`struts.xml`中配置如下常量: ```xml <constant name="struts.convention.action.suffix" value="Controller"/> <constant name="struts.convention.action....
总的来说,Struts2 Convention插件通过约定优于配置的方式,极大地简化了Struts2应用的开发工作,提高了开发效率,同时也保持了代码的整洁和可维护性。通过合理的命名和注解,开发者可以轻松地创建和管理Action、...
2. **struts2-convention-plugin.jar** - 提供了约定优于配置的特性,允许根据类名和方法名自动映射Action。 3. **struts2-config-browser-plugin.jar** - 用于在Web应用中浏览器查看Struts配置的插件。 4. **xwork-...
Struts2 Convention Plugin 是一个用于简化 Struts2 配置的插件,自 Struts2.1 版本起引入,旨在实现零配置或者最少配置的开发环境。它通过一系列预定义的规则和约定,自动将请求映射到相应的 Actions 和结果页面,...
自Struts2.1版本开始,引入了一个重要的插件——Convention Plugin,该插件通过一系列约定简化了Struts2的配置过程,使得开发者可以更加专注于业务逻辑而非繁琐的配置。 #### 二、Struts2 Convention Plugin核心...
第二版删除了第一版中第18章的内容(Struts 2和Struts 1整合部分),全面介绍了Struts 2.1新增的Convention和REST支持。《Struts 2.1权威指南》最后配备的两个常用的实例也都升级为基于Struts 2.1运行,读者可通过这两...
<constant name="struts.convention.default.parent.package" value="rest-default"/> ``` 这些配置项分别定义了Action的后缀、是否映射所有URL匹配以及默认的父包名称,从而确保Convention插件能够按照既定规则...
5. 还有其他如Struts2的测试插件、REST插件、JMX插件等,为开发者提供了更丰富的功能选择。 使用Struts2.1.6时,开发者需要根据项目需求选择合适的jar包和插件,并结合Struts2的配置文件(通常为struts.xml)进行...
struts2-convention-plugin.jar,自动化配置插件;struts2-json-plugin.jar,JSON支持;还有其他插件和依赖的jar包。 - 可能还包括第三方库,如Spring、Hibernate、Log4j等,这些是常见的Java企业开发框架和日志工具...
- Struts2拥有丰富的插件生态系统,如REST插件、Ajax插件、Freemarker和Velocity模板插件等,可以扩展框架的功能。 9. **与Spring的整合** - 使用`struts2-spring-plugin`,可以直接在Spring容器中管理Action实例...
在实际开发中,开发者通常会根据项目需求选择并引入相应的Struts2插件,以实现特定的功能,比如使用`struts2-spring-plugin.jar`来整合Spring框架,实现依赖注入,或者使用`struts2-rest-plugin.jar`来支持RESTful...
2. **struts2-convention-plugin.jar**:这个插件支持约定优于配置(Convention over Configuration)的方式,使得开发者无需编写大量的XML配置文件,通过命名约定即可自动映射Action和结果页面。 3. **struts2-...
6. **struts2-convention-plugin.jar**:此插件提供了约定优于配置的功能,使得开发者可以快速构建应用,而无需编写大量的XML配置。 7. **struts2-json-plugin.jar**:这个插件支持JSON数据格式的输入和输出,方便...