`

比较JSF、Spring MVC、Stripes、Struts 2、Tapestry、Wicket 框架

    博客分类:
  • J2EE
阅读更多
Java Web层框架——JSF、Spring MVC、Stripes、Struts 2、Tapestry和Wicket他们各自的优点和缺点:

JSF
优点:
◆Java EE标准,这意味着有很大的市场需求和更多的工作机会
◆上手快速并且相对容易
◆有大量可用的组件库
缺点:
◆大量的JSP标签
◆对REST和安全支持不好
◆没有一个统一的实现。既有SUN的实现,又有Apache的实现——MyFaces。
◆国内的OperaMasks还支持AJAX,以及有开发工具支持

Spring MVC
优点:
◆对覆盖绑定(overriding binding)、验证(validation)等提供生命周期管理
◆与许多表示层技术/框架无缝集成:JSP/JSTL、Tiles、Velocity、FreeMarker、Excel、XSL、PDF等
◆便于测试——归功于IoC
缺点:
◆大量的XML配置文件
◆太过灵活——没有公共的父控制器
◆没有内置的Ajax支持

Stripes
优点:
◆不需要书写XML配置文件
◆良好的学习文档
◆社区成员很热心
缺点:
◆社区比较小
◆不如其他的项目活跃
◆ActionBean里面的URL是硬编码的

Struts 2
优点:
◆架构简单——易于扩展
◆标记库很容易利用FreeMarker或者Velocity来定制
◆基于控制器或者基于页面的导航
缺点:
◆文档组织得很差
◆对新特征过分关注
◆通过Google搜索到的大多是Struts 1.x的文档

Tapestry
优点:
◆一旦学会它,将极大地提高生产率
◆HTML模板——对页面设计师非常有利
◆每出一个新版本,都会有大量的创新
缺点:
◆文档过于概念性,不够实用
◆学习曲线陡峭
◆发行周期长——每年都有较大的升级

Wicket
优点:
◆对Java开发者有利(不是Web开发者)
◆页面和显示绑定紧密
◆社区活跃——有来自创建者的支持
缺点:
◆HTML模板和Java代码紧挨着
◆需要对OO有较好的理解
◆Wicket逻辑——什么都用Java搞定

接着,Matt通过采访这些框架的作者,与他们讨论各种开源的Java Web框架,并且突出各个框架的长处、听取框架作者对其他框架的看法,希望借此了解这些框架的未来发展方向。

下列是一些被采访者:
JSF:Jacob Hookom
RIFE:Geert Bevin
Seam:Gavin King
Spring MVC:Rob Harrop
Spring Web Flow:Rob Harrop and Keith Donald
Stripes:Tim Fennell
Struts 1:Don Brown
Tapestry:Howard Lewis Ship
Trails:Chris Nelson
Struts 2:Patrick Lightbody
Wicket:Eelco Hillenius

Matt对采访做了如下总结:
JSF:
如果你想让web应用具有类似桌面程序的功能性,那么JSF的标准规范和大量第三方组件库的支持值得你 信赖。
Spring MVC:
综合了许多不同的技术,这使得它可以被广泛地应用到不同类型的项目中去;它可以被当作web应用开发的一个基础平台。
Stripes:
可以被应用到存在大量复杂数据交互的程序中;有强大的类型转换、绑定和验证功能;可以使管理大的复杂表单以及直接映射它们到域对象变得简单……
Tapestry:
在中到大型项目中,表现突出(当然,你也可以只把它应用到单个页面上),在这些项目中,你可以通过简单地创建新的组件起到杠杆作用。
Struts 2:
通常更适合于那些希望可以真正开始做事并且愿意花费大量时间来学习他们使用的开源工具的小项目组。Struts 2的目标不是那些更喜欢拖放式开发的“扶手椅程序员”。
Wicket:
非常适合于这样的内/外部网应用:UI很复杂并且你希望可以充分利用你的开发者资源。

上面的总结,基本是突出了各个框架的长处。然而,哪些又是他们不好的地方呢?
Matt提出了评价一个框架好坏与否的标准:
◆Ajax支持
是不是内置了?是否便于使用?
◆书签能力
用户能否将某个页面收藏起来并且可以方便地返回到该页面?
验证
使用是否简单?是否支持客户端(JavaScript)验证?
◆可测试性
脱离容器测试控制器,是否足够简单?
◆提交和重定向
框架如何处理重复提交问题?
◆国际化
如何支持国际化?控制器利用国际化信息,是否容易?
◆页面修饰
框架支持哪种类型的页面修饰/组成机制?
◆社区和技术支持
提出问题,能否被快速地、恭敬地回答?
◆开发工具
是否有支持这个框架的好的工具,尤其是IDE?
◆市场需求
学习了这个框架,它能否帮你找到份工作?
◆岗位数量
在dice.com和indeed.com上,对这个框架技能的需求如何?

笔者认为这个评价标准,值得大家借鉴。

然后,Matt按照这些评价标准,对各个框架做了以下阐述:
Ajax支持
◆JSF:没有内置的Ajax支持,需要使用ICEfaces和Ajax4JSF
◆Stripes:没有对应的类库,支持流输出
◆Struts 2:内置Dojo,有用于GWT和JSON的插件
◆Spring MVC:没有对应的类库,需要使用DWR和Spring MVC扩展
◆Tapestry:Tapestry 4.1中,有内置的Dojo
◆Wicket:有Dojo和Script.aculo.us支持

书签能力
◆JSF:可以任意提交——URL甚至不被考虑
◆Stripes:使用约定,但是你可以不加理会
◆Struts 2:有命名空间的概念,这使得收藏某个页面并返回变得容易
◆Spring MVC:允许完全的URL控制
◆Tapestry:依然存在一些丑陋的URL
◆Wicket:允许装配(mount)页面/URL

验证
◆JSF:默认的国际化信息丑陋,但是配置简单
◆Stripes和Wicket:用Java类进行验证——不支持客户端验证
◆Struts 2:使用OGNL完成强大的表达式验证功能;只有在Action上指定了规则,才支持客户端验证。
◆Spring MVC:允许你使用公共验证器——这是一种成熟的解决方案
◆Tapestry:有健壮的验证功能——不需自定义就有漂亮的国际化信息

可测试性
◆Spring MVC和Struts 2:允许利用mocks(例如EasyMock、jMock和Spring Mocks)简单地进行测试
◆Tapestry:测试困难,因为页面类被抽象、具体类被简化
◆JSF:页面类可以方便地被测试,实际上很像Struts 2 中的actions
◆Wicket:有WicketTester——一个强大的解决方案
◆Stripes:有Servlet API Mocks和MockRoundtrip

提交和重定向
解决重复提交问题的最简单方法是:在提交后重定向
◆Spring MVC:允许你将参数加到重定向URL上
◆Stripes、Tapestry和Wicket:有“flash式”的支持
◆Struts 2:需要一个自定义的解决方案
◆JSF:需要一个自定义的解决方案,国际化信息很难加入到页面bean中

国际化
◆JSTL的标签使国际化变得简单;如何将国际化信息放到控制器类中,还没有一个统一的标准。
◆Stripes、Spring MVC和JSF:每个地区使用一个资源绑定文件
◆Struts 2、Tapestry和Wicket:提倡把每个页面/action用到的资源文件分开
◆JSF:需要在每个页面上定义资源绑定信息
◆Tapestry:标签比较可怕

页面修饰
◆Tiles能够用于Struts 2、Spring MVC和JSF中;需要对每个页面进行配置。
◆SiteMesh能够用于所有的这些框架中(不推荐在JSF、Tapestry或者Wicket中使用);在设置完成后, 只需要很少的维护。

开发工具
◆Spring MVC:Spring IDE,但是只做XML校验,不是一个UI/web工具
◆Struts 2:Eclipse
◆Tapestry:Spindle,对编码者非常有利
◆JSF:众多IDE支持,并且做得越来越好
◆Stripes和Wicket:没有任何官方工具
◆NetBeans目前支持Struts *、JSF(+Facelets)、Tapestry和Wicket,尚不支持Stripes和Spring MVC


市场需求
◆Struts 1:需求依然很大并且被广泛使用
◆Spring MVC:越来越受关注,但大部分是因为Spring框架的一些其他特征
◆JSF:很快地变得流行起来
◆Struts 2:正在获得地盘,但是相关的工作机会很少
◆Tapestry:在过去的数年里,受欢迎程度不断增加
◆Wicket和Stripes:还是未知数

【编辑推荐】

JSF和AJAX企业级开发之路(一)
JSF和AJAX企业级开发之路(二)
在JSF应用中捕捉managed-bean构造方法
表现层框架Struts/Tapestry/JSF比较
简单介绍JSF标签
分享到:
评论

相关推荐

    基于python与Django的网上购物平台

    基于python与Django的网上购物平台,页面整洁美观,主要功能有: 1、首页包括我的订单、购物车、我的收藏、我的足迹 2、商品分类查找、商品搜索、待收货、待发货、代付款 3、商品详情信息、配送地址选择、加入购物车 4、系统的登录和注册 使用的是mysql数据库,适合初学者下载使用。

    数据库设计管理课程设计系统设计报告(powerdesign+sql+DreamweaverCS)超市管理系统设计与开发2

    数据库设计管理课程设计系统设计报告(powerdesign+sql+DreamweaverCS)超市管理系统设计与开发2提取方式是百度网盘分享地址

    基于springboot的物流管理系统源码数据库文档.zip

    基于springboot的物流管理系统源码数据库文档.zip

    springboot285基于Java web的药店管理系统的设计与实现.zip

    论文描述:该论文研究了某一特定领域的问题,并提出了新的解决方案。论文首先对问题进行了详细的分析和理解,并对已有的研究成果进行了综述。然后,论文提出了一种全新的解决方案,包括算法、模型或方法。在整个研究过程中,论文使用了合适的实验设计和数据集,并进行了充分的实验验证。最后,论文对解决方案的性能进行了全面的评估和分析,并提出了进一步的研究方向。 源码内容描述:该源码实现了论文中提出的新的解决方案。源码中包含了算法、模型或方法的具体实现代码,以及相关的数据预处理、实验设计和性能评估代码。源码中还包括了合适的注释和文档,以方便其他研究者理解和使用。源码的实现应该具有可读性、可维护性和高效性,并能够复现论文中的实验结果。此外,源码还应该尽可能具有通用性,以便在其他类似问题上进行进一步的应用和扩展。

    基于springboot云平台的信息安全攻防实训平台源码数据库文档.zip

    基于springboot云平台的信息安全攻防实训平台源码数据库文档.zip

    2010-2022年地区社会信任水平(CGSS调查数据)-最新出炉.zip

    2010-2022年地区社会信任水平(CGSS调查数据)-最新出炉 2010-2022年cgss社会信任,原始数据及处理代码!! 包括: trust1上市公司所在省份的社会信任水平,等于CGSS中33的回复中“非常同意”和“比较同意”的人数占该省回复人数总数的比重; trust2上市公司所在省份的社会信任水平,对于CGSS中a33问题回复“非常不同意”“比较不同意”“说不上同意不同意”“比较同意”“非常同意”的,分别赋值为-2、-1、0、1、2,然后,取该省份所有回复的平均值。

    (源码)基于MCU和C语言的数字时钟系统.zip

    # 基于MCU和C语言的数字时钟系统 ## 项目简介 这是一个数字时钟系统的设计与实现项目,结合了电路设计与嵌入式编程技术。本项目包含了电路设计、PCB板设计和基于微控制器(MSP4302553)的C语言程序开发。数字时钟功能包括时间显示、闹钟提醒等。 ## 项目的主要特性和功能 1. 基于微控制器MSP4302553实现数字时钟功能。 2. 支持时间显示,包括小时、分钟和秒。 3. 支持闹钟提醒功能。 4. PCB板设计,方便硬件制作和集成。 ## 安装使用步骤 假设用户已经下载了本项目的源码文件和相关硬件设计文件。 1. 安装并熟悉MSP430微控制器的编程环境,如Energia IDE。 2. 根据提供的PCB设计文件制作硬件电路,确保电路连接正确无误。 3. 将编译好的C语言程序烧录到MSP430微控制器中。 4. 完成硬件电路的组装和调试。确保数字时钟正常工作,显示时间准确。

    基于springboot的城市公交查询系统源码数据库文档.zip

    基于springboot的城市公交查询系统源码数据库文档.zip

    (源码)基于JavaEE和Layui的技术论坛系统.zip

    # 基于JavaEE和Layui的技术论坛系统 ## 项目简介 这是一个基于JavaEE和Layui框架开发的技术论坛系统,旨在为技术爱好者提供一个交流和讨论的平台。系统支持用户注册、登录、发帖、回复、管理论坛板块等功能,适用于小型技术社区的搭建。 ## 项目的主要特性和功能 1. 用户管理 用户注册、登录、修改个人信息。 管理员权限管理,包括删除用户。 2. 论坛管理 添加、删除、修改论坛板块。 查看所有论坛板块及其详细信息。 3. 帖子管理 发布、删除、查看帖子。 根据论坛板块分类查看帖子。 4. 回复管理 发布、删除回复。 查看指定帖子的所有回复。 ## 安装使用步骤 ### 环境准备 1. JDK确保已安装JDK 1.8或更高版本。 2. Tomcat下载并安装Apache Tomcat 9.0.24或更高版本。

    springboot303针对老年人的景区订票系统.zip

    论文描述:该论文研究了某一特定领域的问题,并提出了新的解决方案。论文首先对问题进行了详细的分析和理解,并对已有的研究成果进行了综述。然后,论文提出了一种全新的解决方案,包括算法、模型或方法。在整个研究过程中,论文使用了合适的实验设计和数据集,并进行了充分的实验验证。最后,论文对解决方案的性能进行了全面的评估和分析,并提出了进一步的研究方向。 源码内容描述:该源码实现了论文中提出的新的解决方案。源码中包含了算法、模型或方法的具体实现代码,以及相关的数据预处理、实验设计和性能评估代码。源码中还包括了合适的注释和文档,以方便其他研究者理解和使用。源码的实现应该具有可读性、可维护性和高效性,并能够复现论文中的实验结果。此外,源码还应该尽可能具有通用性,以便在其他类似问题上进行进一步的应用和扩展。

    基于python+MySQL实现高校学籍管理系统功能齐全,使用了hash函数单向加密等密码学技术课程设计(源码+课设报告)

    【作品名称】:基于python+MySQL实现的,针对老师、学生、管理员用户,功能齐全,使用了hash函数单向加密等密码学技术。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 功能要求 实现学生信息、班级、院系、专业等的管理; 实现课程、学生成绩信息管理; 实现学生的奖惩信息管理; 创建规则用于限制性别项只能输入"男"或"女"; 创建视图查询各个学生的学号、姓名、班级、专业、院系; 创建存储过程查询指定学生的成绩单; 创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级学生人数; 建立数据库相关表之间的参照完整性约束。 学籍管理系统的功能需求包括管理员、学生和教师对功能的需求的三大部分: 1. 管理员对功能的需求: 管理员权限最大,可以对学生、教师、课程进行管理,包括对学生学籍信息的增删改查,对教 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。

    【多式联运】基于模糊需求和模糊运输时间的多式联运路径优化附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    (源码)基于Spring Boot和Vue的物业管理系统.zip

    # 基于Spring Boot和Vue的物业管理系统 ## 项目简介 本项目是一个基于Spring Boot和Vue的物业管理系统,旨在提供一个高效、易用的平台,帮助物业公司管理小区、楼栋、房产、业主、车辆等信息。系统支持用户管理、权限控制、数据统计等功能,适用于各类物业管理场景。 ## 项目的主要特性和功能 ### 用户管理 用户登录与权限控制系统支持多用户登录,并根据用户角色进行权限控制,确保不同用户只能访问其权限范围内的功能和数据。 用户信息管理管理员可以查看、编辑和删除用户信息,包括用户的基本信息、角色和权限。 ### 小区管理 小区信息管理管理员可以添加、编辑和删除小区信息,包括小区名称、地址、面积、总栋数、总户数等。 小区状态管理管理员可以设置小区的状态(正常或停用),并查看小区的详细信息。 ### 楼栋管理 楼栋信息管理管理员可以添加、编辑和删除楼栋信息,包括楼栋名称、所属小区、总户数等。

    基于springboot+Vue框架的学生交流互助平台源码数据库文档.zip

    基于springboot+Vue框架的学生交流互助平台源码数据库文档.zip

    Nvidia GeForce GT 1010驱动(适用Win7、Win8)

    NVIDIA GeForce GT 1010 是英伟达推出的一款入门级桌面显卡,以下是它的详细介绍: 基本信息 发布时间:2021 年 1 月 13 日. 核心代号:GP108. 制造工艺:14 纳米. 性能参数 核心频率:基础频率为 1228MHz,加速频率可达 1468MHz. 显存类型:GDDR5 ,显存容量为 2GB,位宽 64bit,显存频率为 6GHz ,显存带宽 48.06GB/s. 流处理器数量:256 个. 纹理单元:16 个. 光栅单元:8 个. 功耗与供电 功耗:热设计功耗(TDP)仅为 30W,无需额外的电源连接器,可直接通过 PCI-E 插槽供电. 建议电源:200W 及以上. 显示输出接口 配备 1 个 DVI 接口、1 个 Mini-HDMI 2.0 接口,可满足基本的显示输出需求. 性能表现 游戏性能:由于其规格较低,它主要适用于轻度游戏,如独立游戏、像素风格游戏、模拟经营及怀旧老款游戏等。在面对大型 3D 游戏或对画质和帧率要求较高的游戏时,可能无法提供流畅的游戏体验. 日常应用:能够满足日常的办公需求,如文档处理、网页浏览等,也可以流畅播放高清视频.

    (源码)基于Arduino的RS232通讯拦截系统.zip

    # 基于Arduino的RS232通讯拦截系统 ## 项目简介 本项目旨在拦截并观察RS232设备之间的ASCII通信。通过在两个RS232设备之间插入Arduino,用户可以调试或逆向工程设备的命令集或协议。项目基于Arduino平台开发,适用于需要深入探究RS232通信的用户。 ## 项目的主要特性和功能 1. 通信拦截拦截并打印两个RS232设备之间的通信内容。 2. 调试与分析通过Arduino的串口监视器查看通信内容,方便调试和协议分析。 3. 硬件指导提供详细的硬件连接示意图和软件操作流程指导。 ## 安装使用步骤 假设用户已经下载了本项目的源码文件。 1. 准备硬件 两个RS232toTTL转换器 Arduino(建议使用Mega 2560以获取足够的串口资源) 连接线等 2. 连接硬件

    Delphi RSA签名与验签库

    Delphi RSA签名与验签库 简介 本开源仓库提供了一个Delphi库,用于实现RSA签名与验签功能。该库支持三种签名与验签方式(SHA1WithRSA、SHA256WithRSA和MD5WithRSA),并且支持PKCS8和PKCS1两种秘钥格式。此外,还提供了UTF-8和GBK两种字符集选择,兼容Delphi 7到Delphi XE10版本。 功能特点 支持的签名与验签方式: SHA1WithRSA SHA256WithRSA MD5WithRSA 支持的秘钥格式: PKCS8 PKCS1 支持的字符集: UTF-8 GBK 兼容性: Delphi 7 Delphi 2007 Delphi 2009 Delphi 2010 Delphi XE Delphi XE2 Delphi XE3 Delphi XE4 Delphi XE5 Delphi XE6 Delphi XE7 Delphi XE8 Delphi 10 Seattle Delphi 10.1 Berlin Delphi 10.2 Tokyo Delphi 10.3 Rio Delphi 10.4 Sydney 使用

    基于springboot的中医院问诊系统源码数据库文档.zip

    基于springboot的中医院问诊系统源码数据库文档.zip

    基于springboot+JavaWeb图书管理系统源码数据库文档.zip

    基于springboot+JavaWeb图书管理系统源码数据库文档.zip

    基于SpringBoot的农业收成管理系统源码数据库文档.zip

    基于SpringBoot的农业收成管理系统源码数据库文档.zip

Global site tag (gtag.js) - Google Analytics