🎶 Sym - 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台

📕 思源笔记 - 一款桌面端笔记应用,支持 Windows、Mac 和 Linux

🎸 Solo - B3log 分布式社区的博客端节点,欢迎加入下一代社区网络

♏ Vditor - 一款浏览器端的 Markdown 编辑器

Stripes tips(1)-Stripes 简介

初识 Stripes

和我们熟悉 Struts 1Struts 2 类似,Stripes 同样是一种展示层框架,用于快速构建web程序。在使用Struts 1WebWorkStruts 2 等框架的时候,通常需要大量额外的 XML 配置,当一个项目达到一定规模的的时候,编写 Java 代码的同时还要维护大量的 XML 配置,这的确是件费神的事。Stripes 完全抛弃了这些框架的弊病,使用了最新的 Java 5 带来的技术,遵循 “Convention over Configuration” 理念,只需要在 Java 代码中加入少量的 Annotation,就可以完成配置,大量减少了代码的维护工作。

Stripes 网站,可以了解到 Stripes 框架的目标:

  • 简化 Java web 开发。

  • 针对一些常见问题,提供简单而强大的解决方案。

  • 容易上手,你很难想像让一个新 Stripes 的用户在30分钟内就能很快进入状态。

  • 容易扩展。

Stripes 提供的特性。

  • 零配置,不需要外部配置文件,这是 Stripes 最引人注目的特性。

  • 强大的binding引擎,足以应对复杂的对象。

  • 验证和类型转换机制非常容易使用和本地化。

  • 良好的本地化支持,甚至在 JSP 页面之间跳转时仍然生效。

  • 能够复用 ActionBean,将它作 view helper 使用。

  • 简易的 indexed property 支持。

  • 内置支持同一个 form 触发多个事件。

  • 具备透明的文件上传能力。

  • 支持增量开发。

  • 相当灵活,易于扩展。

Stripes vs Struts 1

作为一种经典的 MVC 框架,Struts 1 曾经在 Java 开发人员心目中占据了最高点。但是随着时间的推移,Struts 1 基础构架上先天性的缺陷显得越来越明显。同时,JSF 作为标准框架成为 Java EE 标准的一部分,Struts 1 面临着前所未有的挑战。一些开发人员开始尝试使用其它 web 框架,来替代 Struts 1Struts 1 的作者也曾尝试对 Struts 1 彻底改造,并提出了雄心勃勃的 “Struts Ti” 计划,但那就意味着 Struts 1 良好的向前兼容性将被打破,升级带来的代价非常大。所幸的是,一次机缘,让 Struts 1WebWork 的开发人员能够坐下来,一起探讨 web 框架的未来。很快他们达成了共识,于是全新的 Struts 2 应运而生,它是基于 WebWork 的全新的 web 框架,新的 WebWork的开发工作也转移到了 Struts 2上。

WebWork 一样,Struts 1 作为一个遗留项目被保留下来。Struts 的另一个分支 ShaleStruts 项目中剥离了出去,成为 Apache 下一个独立的项目。

在 web 开发中,与 Struts 1 相比,Stripes 有很多闪亮的新特性。

  • 大大减少了开发工作量

    Struts 1 中,开发一个带有form的页面,你需要开发一个 JSP 页面文件,一个 ActionForm 类,一个 Action 类,并要在 struts-config.xml中注册你新建的 ActionForm 和 Action。

    Stripes 就要简单得多,你只需要创建一个 JSP 文件和 一个 ActionBean ,在 ActionBean 使用工 Annotation UrlBinding 指定你要响应的 URL ,使用 Annotation HandlesEvent 将事件映射到方法上。

  • 增量开发

    Struts 1 中,当你写发一个 JSP 页面文件,其中有一个 <html:form> 标签,这时你还没有开发 FormBean ,当你把它部署到服务器,比如tomcat。打开浏览器,查看页面,它会抛出异常,提示找不相应的 FormBean

    Stripes 中,完全不用担心,即使没有创建 ActionBean,你一样可以预览 JSP 页面的效果,然后再创建 ActionBean

  • 属性绑定

    Struts 1 中,你的 Form 有一个嵌套(nested)属性 person.address.line1 ,如果 personaddressnullStruts 1 就会抛出异常,你必须在使用嵌套属性的对象中对其一一对预先初始化,这就是意味需要一些额外的工作。

    Stripes 中,完全不用担心没有初始化的问题,Stripes 会自动进行初始化,只要定义一个不带参数的修饰符为 public 的构造器。

  • Indexed 属性

    Struts 1 中,完全屈从于JavaBean 规范,但对 web 模型不是很友好。你必须实现indexecd getter 和 setter 方法。

    Stripes 中,你只要提供你所用的 List 或 Map 的 getter 和 setter 方法。使用泛型告诉 Stripes List 和 Map 中对象的类型。Stripes 会在必要的创建一个 List 或 Map 实例,需要进行扩展,产生新的对象,并将他们放入到 List 或 Map 中,设置好 List 中对象的属性。

  • Null的处理

    Struts 1 中,ActionForm 有一个 int 的属性,当时你保留页面字段为空时,Struts 1 会自动将转换成 0 ,更糟糕的,如果验证失败,回到 Form 页面,它会在输入框填充一个 0 。

    Stripes 中,如果页面输入框为空,那么这个字段不提交,ActionBean 不会填充字段值。

  • 格式化输出

    Struts 1 中,你只有使用 JSTL 提供的格式化功能 。

    Stripes 中,和 JSTL类似,提供了格式化标签。

  • 多事件支持的 Action

    Struts 1 中,你必须使用 DispatcherAction 来实现,并且所有 button 必须使用同一名称,不同的值,它会根据值的不同来调用的不同的方法,如果button 要进行国际化时,又是一件痛苦的事。

    Stripes 中,使用 button 的 name 属性本身来映射相应的方法。

  • JSP/View Helper

    Struts 1 中,没有什么好的方法将动态数据载入到 JSP 页面之中。

    Stripes 中,ActionBean 可以作为一个 View Hepler使用。

  • HTML 标签

    Struts 1 中, Struts 1 标签中 input 使用 property而不是 nameclass 被替换成 styleCalss

    Stripes 中,尽可能保持这些属性的名称与 HTML 一致。

Stripes vs Struts 2

前不久 Apache 官方刚刚发布了 Struts 2 的最新稳定版 2.1.6.GA,在这个版本中,官方首次提供了一个 Convention Plugin 插件,以代替 2.0.x 中的 Codebehide,Zero Config 等 Annotation 插件。从名称可以看出其一个重要的特色就是 Convention 。不过,感觉 Struts 2 有“复制Stripes 之嫌。

Stripes 中,可在 StripesFilter 中指定一个 init-param 参数 ActionResolver.Packages ,指定从哪些包中扫描 ActionBean

	
<init-param>
<param-name>ActionResolver.Packages</param-name>
<param-value>tutorial.action</param-value>
</init-param>

Struts 2 中,有相似的概念。

你可以在 Struts 2 配置文件中指定一个 struts.convention.action.packages 常量,其值为 Struts 2Action所在的包。

 

转自:http://blog.chinaunix.net/u/1096/showart_1858318.html


欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

留下你的脚步