Stripes视图框架与Struts2之间的比较
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's execute() 方法返回一个必须被映射到具体东西的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更自然一些。例如,对于此标记:
- <span style="font-size:12px;"><s:form action="Login">
- <s:textfield name="username" label="Username"/>
- <s:submit value="Submit"/>
- </s:form></span>
拦截器(Interceptors)
Stripes拦截器类实现的是Interceptor接口,并指定它与@Intercepts注解的生命周期阶段(次)被截获。Stripes会自动加载类通过Extension.Packages机制。您也可以在web.xml中配置的拦截器,拦截器执行的顺序是重要的。
Struts2的拦截器也是实现Interceptor接口。然后,您必须在struts.xml定义拦截器类,定义一个新的拦截器栈,使用默认的堆栈,并增加你的拦截器。最后,你必须配置Action将使用这个新的拦截器栈。
Stripes视图框架与Struts2之间的比较的更多相关文章
- Stripes视图框架实现纯Java代码控制表现层参考文档
https://blog.csdn.net/boonya/article/details/14101477 Stripes是一个开放源码的Web应用程序框架的基础上的模型 - 视图 - 控制器(MVC ...
- 【整理】JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系
#[整理]JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系 之间的关系
郭晨 软件151 1531610114 [整理]JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系 visio文件下载 概述 一个JavaEE的项 ...
- 【Spring】Spring框架之Struts2和Spring的优点
Java Web开发使用Structs2和Spring框架的好处 今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术 ...
- 【SSH三框架】Struts2第一章的基础:第一次写Struts2规划
今年八月,当已经SSH三架完成学业.然后,他感动Android开展.三个框架已经很长的时间做无用的东西.所以,如果你想花三四天的时间来复习一下,写在博客. 附带SSH整个jar包网盘下载:http:/ ...
- Java框架之Struts2(一)
在学习Struts2之前,我们要知道Java为什么要有反射机制呢?反射机制可以说是填补Java不能动态访问某一个类的空白.利用反射机制,动态的创建一个对象.动态的访问类的某个属性,而且访问哪一个属性自 ...
- 框架之Struts2
相比较hibernate简单了许多 案例:使用Struts2框架完成登录功能 需求分析 1. 使用Struts2完成登录的功能 技术分析之Struts2框架的概述 1. 什么是Struts2的框架 * ...
- Qt之图形视图框架
简述 图形视图(Graphics View)提供了一个平台,用于大量自定义2D图元的管理与交互,并提供了一个视图部件(view widget)来显示可以缩放和旋转的图元. 框架包括一个事件传播架构,支 ...
- 框架: Struts2 讲解 1
一.框架概述 1.框架的意义与作用: 所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的经历放到业务需求的分析和理解上面. 特点:封装了很多细节,程序员在使用的时候会非常简单. 2 ...
随机推荐
- Redis安装以及Java客户端jedis连接不上相关问题解决
安装步骤 1.由于Redis是由C 语言编写的 所以虚拟机编译需要C的编译环境 用命令 yum install gcc-c++ 2.用SFTP上传Redis安装包并解压 3.进入Redis源码目录 b ...
- [dedecms]隐藏栏目不生成静态页面
重点文件在:/data/cache/inc_catalog_base.inc.php文件,里面存放的是栏目ID 先找到 /dede/sys_cache_up.php(后台更新缓存的地方),找到里面的U ...
- 命令行窗口中使用pip安装第三方库成功之后,在pycharm中仍不能使用
在学习廖老师的Python教程的时候,遇到命令行窗口中使用pip安装第三方库成功之后,在pycharm中仍不能使用的情况, 这种情况可能是由于在本地安装了多个Python版本的缘故(只是可能的情况之一 ...
- Verilog中的reg一定会被综合成寄存器么
对应于实际的数字电路中,如果该程序块描述的是时序逻辑,则该寄存器变量对应为寄存器:如果该程序块描述的是组合逻辑,该寄存器变量对应为硬件逻辑:如果该程序块描述的是不完全组合逻辑,那么该寄存器变量也可以对 ...
- anaconda3下64位python和32位python共存
查看当前工作平台:conda info 切换64位和32位: set CONDA_FORCE_32BIT=1是切换到32位 set CONDA_FORCE_32BIT= 是切换到64位 注意=号前后不 ...
- 关于freemarker 空变量的接收以及类型转换 笔记
通常接收一个变量是${siOrganid},如果并没有这个变量,是这么处理${siOrganid!},如果这个变量是某个类属性,是这么处理${interfsrv.siOrganid!},如果这个类也是 ...
- 【leetcode】492. Construct the Rectangle
problem 492. Construct the Rectangle 参考 1. Leetcode_492. Construct the Rectangle; 完
- python中shelve模块的使用
import shelve # 将序列化文件操作dump与load进行封装,写入文件的内容就是个大的字符串字典 s_dic = shelve.open("text/b.txt",w ...
- 同时兼容ie8 与ie11
最近公司发文规定说程序要必须同时兼容ie8与ie11 下面是在修改程序时遇到的一些问题. 1:new Date 获取年的问题,在ie8及以下ie以下版本是可以用getYear()方法来获取年得到的数值 ...
- 项目里如何访问AppDelegate
项目里面访问AppDelegate做全局变量用有好几种方式 最原始就是 AppDelegate *appDelegate = (AppDelegate *)[[UIApplication shared ...