https://blog.csdn.net/boonya/article/details/14227149

Stripes视图框架与Struts2的行为很相似,所以在这里做一个简要的对比,发现它们的优缺点,以便在实际项目中合理的选择。

原文来自:http://www.stripesframework.org/display/stripes/Stripes+vs.+Struts2

这里有一些Stripes和Struts2快速进行比对的一些指标:

Stripes

Struts2

参照版本

1.5

2.0.12

配置文件

web.xml,

web.xml, struts.xml, optionally struts.properties  ...

主要核心

类需实现 ActionBean接口

类中需有execute()方法,选择实现Action类或继承ActionSupport类

响应机制

Resolution的实例

一个在struts.xml 或在注解中对应的一个String标识

视图技术

JSP,FreeMarker

JSP,,FreeMarker,,Velocity

布局机制

内置三种布局标签,它们可以被那些喜欢分层和表格的人很好的使用

提供分层和表格

绑定机制

内置

OGNL

输入验证

使用@Validate 和@ValidateNestedProperties实现

需要XML配置文件或注解来实现

快速验证

内置可配置的ValidationState.ALWAYS 和Validation.InvokeValidateWhenErrorsExist

在 <field-validator>标签上设置属性: short-circuit="true"

自定义验证

用 @ValidationMethod注解方法

扩展要么ValidatorSupport或FieldValidatorSupport,需配置validators.xml

模型视图传输

使用${actionBean} 获取属性

使用值栈(ValueStack)

类型转换

实现TypeConverter<T>(泛型)

实现OGNL,类型转换通常是扩展StrutsTypeConverter(非泛型)

格式化

实现 Formatter<T> (泛型)

实现OGNL,类型转换通常是扩展StrutsTypeConverter(非泛型)

自定义模块配置

自动加载Extension.Packages初始化参数

在struts.xml中配置

拦截器

实现Interceptor接口或者在方法前加@Before/@After注释

实现Interceptor接口,并在struts.xml中配置

本地化

为错误、命名和JSTL提供资源包

提供资源包查询机制

注:从上面的配置中可以看出,Stripes减少了很多配置工作,并且内置了验证注解而不再去编写新的Java 类来实现验证功能。

行为(Actions)

Stripes的Action定义由类实现ActionBean的接口,并自动加载包或子包的ActionResolver.Packages初始化参数中列出的包之一。
     Struts2的Action可以是普通的公共字符串的execute()方法,或者实现了Action接口的类的类。他们必须在struts.xml声明,或者复制来自Stripes的自动加载机制。

事件处理程序(Event handlers)

在Stripes中,用public Resolution methodName() {}来定义一个事件处理程序。它使用“name=”来表示一个submit的提交,"event="来表示事件的触发指向(target)的事件方法的调用。在一个表单中可以拥有多个event handler事件处理方法和多个submit的按钮,一个简单的mapper(接口)可以对应多个事件处理程序,并且可以将之放入submit标签对应值的按钮。

Struts2是面向一个单一的事件处理程序方法:execute()。你可以有其他的事件处理方法,具有任意名称的,但您必须在struts.xml中包含URL映射到一个方法的名称的配置策略。Struts2令人惊讶的是它很困难去实现有一个以上的提交按钮的形式。虽然它支持多个submit按钮,但并不像Stripes那么简单明了。

决议与结果(Resolutions and results)

Stripes 的事件处理程序返回的是一个实现了Resolution的实例。Stripes 内置实现转发或重定向,数据流,返回JavaScript对象,或者是HTTP请求的错误码。它很简单的就实现了自定义要求的Resolution 接口(只需要一个方法)。

Struts2'sexecute() 方法返回一个必须被映射到具体东西的String,无论是在的struts.xml中或与注释的符号结果。可以说,返回一个象征性的结果,不必去别的地方连接字符串的结果避免给开发人员带来不必要的负担。

自定义类型转换(Custom Type Converters)

Stripes中实现自定义转换器需要实现TypeConverter<T> (T是目标对象)。然后,您可以将T对象的每个属性放入自定义类型转换器中,并将该类型转换器放入扩展包(Extension.Packages package)里。或者,您也可以使用@Validate(converter=YourTypeConverter.class).来注解你需要特殊转化处理的属性字段。

Struts2的,你写一个自定义类型转换器通过实施ognl.TypeConverter接口,通常由扩展StrutsTypeConverter类。Stripes相反,Struts2的接口没有泛型化,所以你的方法将返回一个Object。使用类型转换器类型T的每个属性,添加一行xwork的conversion.properties的属性完全合格的名称和值类型转换器类的完全限定名称的属性表示T。对于一个特定的属性,你添加的属性的名称和类型转换器类的完全限定名称ActionName conversion.properties ActionName是类名的动作,该文件是在同一个目录层次结构包动作类。

视图技术(View Technology)

Stripes框架支持任何支持JSP标签库的视图技术。这意味着你可以使用JSP和Freemarker的,并且可以实现为一个servlet的映射。从J2EE,JSP,FreeMarker有详细FreeMarker的Stripes配置。使用Velocity与Stripes是可能使用工具项目VelocityView,但你缺少标签库(taglib)的支持。Velocity1.5不支持JSP标记库 - 这是一个自2006年以来2.0愿望清单功能的特性(feature)。

Struts2的,JSP的支持,就像Stripes。但Struts2的也有插件来处理Freemarker和Velocity,从而使这两个视图技术的功能变得可能。话虽这么说,使用Freemarker的(或者JSP)是比Velocity更自然一些。例如,对于此标记:

[html] view plain copy
  1. <span style="font-size:12px;"><s:form action="Login">
  2. <s:textfield name="username" label="Username"/>
  3. <s:submit value="Submit"/>
  4. </s:form></span>

拦截器(Interceptors)

Stripes拦截器类实现的是Interceptor接口,并指定它与@Intercepts注解的生命周期阶段(次)被截获。Stripes会自动加载类通过Extension.Packages机制。您也可以在web.xml中配置的拦截器,拦截器执行的顺序是重要的。

Struts2的拦截器也是实现Interceptor接口。然后,您必须在struts.xml定义拦截器类,定义一个新的拦截器栈,使用默认的堆栈,并增加你的拦截器。最后,你必须配置Action将使用这个新的拦截器栈。

转载于:https://www.cnblogs.com/lteal/p/8821205.html

Stripes视图框架与Struts2之间的比较相关推荐

  1. Stripes视图框架简介

    Stripes第一次接触就觉得它很神奇,不禁让喜欢编码的程序员产生好奇心.是什么让他做到了灵活自如的进行页面跳转呢? Stripes是一个视图框架用于利用最新的Java技术来构建Web应用程序.它具有 ...

  2. Stripes视图框架实现ActionBean视图访问

    Stripes最基本的实现是类似于Struts的请求,但没有Struts那么配置繁琐.下面就来看看怎样实现一个web应用的Action访问操作.本篇博文为设计Stripes的三种访问方式:普通Acti ...

  3. java 对象视图框架_Stripes视图框架Java对象属性验证和prototype.js Ajax的测试

    Stripes视图框架Java对象属性验证,它允许对字段设置是否必须填写,对数字大小进行限制等.我用prototype.js Ajax 将验证后的数据及时地展示出来,下面来看程序. 1.编写User实 ...

  4. 可可:框架和边界之间有什么区别?

    UIView及其子类都具有属性frame和bounds . 有什么不同? #1楼 框架是相对于其超视图定义UIView的矩形. bounds rect是定义NSView坐标系的值范围. 即,此矩形中的 ...

  5. 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式

    现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2,Spring,Hibernate.似乎这些框架成为了一个人是否精通Java,是否会写J2EE程序的唯一事实标准和 ...

  6. 深入理解文档/视图框架体系_九宫格项目开发感悟

    1.项目起源以及采用文档/视图框架体系缘由 我们整天都在说:文档保存项目的数据并处理项目上的数据:视图通过关联获得文档的数据并进行可视化:主窗口框架接收外部事件消息并进行消息分配.这句口头禅感觉接触过 ...

  7. wxWidgets:文档/视图框架

    wxWidgets:文档/视图框架 wxWidgets:文档/视图框架 wxDocument 概览 wxView 概览 wxDocTemplate 概述 wxDocManager 概述 文档/视图框架 ...

  8. Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/117660217 长期持续带来更多项目与技术分享,咨询请 ...

  9. ECCV 2022 | MVDG:一种用于域泛化的统一多视图框架

    前言 论文提出了一种新的多视图分布式目标框架,以有效地减少训练和测试阶段的过拟合. 具体来说就是,在训练阶段,开发了一种多视图正则化元学习算法,利用多个优化轨迹产生适合模型更新的优化方向.在测试阶段, ...

最新文章

  1. Android --- 拍照上传图片之后,发现图片是全黑色,什么内容也没有
  2. optee运行时来了一个REE(linux)中断--代码导读
  3. 基于django rest framework的mock server实践
  4. 华为发布智简全光网战略,携手上下游重新定义光产业
  5. python 类定义 垃圾_什么是python对象摧毁?python中的对象摧毁(垃圾回收)机制是什么?...
  6. Jw-alipay 1.0.0版本发布,开源支付窗管理平台
  7. 安卓学习笔记16:常用控件 - 标签
  8. 编程基本功:如果可能,不用if,尽量使用switch
  9. ARM开发5.3.6 基础实训( 2 ) 单个 LED 显示单个按键的状态--LPC21XX
  10. Arduino U8glib库中的中文字体
  11. 这个录屏神器好用哭了!
  12. 【图文说明】屏幕录像专家如何安装、录制小文件的录像
  13. Excel的筛选功能应用教你在大数据中筛选出需要的数据
  14. 恒指期货实盘记录及下周行情分析!
  15. 如何快速掌握一门新的技术
  16. 操作系统:存储器管理(下)
  17. 10个最佳iOS Photo App模板
  18. Nat学习(sNat和dNat)
  19. C语言n番战--共用体和枚举(八)
  20. Logstash:你喜欢 Grok 吗?

热门文章

  1. 汽车关联android 苹果,正面PK:Android Auto VS Apple CarPlay
  2. 2020年尾矿考试APP及尾矿找答案
  3. (翻译)Couchbase
  4. 使用jsp+dao完成注册和增删改查
  5. 执行nginx重启命令时,报找不到nginx.pid的解决方法
  6. 介绍Android原生开发工具包r14
  7. Problem H. 公孙玉龙
  8. AI项目融资数十万甚至上亿,这些创业公司编造的“AI骗局”有多荒唐?
  9. CSI数据dat文件转换mat文件问题(matlab、python数据处理)
  10. android密码登录,简单的密码登录功能实现(Android)