`
cheng5259
  • 浏览: 61792 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

JSF和JSP的区别

阅读更多

Struts/Tapestry/JSF是目前J2EE表现层新老组合的框架技术。从诞生时间上看,Struts应该比较早,使用得非常广泛,Tapestry  3.0逐渐引起广泛的重视,正当Tapestry即将大显身手时期,SUN推出JSF标准技术,虽然JSF一开始推出尚不成熟,留出了一段空白期,但是随着JSF1.1标准推出,JSF开始正面出击,粉面隆重登场了。 
  其实,JSF和Tapestry也并不是那种头碰头的相同竞争性技术,两者还是各有侧重点的,不过比较细微,但是这种细微点在实现一个大工程时可能带来不同的感受和变化。

  首先,我们从一个高度来抽象一下表现层框架应有的技术架构,下图可以说所有表现层框架技术都必须实现的功能架构图:



  当然,我们不必废话罗嗦MVC模式,MVC模式是基准模式,现在框架技术已经不必再拼是否是MVC模式了。  在上图MVC模式基础上,一个表现层框架无外乎要实现图中的三个功能:

  1.在当前页面能够显示一个组件对象的内容;而不是象纯JSP那样,需要在Jsp页面写入“调用对象方法”的Java代码。

  2.当用户按下页面的提交按扭或链接后,事件发生,这时应该触发服务器端并将当前页面的参数提交给服务器。这种机制表现在Form表单提交和有参数的链接<a  href=""></a>

  3.从一个页面视图直接跳转到另外一个页面视图,单纯的导航作用。

  我们通过下表来比较这  三种框架在实现上图各个功能时技术细节,从而得出他们的异同点和偏重点。

    Struts  Tapestry3.0  JSF 
在View显示的组件要求  组件必须继承ActionForm
  分显式调用和隐式调用
组件必须继承BaseComponent  普通POJO
无需继承
Managed  Bean 
组件在View显示粒度  View页面只能显示与表单对应的ActionForm,配置中Action  ActionForm  页面一般只能1:1:1关系。  可将组件嵌入页面任何一行,对使用组件数量无限制。  同Tapestry 
页面分区tiles  使用Tiles标签库实现,需要另外tiles-def.xml配置文件  组件有自己的视图页面,通过调用组件即直接实现多个页面组合。强大自然的页面组合是其特点。  通过组件+标签库实现Subview,但如需重用Layout,还要结合Tiles. 
页面跳转  使用标签库html:link中写明目标URL,URL名称需要对照配置文件的path命名,与组件Action耦合。  URL名称是目标的组件名称,不涉及URL和路径等操作,方便稳固。  类似Struts,也需要在配置文件中查找,与组件分离。 
参数传递  使用html:link时传递参数超过一个以上处理麻烦。  直接调用组件,直接赋予参数,没有参数个数限制  参数分离传递给组件 
事件触发  通过表单提交submit激活,不能细化到表单里字段。  能够给于表单每个字段贴一个事件,事件组件必须实现PageListener接口  同Tapestry,事件组件必须实习ActionListener  接口 
 

  Struts组件编程模型

  Struts实现组件编程时有一些复杂:经常为一个页面中需要引入多个组件而头疼,因为Struts中无法直接引入多个组件,必须绕一些圈子:

  一般分两种情况:如果同一个Action就可以对付这些组件,那么在这种情况下有两个办法:

  1.将这多个组件装入一个ActionForm中,如使用MapForm等机制;

  2.手工将多个组件装入request/session等scope中,然后根据其名称在jsp中获得。

  这两个方法都有缺点:  第一种办法经常一个ActionForm弄得面目全非,变成一个大杂烩,违反了OO分派封装的原则;第2种办法其实又回到jsp编程;

  第二种情况,如果这些组件必须有预先由不同的Action来处理,每个组件必须经过Action  -->ActionForm流程,在这种情况下有两种办法:

  1.使用Tiles,  不同流程输出到同一个页面的不同区域。是一种并行处理方式。

  2.  对多个流程首尾相连,第一Action  forward结果是第二个Action,最后输出一个Jsp,在这个jsp中就可以使用前面多个流程的多个ActionForm了,这属于串行方式。

  Struts组件模型缺点

  Struts组件编程必须限定在Action/ActionForm/JSP这三个框框中做文章,难度相对比较大,而Tapestry/JSF则没有太多这些技术框框限制,两者在组件编程方面更让编程者自由一些,方便一些,这也是组件型框架的优势吧。

  Struts标签库

  在Struts中,经常需要使用标签库来显示组件ActionForm中内容,这就涉及到一个结合的问题,标签库是别人写的,参考Struts的标签库用法,而组件是自己的,难度和麻烦就体现在这个结合点上。

  JSF基本思路和Struts差不多,只不过换了不同标签库,也需要标签库+组件的结合思考,不过因为组件这里是通用组件,没有什么限制,所以这样比Struts要轻松一些。

  Tapestry使用了组件库概念替代了标签库,没有标签库概念,这样就没有标签库和自己的组件需要结合的问题,都是组件的使用,组件中分Tapestry标准组件和自己定义的组件,这也是接触了Jsp体系的人学习Tapestry面临的一个思路转换。

  具体以页面跳转为例子,页面跳转是靠链接<a  href="目标"></a>  实现,链接是页面经常使用的元素。

  Struts提供的html:link在频繁使用就特别不方便,尤其在传递多个参数时:其中html:link的page值,是跳转对方页面或Action的path,这个path一般需要到struts-config.xml查找Action的相应path,一旦配置文件path值修改,涉及到这个所有相关页面都要修改。

  JSF将链接概念划分两个方面:导航性质和事件激活,在导航方面还是需要到配置faces-config查询Navigation的from-outcome的值。

  由于Tapestry没有标签库概念,只有组件或页面两个概念,因此,链接跳转目标要么是组件,要么是页面,简洁简单,它没有多余的path概念,就是组件名,也就是对象名称,组件名称和path名称合二为一。

  总结

  JSF在很大程度上类似Struts,而不是类似Tapestry,可以说是一种Struts  2.0,都是采取标签库+组件的形式,只是JSF的组件概念没有象Struts那样必须继承ActionForm的限制;JSF在事件粒度上要细腻,不象Struts那样,一个表单一个事件,JSF可以细化到表单中的每个字段上。

  JSF只有在组件和事件机制这个概念上类似Tapestry,但是不似Tapestry那样是一个完全组件的框架,所以,如果你做一个对页面要求灵活度相当高的系统,选用Tapestry是第一考虑。

  Struts/JSF则适合在一般的数据页面录入的系统中,对于Struts和JSF的选用,我目前个人观点是:如果你是一个新的系统,可以直接从JSF开始;如果你已经使用Struts,不必转换,如果需要切换,可以将JSF和Tapestry一起考虑。

  另外,JSF/Tapestry不只是支持Html,也支持多种客户端语言如WML或XUI等。

  这三者之间关系:如果说Struts是左派;那Tapestry则是右派;而JSF则是中间派,中庸主义是SUN联盟的一贯策略。

  当然,你也可以发表你在实践中这三者任何一个的使用感受,以使得后来者有一个比较。


参考网址:http://www.quaternion.cn/question1.aspx?id=99&pid=8
分享到:
评论

相关推荐

    2007年图书:JSP_JSF_Tomcat Web编程从入门到精通

    《2007年图书:JSP_JSF_Tomcat Web编程从入门到精通》这本书主要涵盖了Java服务器页面(JSP)、JavaServer Faces(JSF)以及Tomcat应用服务器在Web开发中的应用,旨在帮助初学者及有一定基础的开发者深入理解和掌握...

    Java代码中使用JSP/JSF表达式语言EL

    Java代码中使用JSP/JSF表达式语言(EL,Expression Language)是Web开发中的一个核心概念,它允许开发者在页面上动态地访问和操作JavaBean或其他数据源的数据。EL提供了一种简洁的方式来读取和设置Java对象的属性,...

    多功能计算器(java,jsf,jsp)

    【描述】中提到的项目是一个基于Java Server Faces(JSF)框架开发的计算器应用,它结合了Java后端技术和JavaServer Pages(JSP)用于前端展示。这个项目不仅提供了基本的计算功能,还可能包含了更多复杂的运算选项...

    jsf_page.rar_ jsf_page_JSF_PAGE_java jsf_jsf glassfish_jsp page

    - JSF的视图是由UI组件(如输入字段、按钮等)组成的,这些组件在JSP页面上声明,然后由JSF框架处理用户交互和数据绑定。 3. Java EE组件: - GlassFish是Java EE应用服务器之一,它提供了运行JSF应用的环境。在...

    JSP和JSF合并 打造完美的Web层应用

    【JSP和JSF合并:打造完美的Web层应用】 Java Server Pages(JSP)和JavaServer Faces(JSF)是Java平台上的两种重要技术,它们分别处理Web应用的不同层面。JSP主要负责后端逻辑处理,而JSF则专注于前端表现层的...

    JSF实例

    JSF和JSP可以很好地协同工作,JSF处理业务逻辑和数据管理,而JSP负责页面展示。开发者可以使用JSF的UI组件在JSP页面上构建交互式的用户界面。 ### JSF库和扩展 JSF有一个强大的生态系统,包括许多开源库,如...

    jsf登陆的例子 jsp+sqlserver2000 jsf标签

    JSP和JSF的结合使得开发者能够利用JSP的模板技术和JSF的强大功能,例如,使用JSP标签库来渲染JSF组件,简化页面的编写。 SQL Server 2000作为关系型数据库管理系统,存储并管理着用户的登录信息,如用户名和密码。...

    在JSP中用JSF组件

    JSF组件包含若干个Java类和配置文件。为创建一个自定义JSF组件,您需要开发一个扩展JSF基本组件类的Java类;为默认呈现软件包开发呈现程序;开发一个将在JSP页面中用于描述标签的Java类;编写一个标签库定义(TLD)...

    java java jsp jsf

    java jsp jsf fx java jsp jsf fx java jsp jsf fx

    JSF Java Server Faces (JSF)框架

    JSF是一种用于构建Java ... 包含JSP页面的JSF应用程序也使用由为了表现UI组件和在页面上的其他对象的JSF技术而定义的标准的tag库。 Java Server Faces技术的重要开发框架 sun-ri、myfaces、icefaces、richfaces、seam

    Beginning JSP,JSF and Tomcat 书中源码

    Beginning JSP,JSF and Tomcat 书中源码 Beginning JSP,JSF and Tomcat 书中源码

    JSP和JSF合并+打造完美的Web层应用

    在Web开发领域,JavaServer Pages (JSP) 和 JavaServer Faces (JSF) 都是常用的组件模型,用于构建动态的、数据驱动的Web应用程序。本文将深入探讨JSP与JSF的结合使用,以及如何利用它们的优势来打造一个完美的Web层...

    jsp/jsf和XML/XSLT技术整合的精华

    jsp/jsf和XML/XSLT技术整合的精华 随着JSTL 1.0,JSP™ 2.0和JSF 1.0技术 的介入,JSP™技术已经成为一个成熟的主 流表现层技术,但是它还没有提供足够的灵 活性和模块化 。 服务器端Java™技术的发展 • 最新的...

    Apress - Beginning JSP, JSF, and Tomcat Web Development (Nov 2007)

    《JSP, JSF和Tomcat Web开发入门》是一本专为初学者设计的书籍,旨在引导读者深入了解Java Server Pages(JSP)、JavaServer Faces(JSF)以及Apache Tomcat Web服务器的综合应用。这本书结合了理论知识和实践案例,...

    JSP和JSF合并 共同打造完美的Web应用

    【JSP和JSF合并打造完美Web应用】 JavaServer Pages(JSP)和JavaServer Faces(JSF)是两种在Java平台上构建Web应用程序的关键技术。它们各有特点,但结合使用可以大大提高开发效率和应用程序的易维护性。在本文中...

    jsp,jsF.and tomcat 书籍

    《jsp,jsF.and tomcat 书籍》是针对Java Web开发的一本综合指南,主要涵盖了JSP(JavaServer Pages)、JSF(JavaServer Faces)和Tomcat三个关键领域。这本书籍详细介绍了如何利用这些技术来构建高效、动态的Web应用...

    jsp jsf beginning study source code

    JSP和JSF是两种在Java平台上广泛使用的Web开发技术,主要用于构建动态网页应用。本教程源代码旨在帮助初学者理解这两门技术的基本概念、工作原理以及如何在实际项目中运用它们。 **JSP技术详解:** 1. **JSP基本...

    JSF中文教程jsf

    《JSF中文教程》可能是这方面的资源,它可能涵盖了JSF的基础知识、进阶主题和实际案例,旨在帮助开发者快速上手并熟练运用JSF开发Web应用。 通过深入学习JSF,开发者不仅可以提高Web应用的开发效率,还能利用Java ...

Global site tag (gtag.js) - Google Analytics