扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在本页阅读全文(共3页)
1、JSF简介
JSF(Java Server Faces)体系结构是一种Web应用程序框架,它是首个Web应用程序开发的标准框架。JSF提供了一个基于组件的架构(框架)用于管理和构建Web应用程序接口,它也提供了丰富的功能集包含事件处理机制(Event Handling Mechanism)、页面导航(Page Navigation)、验证客户端数据(Input Validation)和数据转换(Conversion)等等。它同样也提供了基于组件的插件化体系来开发和展现用户界面组件,开发者可随时开发他们的自定义UI组件并很容易地将其应用到框架之中。JSF框架最主要的特色之一就是它并不仅针对于一种类型的客户端,意味着除了用于桌面的Html浏览器客户端外,它甚至还可能支持用于移动电话的Wml浏览器客户端。在这篇文章中,将对JSF框架和组成JSF框架的各种关键部件进行一个简单的介绍,接下来详细介绍JSF的请求处理生命周期的各种状态,然后提供一个简单的应用来示范其各种特性。
2、JSF基于组件的架构
在JSF出现之前,Servlets和JSP是在构成Web应用开发的核心组件中最主要的部分。我们来看看在一个传统的Web应用程序中所发生的交互作用,它的实现仅是由遵循MVC-2构架模型的Servlet和JSP组件来构建的。客户端(通常是一个HTML浏览器)发送请求到服务器,Web服务器收到请求,封装request然后通过来自客户端的各种参数值组装这个request对象并将其发送给Servlet。Servlet担当一个控制器(Controller),它解析接收到的request,然后与要执行各种各样的业务逻辑的Model(Java Beans)相结合,最后来选择一个要展现给用户的View。
就像Swing和AWT一样,JSF提供了一个基于组件的体系结构用于开发可重用的UI组件,使得你不需要去重复一些往往会发生在Model2体系结构的View部分的一些复杂的工作。这个框架不仅限于开发自定义的UI组件,同时也支持多种高级特性如之前提到的事件处理机制、验证来自客户端的用户输入数据和页面导航机制等。JSF的好处是表达各种各样的行为或属性的UI组件和它的呈现器(Randerer)之间的耦合度非常低,实际上几乎为零。因为用户与JSF应用交互时,它们其实是与呈现器的输出进行交互,取呈现器针对特定的客户端来创建特定的表现。有关Randerer在后面会有介绍。所以HTML浏览器并不是惟一的目标客户端应用,JSF应用甚至可能会在WML浏览器上也运行的很好。
JSF1.0平台完全符合JSR127标准,2.0的平台完全符合JSR(Java Specification Request)252标准规范。基于规范的内容,JSF2.0组件集包含服务端UI组件和事件发布模型、一套基本的UI组件、一个轻量级的依赖注入容器,规范的内容还包括可自动同步UI组件和应用程序对象、构建于Servlet AP之上,可与JSP一起使用,但并非完全依赖它等等。作为基于组件的构架,JSF具有很好的可配置性和可扩展性。正如开始提到的它具有插件化的体系,这使得JSF的很多功能都可以用可插入的组件替换。这种程度的可插入性让你在构建Web应用GUI方面得到相当大的灵活性,并且还可以很容易地将其它的一些基于组件的技术融入到JSF开发中。例如,JSF内置的轻量级的IOC框架,可以用更强大的Spring框架来取代。与先进的Web2.0技术相结合— 结合JSF与Ajax的优势来开发更加健壮的Web应用程序。
3、JSF基本原理
在JSF应用中,最重要的几个组件是:
◆UI组件:有状态的对象,有服务器维护,提供与用户的特定交互功能。UI组件是具有属性、方法和事件的JavaBean。它们被组织进一个视图,而该视图通常显示为一个页面的组件树。
◆托管①bean
◆验证器
◆转换器
◆事件和监听器
◆页面导航
◆呈现器
以上所述的所有组件都可以在单独的API包中找到。例如,UI组件在javax.faces.component包中,Validation API在javax.faces.validator包中等等。
3.1、UI组件
如果Java Swing的UI组件的展现是用于桌面Java应用程序,那么JSF UI组件则是用于Web应用程序。像Swing组件一样,它们构建在JavaBean规范和标准之上。这意味着JSF组件具有属性、方法和事件,如同传统的JavaBean中所具有的一样。JSF UI组件的特点之一就是它们可以管理组件的状态,更特别的是它们驻留在服务器端而不是户端,这是针对Web应用的约束做的一些特殊设计。很多内置的UI组件与JSF API绑定,如常用的Label,Text-Field,Form,Check-Box等等。JSF同时也提供了一套框架用于创建自定义的UI组件。
值得注意的是JSF UI组件仅表达一个组件的属性、行为和事件而并非实际的显示。例如,对于一个文本框(Text-Field),它的属性可以是文本框的值,可输入的最大字符数等等。修改文本框的现有的值或设置它的最大字符数将产生行为。改变文本框的值可能使得文本框触发某种事件的发生。这种形式即显示在客户端的文本框本身与UI数据呈现是相分离的。
这意味着有一个单独的组件,被称作Renderer,由它来负责UI组件在不同的客户端层面的显示,可能是运行在PC机上的HTML浏览器,也可能是运行在移动电话内部的WML(无线标记语言)浏览器。每个JSF组件都由一个惟一标识符来标识。
3.2、托管(Managed)bean
托管bean其实是一些遵循Java Bean规范的标准的Java类。一般地,托管bean被用来表达用户输入。它们甚至可能担当监听器(Listener)也可以处理适当的Action。
而我要向大家重点介绍的是,托管bean也是一个真正的IoC容器。当然,谈到IoC,大家肯定会想到目前比较流行的Spring框架,但还有另外两个实现了IoC的框架:HiveMind和PicoContainer,这是目前的三大IoC。
关于IoC就不作详细介绍了,但在这里列出它的几个核心的方面:
◆控制对象实例化并通过设置(setter)注入托管对象
◆依赖处理
◆支持对象生命周期管理
◆对于配置管理的支持
接下来,根据以上几点来解释JSF托管Bean同样也是一个“IoC”容器。
3.2.1、实例化控制
JSF的托管Bean工具提供了很好的解决方案来创建和实例化托管(Managed)Bean。
在JSF之前,要在页面中处理JavaBean,我们一般使用JSP的<jsp:usebean>标签,它允许我们在一个指定的scope中实例化JavaBean。JSF对JSP的这个特性做了很大的改进。使用JSF,你现在可以将任何一个含有无参构造函数的Java类,通过将其引用到一个XML配置文件faces-config.xml中注册为一个托管bean。例如一个Java类(或POJO),名为”User”并有name,phone和email三个字段:
|
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者