我的一个客户不知道该选用Struts还是JSF。就像你预料的那样,我通常会问:这2中框架之间有什么区别?当然,除了我的这个客户外很多人都面临这样的选择。
总的来说,我建议在新项目中优先考虑JSF。虽然常常有一些商业上的因素迫使我们为现有的项目选择了Struts,而且那些解决方案还有待考验,但是,让我们面对一个事实:JSF比Struts好多了。
下面是我选择JSF而不选Struts的十大理由:
1.Components(组件)
2.Render Kits
3.Renderers
4.Value Binding Expressions(值绑定表达式)
5.Event Model(事件模型)
6.Extensibility(可扩展性)
7.Managed Beans(Dependency Injection 依赖注入)
8.POJO Action Methods
9.JSF is the standard Java-based web app framework (JSF是java web应用程序的标准框架)
10.There's only one Struts(只有一个Struts)
10.There's only one Struts(只有一个Struts)
Struts是一个开源产品,然而JSF是一个标准。这个细节常常被新的JSF学习者忽略,其实这是显而易见的,因为我们有多个JSF的实现。虽然JSF还很不成熟,但是我们已经有了2个优秀的JSF实现可以选择:Sun的参考实现和Apache的MyFaces。另一方面,我们只有一个Struts。
9.JSF is the standard(JSF是标准)
JEE 5.0要提供一个JSF的实现,这表明JSF不久将会无处不在。这可能与你无关,但是和工具供应商密切相关。现在大概有50个java web应用程序框架,工具供应商不会情愿去支持一个特别的框架,但是他们会毫不犹豫的去支持一个标准。而且不止供应商,开源项目也会迅速的聚集在JSF的四周,争先恐后的去实现相同的功能。比如说,直到我们去实现本质上和Shale的Tapestry差不多的视图的时候,我才知道Facalets。(从长远来看,我相信这种冗余是件好事,会给我们带来好处)
8.POJO Action Methods
Struts的行为是和Struts的API绑定在一起的,但是JSF的行为方法可以在POJPO中实现。这意味着你不用在表单和模型对象之间实现一个多余的行为层。顺便说一下,在JSF里面没有行为对象,行为在模型对象中实现。但是也请注意一点:如果你愿意你也可以生成与JSF独立的行为对象。在Struts里面,你有Form. Bean和Action Bean。Form. Bean包含数据而Action Bean包含逻辑。OO狂会想去合并前2者,在Struts你办不到。但是在JSF中,你可以分开数据和逻辑,也可以合并到一个对象中,一切由你决定。
7.Managed Beans(Dependency Injection 依赖注入)
和Spring一样,JSF也使用了依赖注入(DJ)(或控制反转(IoC))去实例化和初始化Bean。Struts的确为你生成了Form. Bean和Action Bean,但是JSF可以为你生成各种各样的Managed Bean。
6.Extensibility(可扩展性)
这个很重要。JSF有6个对象实现了这个框架的大部分功能,而且你可以很容易的用你自己的实现代替原有实现。比如你想加一个自定义参数在JSF表达式语言里面,或是添加一个自己的视图控制器以便于区分组件和HTML。事实上Shale实现了上面的功能。如果你还没有满足,JSF提供了几个地方你可以轻松的控制JSF的生命周期。Shale给你的会更多。
5.Event Model(事件模型)
JSF的事件模型使你可以对值改变,动作,JSF生命周期阶段变换等作出反应。在JSF1.1中,那些事件都是在服务器端处理的,这肯定是一个缺陷,好在JSF2.0计划支持客户端事件,拭目以待吧。
4.Value Binding Expressions(值绑定表达式)
在Struts中,你负责把数据从Form传递到模型对象。你实现的Action的execute方法是把Form作为一个参数。然后你再手动的把数据从Form. Bean里面取出放到模型对象里面。你要为应用里面的每个Form做这些事情,然而在JSF里面,你只需像这样:#{model.property} 就够了,其他的交给JSF来处理。
3.Renderers
你有看过Struts的标签的源代码吗?它直接生成HTML。JSF组件标签什么都不生成,它和服务器上的一对component-renderer对应。Component维护组件状态,rendered负责获得视图。重点是renderers是可插拔的,即你可以根据自己需求实现然后替代掉默认实现。比如说我在NFJS上面的Felix谈话中举例说明了怎么去实现一个自定义的label renderer。你只需要配置你的renderer,JSF就会自动在你的应用程序里面使用他。
2.Render Kits
在几年前我曾经有份Struts咨询工作,我们必须同时支持浏览器和无线设备,非常痛苦。但是用JSF来完成那个任务非常容易,因为你可以生成你自己的render kit-为一种特定显示技术的renderers的集合-然后配置到JSF里面。
1.Components(组件)
组件是Struts和JSF之间最大的区别。就像Swing一样,JSF提供丰富的底层构件去开发组件然后添加到标准的组件集。那些底层构件让你很容易的生成自己的组件并且和别人共享。现在我们到处都能看到自定义组件跳出来,比如说Oracle的ADF和MyFaces,两者都提供了丰富的组件集,就像javascript日历,tree等等。当然,组件只是一部分。典型的是,组件都和一个独立的renderer对应,这给我们带来了真正的好处(看第3条)。但是和JSF中的很多东西一样,你不一定要墨守成规。只要你愿意,你可以实现render自己的组件,虽然这样你会失去给组件加入别的renderer的能力。
分享到:
相关推荐
在这个**JSFLoginDemo**中,我们将探讨如何利用JSF和Struts框架实现一个登录功能的示例。 **Struts**是另一个流行的Java Web框架,它遵循MVC(Model-View-Controller)设计模式。Struts提供了一整套控制层的解决...
Struts2.0和JavaServer Faces (JSF) 都是Java Web开发中的重要框架,它们各自在不同的层面上提供服务。Struts2.0是一个强大的MVC(模型-视图-控制器)框架,用于构建可维护性和可扩展性高的Web应用程序。而JSF则是一...
JSF的组件库和生命周期管理使开发更为直观,而Struts的拦截器和灵活的配置赋予了开发者更大的控制权。 在实际开发中,选择JSF还是Struts取决于项目需求、团队技术栈和性能考量。例如,对于需要快速开发且重视UI组件...
Struts、Spring、Hibernate 和 JavaServer Faces (Jsf) 是Java Web开发中四个非常重要的框架。这四个框架的集成使用可以构建出高效、模块化且易于维护的企业级应用。 Struts 是一个开源的MVC(Model-View-...
### 基于J2EE下的JSF与Struts框架比较分析 #### 一、引言 随着互联网技术的发展,企业级应用的需求日益增长,Java 2 Platform, Enterprise Edition (J2EE)作为一套全面的企业级Java应用开发平台,凭借其开放性、...
3. **非组件化**:Struts不像JSF那样提供丰富的组件库,对页面组件的管理较为繁琐。 4. **开发工具支持**:尽管有一些工具支持,但Struts的开发工具不如JSF的丰富和直观。 随着技术的发展,JSF和Struts都在不断...
【标题】"留言簿管理系统(JSF+Struts+Spring)"所涉及的知识点主要集中在Java Web开发领域,特别是三个核心框架的集成应用:JavaServer Faces(JSF)、Struts和Spring。这些技术是构建企业级Web应用程序的常用工具...
通过上述讲解,我们了解到Struts2整合JSF能够提升Web应用的开发效率和功能,但同时也需要开发者具备扎实的Struts2和JSF基础。实践中,可以借助书中的案例和提供的源代码,逐步掌握这一整合技术。
**JSF(JavaServer Faces)与Struts是...总的来说,JSF和Struts都是为了提升Java Web开发效率和质量而设计的框架,但它们的实现方式和设计理念有所不同,开发者应根据项目的具体需求和团队的技术背景来选择合适的框架。
**JSF(JavaServer Faces)和Struts是两种常见的Java表现层框架,它们在处理Web应用...总的来说,选择Struts还是JSF取决于具体项目的需求和团队的技术背景。两者都是成熟的表现层框架,都有其独特的优点和适用场景。
**JSF(JavaServer Faces)和Struts2是两种广泛使用的Java Web开发框架,它们都是J2EE(Java 2 Platform, Enterprise Edition)生态的重要组成部分。这篇教程将深入讲解这两种框架的基本概念、工作原理以及实际应用...
详细介绍JSF与Struts的异同 详细介绍JSF与Struts的异同
### MVC模式下JSF与Struts的异同分析 #### 一、概述 MVC(Model-View-Controller)模式是一种广泛应用于软件工程中的设计模式,尤其在Web应用开发领域非常常见。它将应用程序分为三个核心组件:模型(Model)、视图...
而Struts则适用于对清晰MVC架构有需求,且不介意其相对较旧的设计的项目。 在选择框架时,应考虑项目规模、团队技能集、性能需求、可维护性等因素。每个框架都有其独特之处,理解它们的核心理念和优缺点,有助于...
JavaServer Faces (JSF) 和 Apache Struts 是两种流行的Java Web开发框架,它们都被广泛用于构建基于MVC(模型-视图-控制器)架构的Web应用程序。虽然它们有许多相似之处,但也存在显著的区别,这些差异影响了开发...
通过研究这些例子,开发者能够深入了解JSF和Struts的工作原理,以及如何将两者结合使用以提高应用程序的效率和可维护性。这对于初学者来说是一份宝贵的学习资源,也适合有经验的开发者参考,以便更好地理解和应用...
Struts和JSF各有优缺点,选择哪个取决于具体项目需求。Struts更适合那些需要高度自定义和扩展的项目,而JSF则适用于大型企业应用,尤其在Java EE环境中。同时,由于Struts2的出现,它引入了更多现代Web开发的最佳...
Struts和JavaServer Faces(JSF)是两种广泛使用的Java Web开发框架,它们各自有着不同的设计哲学和功能特性。在本学习资料中,你将找到有关这两个框架的深入理解和实践应用的关键知识点。 **Struts框架** Struts是...
总的来说,Struts更适合那些希望专注于控制层逻辑和简单表示层的项目,而JSF则为需要丰富组件和更强表示层控制的项目提供了更好的选择。开发者可以根据项目需求、团队技能和性能要求来决定使用哪种框架。