JSF技术范文

2024-05-15

JSF技术范文(精选6篇)

JSF技术 第1篇

随着互联网技术的飞速发展,人们越来越渴望开发出具有高度互动性、丰富用户体验以及功能强大的富客户端Web应用程序。而RIA正是基于此提出来的富客户端开发技术。JSF是为了解决开发Web应用程序客户端难度大、效率低的问题而由JCP(Java Community Process)提出的一项新的开发框架,它定义了良好的请求处理生命周期以及合理的组件层次结构,具有可重用、可扩展性,并且由服务器端来处理用户界面的管理。JavaFX是SUN公司最新发布的用于开发RIA客户端的脚本语言。JavaFX基于Java Swing 接口库,使得使用JavaFX开发RIA程序更加简单。

一方面利用JSF组件在服务器端开发UI(User Iterface)和程序的应用逻辑,另一方面利用JavaFX简单易用和Swing接口库的丰富组件进行呈现,既达到了开发用户界面的快捷方便,又使客户端成为RIA程序,达到一举两得的效果。

1 技术背景

1.1 RIA技术

传统的Web应用程序是基于页面与服务器端数据传递的模式,把网络程序的表示层建立于HTML页面之上。而HTML是适合于文本的,传统的基于页面的系统已经渐渐不能满足网络浏览者的更高的、全方位的体验要求了。为了解决此问题,出现了一种新类型的Internet应用程序。这就是RIA,这些应用呈现结合了桌面应用呈现的反映快、交互性强的优点和Web应用程序的传播范围广及容易传播的特性。这样,应用程序可以提供更丰富、更具有交互性和响应性的用户体验。RIA的另一个好处在于,数据能够被缓存在客户端,从而可以实现一个比基于HTML的响应速度更快且数据往返于服务器的次数更少的用户界面。

1.2 JSF框架

JSF是一个完全基于MVC Model-2的架构模式,它的设计目的是为了简化高性能Java Web应用程序用户界面的创建和开发流程。从核心看,JSF是构建Web应用程序用户界面的标准Java框架。JSF包括标准的UI组件集、基于Servlet的API函数和两个定制标签库。JSF是由事件驱动的框架,共有4种标准事件:值改变事件、动作事件、数据模型事件和生命周期阶段事件。只要对前三种事情定义处理监听器,然后为组件注册此监听器,这样当事件发生时,框架会自动调用相应事件处理器进行处理。JSF的导航系统基于动作方法的逻辑结果,负责装入相应的页面。对于给定的页面,导航规则定义了如何理解逻辑结果,以及基于这些逻辑结果装入哪一个页面[1,2]。

1.3 JavaFX脚本语言

JavaFX是2007年5月份由Sun公司在JavaOne大会上新推出的一种脚本语言,该脚本语言是Sun的RIA解决方案,是一种用于编写能够在支持Java的PC和手机上运行应用软件的更简单的脚本语言,其编写的程序可以直接在JVM(Java Virtual Machine)上运行(Java 1.5以上)。该脚本语言被用来让使用Java Swing用户接口库来创建RIA程序变得更加容易,它通过属性和值来表现窗体和应用,并且提供了一种用于表述用户界面组件结构和内容的声明式的语法。使用该语言,使得创建RIA程序更加方便快捷,而且利用标准Java中Swing接口库中丰富的呈现组件,使应用程序更加丰富多彩,功能更加强大[3]。

2 JSF和JavaFX集成的可行性研究

2.1 JSF特性分析

JSF一个重要的设计思想就是不依赖于特定的显示技术。在JSF中,页面中所有组件被称为视图,视图被组织成组件树。当服务器端收到请求时,视图处理器生成一颗由被请求页面所有组件组成的组件树,并且负责在客户端显示视图。在JSF中,视图处理器是由ViewHandler类来担当的。要使用其它的显示技术只需要替换默认的视图处理器就可以[4]。

2.2 JavaFX特性分析

JavaFX的Label类支持Html内容。通过使用Label类,可以利用HTML和CSS建立风格化文本和图片,它非常类似编写典型的Web应用。另外,通过使用JavaFX内嵌表达式,能够在Swing应用中建立动态HTML内容。

2.3 集成可行性分析

基于以上JSF和JavaFX的特性分析,二者集成的目标是期望JSF组件由JavaFX编写的呈现器呈现在客户端浏览器中,然后由JVM执行,并且和服务器进行交互。服务器端的逻辑仍由JSF负责。JSF和JavaFX的集成需要解决两方面的问题。

(1) JavaFX是否可以正确的呈现JSF组件。

(2) JavaFX呈现的JSF组件是否可以和服务器端正常地交互。

JavaFX就是基于Swing接口库上的脚本语言,它的Label类支持Html代码,可以在组件的呈现器中把Html代码嵌入到Label类中,当服务器端收到客户端的请求时,呈现器把由JavaFX代码表示的JSF组件传送到客户端,由客户端的JVM执行,把组件呈现在浏览器中。因此,第一方面是可行的。

JSF框架是基于JavaBean技术的,采用的是请求URL映射机制,即将匹配的URL信息传送到特定的后台Bean进行处理。具体映射的细节在JSF的配置文件faces-config.xml中配置。因此只要表示组件的JavaFX代码能在客户端正确的执行,基于组件的URL请求就能正确传递到服务器端的后台Bean进行处理。而且服务器端把响应发送到客户端,客户端也能正确地呈现。

因此,集成JSF和JavaFX开发动态Web应用程序是可行的。

3 集成的实现

3.1 集成的原理

由以上的分析可以看出,JSF和JavaFX集成的关键是利用JavaFX为JSF组件开发一套全新的呈现器,然后替换掉JSF中默认的呈现器。

在JSF中,默认的组件呈现器是由Renderer对象来担当的。而Renderer对象被组织成RenderKit包。获取正确的RenderKit包的工作是由类ViewHandler实现的。ViewHanler和RenderKit之间的关系如图1所示。

在JSF请求处理生命周期中的呈现阶段,调用ViewHandler上的renderView()方法。在ViewHandler的calculateRenderKitId()方法实现中,ViewHandler负责根据进入的请求派生正确的renderKitId,这会决定要用哪一个RenderKit处理这个请求。在获取了要使用的RenderKitId后,由RenderFactory得到RenderKit,然后RenderKit根据要显示的组件的类型调用相应的Renderer对象来进行显示。因此,实现新的呈现器,要重写ViewHandler、RenderKit和Renderer三个类。

3.2 集成方法

根据集成原理,要用JavaFX编写新的呈现器,需要以下四个步骤:

(1) 从ViewHandler派生新的类,并且重写相关的方法。

当处理请求时,由ViewHandler决定派生哪一个RenderKit。因为ViewHandler是抽象类,所以要使用JavaFX编写自己的从ViewHandler派生的类,并且实现其中的方法,需要实现的方法如表1所示。

(2) 为每个组件编写Renderer类。

JSF默认是使用JSP来呈现的,要使用JavaFX来为每一个组件编写新的呈现器,负责把JSF组件转化为JavaFX实现的代码,由客户端的JVM执行,收集用户的数据和状态,传递到服务器端,服务器端根据用户提交的数据和状态来决定下一步的执行。

(3) 编写新的RenderKit类,它是以组件类型作为关键字的一组Renderer对象的集合。

(4) 注册呈现器。

要把新编写的呈现器注册到JSF中,需要在JSF的主配置文件faces-config.xml文件中进行配置。这里要求把新的呈现器配置到<application>元素内。如以下代码所示:

4 JSF和JavaFX集成的优点和缺点

把JSF和JavaFX结合起来进行RIA客户端开发,一方面利用了JSF框架的开放性,可以在需要的时候按照要求方便地开发新的呈现器,而且新的呈现器集成进JSF也非常方便;另一方面利用了JavaFX脚本语言的简单易用,并且可以方便地使用Swing接口库中丰富的组件的优势。但是现在JSF由于各个厂商在标准组件的基础上各自提供了扩展组件,这些扩展组件的实现不完全一致,导致了应用的开发被绑定到了一个特定的开发环境,而且也难以移植。而JavaFX由于推出时间短,还没有正式的文档,并且支持的开发工具也不多,而且客户端运行JavaFX程序需要下载JRE(Java Runtime Environment),这些都对JavaFX的应用造成了阻碍。

5 结 论

本文就利用JSF和JavaFX技术开发RIA程序进行了初步探讨,说明了如何利用JavaFX脚本语言开发一个JSF呈现器在客户端呈现JSF组件。相信随着JSF的流行和JavaFX的进一步标准化,这两者的结合一定会给RIA应用带来一种方便、快捷、功能强大的开发模式。

参考文献

[1]Kito Mann.JSF实战[M].铁手,程晓冬,何勇译.北京:人民邮电出版社,2007:479 506.

[2]JSFtechnology[EB/OL].http://java.sun.com//javaee//javaserver-faces/index.jsp.

[3]JavaFX technology[EB/OL].http://sun.com/software/javafx/in-dex.jsp.

[4]Chris Schalk,等.JSF完全参考手册[M].张猛译.北京:人民邮电出版社,2007:351 -358.

[5]汤琪亮,高海锋.JSF技术在网络开发中的应用[J].计算机工程与设计,2006,27(10):1895 -1898.

JSF技术 第2篇

1. 传统JSP开发存在的问题

JSP是一个基于Java的Web用户界面开发标准技术,是一种“脚本式”开发的Web技术,在JSP页面中混淆了大量用于显示逻辑的HTML和用于业务逻辑的Java代码,使得页面设计与程序开发无法分离;JSP另一个更大的缺陷是脚本不能重用,这常常导致开发者不得不在JSP页面之间进行复制-粘贴操作,从而使得程序的调试和设计极其错综复杂。而标签库Tag Lib作为JSP的补充,将Java代码从JSP中剥离,也只是有限地实现了表现与逻辑的分离,始终没有摆脱代码和HTML页面揉和的问题。

2. JSF技术

Java Server Faces(JSF)是一种用于构建Web应用程序的新标准Java框架,Servlet是JSF的基础,它定义了如何用服务器端组件来封装和实现Web应用程序;JSP(Java Server Pages)在Servlet的基础上提供了页面模板创建文本内容(如HTML)的机制,它能与JSF很好的集成。

JSF主要包括两个方面的内容:一个API集合,用来表示用户接口组件、管理组件的状态、处理事件和验证输入、定义页面间的导航以及支持国际化;一个JSP的自定义标签库,用来在JSP页面中显示JSF接口。

JSF的主要优势之一就是它既是Java Web用户界面标准又是严格遵循模型-视图-控制器(MVC)设计模式的框架。用户界面代码(视图)与应用程序数据和逻辑(模型)的清晰分离使JSF应用程序更易于管理。

3. Hibernate技术

Hibernate是JDBC的轻量级的对象封装,它使用现有的Java API,包括JDBC,Java事务管理API(JTA),Java命名目录策略(JNDI)。JDBC提供了一个对关系数据库通用的底层功能性抽象接口,允许任何兼容JDBC驱动的关系数据库都可以被Hibernate支持。JNDI和JTA能让Hibernate很好的集成到J2EE服务器中,同时Hibernate还支持应用程序自己提供的JDBC链接和自行管理事务,增加了数据处理的灵活性。

4. JSF和Hibernate集成框架模型

基于JSF和Hibernate集成框架所开发的Web应用系统主要集中在J2EE中间层的开发,也就是说分别由JSF框架和Hibernate实现MVC模式中三个部分组件的创建和数据持久化的任务。JSF和Hibernate的Web系统架构模型如下图:

Web浏览器提交的用户请求交给JSF框架的控制器处理,在这里控制器主要包括Faces Servlet前端控制器用来对流程进行控制,还有一些实现业务逻辑功能的Action控制器,Faces Servlet将页面处理逻辑的结果通过视图展现给Web浏览器,业务逻辑Action的处理结果改变模型的状态,从而达到控制模型层的目的。JSF框架的视图和模型部分也在JSF配置文件中给出了详细的定义,视图部分定义了应用所有的JSP页面和相关的页面处理流程,模型部分定义了应用所需的Java Bean和它们的路径以及操作范围。模型层的改变会触发持久化对象状态的改变,这时Hibernate通过Properties格式或者XML格式的属性文件和Mapping XML文件,将持久化对象的改变映射到数据库管理系统的相应表格中,从而改变数据库的状态。同样,数据层数据状态的改变也会通过映射文件对应到相应的持久化化对象上,从而改变JSF框架中的模型部分;模型部分的变化也会通过视图组件反应到客户端的Web浏览器上。

集成框架中,视图部分是通过JSF的UI组件来定义的,UI组件是整个应用的中心部件,JSF为Web提供了标准的用户界面组件框架,它为Web应用以及复杂的用户界面组件库(例如日历、树和表格)提供了更强大和更加可视化开发环境的保证。JSF还提供了其它许多标准组件类型,它们的作用是支持UI组件,包括转换器、验证器、渲染器等等。在JSF中,每个UI组件必须实现,javax.faces.component.UIComponent接口,这个接口定义了若干方法来遍历组件树。在集成框架中,每个UI组件可能提交很多事件,并且有许多事件监听器(ActionListener)被注册来接受这些事件的请求。这些侦听器可能是其他用户界面组件或是应用组件。支持的所有事件必须从javax.faces.event.Faces Event基类中派生。JSF处理事件过程如下图:

Hibernate映射文件描述应用中类与数据库表的映射、id的映射配置、Java类的属性与数据表字段的映射。下面就是一个典型的Mapping XML映射文件的代码主要部分:

代码中定义了从类Ele Fee到表t_sw_ele Fee的映射,并且定义了主码与类com.ids.entity.User的多对一关联关系,定义了主键id,和log Date,log User,year,month,center Value,public Value几个属性字段。还定义了主码与类Property Company Ele Fee(和主码在同一个包下)一对多关系。与之相应的Ele Fee类代码如下:

5. 总结

JSF是基于Java的Web应用开发领域里提供了一个可重用、可扩展、基于组件、工具友好的服务器端UI框架。与其他的框架技术相比,JSF和Hibernate的集成框架有着明显的优势,具体表现在:JSF技术做到了应用程序逻辑和表示的完全分离;JSF提供了一组丰富的、可重用的服务器端用户界面组件。JSF是一个开放的标准,而且具有很好的可扩展性。依照JSF的规范,用户完全可以根据需求定制自己的用户界面组件、事件处理器、数据校验和转换组件等,这些组件和标准的JSF组件一样是可重用的,集成JSF和Hibernate能减少构造模型层实体Model的时间,还可以为以后模型层的扩展带来方便。

参考文献

[1]Kito Mann.《JavaServer Faces in Action》[M].北京:人民邮电出版社,2007.3

[2]左学明,张力.一种新的基于JSF技术的Web.用户界面开发方法[J].计算机应用,2005,25

[3]Dave Crane,Eric Pascarello,Darren James.《JSF研究》[M].北京:人民邮电出版社,2007.3

[4]Hans Bergsten.《JavaServer Faces》[M].USA:O’Reilly,2006.1

[5]Budi Kurniawan.《JavaServer Faces Programming》[M].北京:清华大学出版社,2005.1

JSF框架的研究及其应用 第3篇

互联网的快速发展和企业自身分布式处理的需求使得Web应用越来越广泛, J2EE就是为实现企业的分布式应用所使用的开发平台, 但J2EE所提供的开发组件在对于开发中小型的Web应用时, 复杂的组件模型却使得开发过于低效。框架技术则可以为开发提供高效和快速的开发组件, JSF技术是基于MVC模式的开发框架, 提供了丰富的用户界面组件, 它集JSP和Servlet的普遍性、Java Beans的简单性、J2EE的强大功能于一身, 另外它还吸取了Struts等开源项目的优点。JSF使得Web开发变得简单。JSF不仅允许我们在一个页面中快速集合相当的UI组件来构建我们想要的Web界面, 这使得开发者可以摆脱HTTP细节方面的束缚而专注于应用业务逻辑的实现, 而且已经包含于J2EE规范中, 必将有越来越多的供应商提供JSF的实现, JSF也将会成为新的主流Web框架。本文以一个智力测试系统为例介绍了JSF在Web中的应用。

1 JSF介绍

1.1 JSF的MVC设计模式

对大型Web应用来说, 基本的组织和管理服务是必要的, 但是它们也需要良好的结构。大部分Web框架, 包括JSF, 都遵循模型 (Model) -视图 (View) -控制器 (Controller) 设计模式的某种变体。应用中的问题:业务逻辑代码不能混合到UI代码之中。当这两者混起来时, 应用将难以维护, 仅具有很小的伸缩性, 并且通常更加脆弱。此外, 无法让一个团队从事UI表现代码, 而另一个团队负责业务逻辑, MVC正是这种问题的标准解决方案。模型2是MVC的Web应用变体。其基本点是:模型可以由普通Java对象 (POJO) 、EJB或其他内容组成;视图可以是J S P或者其他表现技术;控制器总是实现为Servlet。因此, 如果JSP页面包含错误, 它不会影响应用代码或者模型。如果在模型中有错误, 它也不会影响应用代码和JSP页面。这种分离允许在每层进行单元测试, 并且也使得工作于不同层的开发小组间能够独立。这些优点实际上就是大多数框架都支持MVC设计模式的某种变体的原因。JSF提供了以下特性:标准可扩展的用户界面组件、易配置的页面导航、方便的数据验证和转换、自动化bean管理、事件处理、方便的数据处理以及内置对国际化的支持, 对Model、View、Controller进行了明确的定义:

(1) Model层:Model层是进行业务操作部分, 由它来实现业务逻辑。在JSF中, Model是一个符合Java Bean技术规格的Java类别。

(2) View层:View层即用户使用界面, 它是与用户交互的部分。JSF中一般使用展示套件来开发。

(3) Controller层:Controller层用来控制Web应用程序的运作流程, 在JSF之中是通过Java.faces、Webapp、Faces Servlet类配合facesconfig.xml控制文件来实现的。

1.2 JSF的生命周期

Web开发主要是对用户所发出的请求作出响应。一般都是采用JSP和Servlet技术来处理用户请求, 没有统一的过程和规范, 对用户处理的过程比较随意, 同时也需要程序员比较深入地了解Web编程的细节。这样就造成了系统开发的较低效率。为了解对用户处理上没有统一标准的问题, JSF引入了请求处理生命周期, 从而提供了一套标准的处理过程, JSF的生命周期可以分为以下几个阶段:

(1) RESTORE-VIEW (恢复视图)

如果用户请求所对应的页面组件树不存在, 则构建该页面的组件树, 否则使用已有的组件树, 也就是说, 对于页面所对应的组件树, 一般来说只构建一次。

(2) APPLY-REQUEST-VALUES (应用请求值)

读取客户端参数, 处理各个组件的process Decodes方法, 内部调用decode方法, 由Renderer执行decode方法。

(3) PROCESS-VALIDATIONS (验证请求值)

执行组件的process Validators方法, 对于UIInput执行validate方法, 绑定值调用convert和validate。

(4) UPDATE-MODEL-VALUES (更新模型值)

执行组件的process Updates方法, 对于UIView Root, 执行broadcast Events和notify Phase Listeners。所有的UIInput执行update Model方法。

(5) INVOKE-APPLICATION (调用方法)

调用UIView Root.process Application方法。这一过程主要读取相应的action配置, 如果存在action, 则调用action, 也就是调用应用逻辑。在执行相应的逻辑之后, 查询action是否有返回值, 如果有返回值将由navigation Handler读取下一个view id。

(6) RENDER-RESPONSE (呈现响应阶段)

其任务是将请求处理的结果转换成客户端可以接受的形式传给客户端, 并且保存响应状态, 以便处理后续请求。其主要操作是调用View Handler.render View, 展示view。

需要注意的是对于JSF生命周期来说, 用户请求不一定需要经过这六个阶段, 也可以是其中的几个阶段。同时在每个阶段执行之前也执行之后会产生相对应的事件, 这些事件在JSF中被称为阶段事件, 阶段事件是在Faces请求处理生命周期的每个阶段之间处理的事件, 能在不同的阶段之间执行。

2 基于JSF框架的Web应用

智力测试是当前教育类网站常用的组件, 它可以快速、公正、公平地获知被测者在某方面的水平。而且在线测试模块也广泛存在于生活之中。例如互联网上测智商的小游戏和在线考试系统等。智力测试系统的目的比较明确, 就是让用户通过本系统测试对相关知识点的掌握情况。本系统的程序功能是从数组中取出相应的题目显示给用户, 当用户输入的值不是正确答案时, 直接进入下一题, 否则记下答题所得分数再进入下一题, 当进行到最后一题时, 显示用户的最终得分情况。

2.1 视图设计

视图部分如图1:index.jsp为智力测试首页, success.jsp为测试正确时显示的页面, failure.jsp为测试错误时显示的页面, done.jsp为测试结束时的页面。现以首页为例进行介绍, 当使用本系统时显示给用户的首页如图所示, 题目是从数组中读出来的, 页面中的文本框用来输入答案, 单击“检查答案”按钮时, 将会使用后台的功能进行相关的判断。

其页面的主要代码如下:

2.2 模型设计

模型以一个或多个Java Beans的形式存在, 对业务数据进行封装, 方便控制层对其进行更新和设置。根据不同的事件 (Value Changed和Action) 派生不同的处理事件, 完成做什么的任务来调用由Bean构成的业务组件。创建由该Java Bean实现对客户端表单数据的封装。JSF的模型主要用Java Bean来实现, 这里定义了一个Quiz Bean作为Java Bean, 用于存储和处理页面传送的信息。其核心代码如下:

2.3 控制器设计和配置文件

配置文件是JSF的控制中心, JSF允许设置配置文件来根据返回结果决定作业流向, 这就是JSF的导航机制。配置文件中的所有设置都在标记对中设置, 其中导航规则和后台函数所对应的Manage Beans分别应用标记对设置。本系统配置文件的部分代码如下:

3 结束语

JSF是Java Web表示层的标准规范, 借鉴了包括Struts在内的很多Java Web框架技术的优点, 是目前有影响力的Java Web框架的集大成者, 今后也将继续吸收最具代表性的Java Web技术, 与其他所有的Java Web框架不同的是JSF不是具体的实现, 它只是一个规范, 并没有限制各个厂商的活力, 他们可以在规范之下提出自己独特的实现, 在性能、易用性、友好性和扩充功能方面下功夫。在国外, JSF已经和Struts平分秋色, 甚至略有超出, 相信在国内不久也将会成为主流框架。

参考文献

[1]徐明华, 尼春雨.JSF编程实战导航[J].北京:清华大学出版社.2008.

[2]程晓冬, 何勇等译.JSF实战[J].北京:人民邮电出版社.2007.

[3]石志国.JSP网络开发详解.北京:电子工业出版社.2007.

JSF技术 第4篇

Java技术在最近几年非常地流行, 随着Java SE 5和Java SE 6的推出, Java的未来更显得无比辉煌。但以Java为基础的JSP在Java SE 5推出之前却一直抬不起头来, 这最重要的原因就是JSP虽然功能十分强大, 功能强大就意味着复杂, 尤其是设计前端界面的可视化工具不多, 使用也不够方便。因此, 设计JSP页面就变得十分复杂和繁琐。不过, 在Java SE 5推出的同时, Sun推出了新的Java Server Faces (简称JSF) 规范。从而使设计JSP Web前台设计变得非常地方便。

1、JSF技术

1.1 JSF概述

JSP (Java Server Page) 是目前最流行的用于web后台逻辑处理技术之一, 而JSF是使开发人员能够快速的开发基于Java的Web应用程序的技术, 是一种表现层界面技术。目前, JSF1.2已经正式作为一个标准加入了Java EE 5中。

1.2 JSF优点和特点

·JSF是一种高度组件化的技术,

能使开发人员在一些开发工具的支持下, 实现拖拉式编辑操作, 用户只需要简单的将JSF组件拖到页面上, 就可以很容易的进行Web开发了。

·JSF是一种标准的技术

目前, Sun Java Studio Creator 2和Oracle JDeveloper 10g已经给大家提供了免费的JSF开发工具。另外, BEA Workshop、MyEclipse、IBM Rational Application Developer和Borland JBuilder也是很不错的支持JSF可视化开发的商业开发工具。

2、JSF在JSP领域中的应用

2.1 JSF功能的实现

JSF功能是通过本身的标签库和JSP进行集成而实现的。

标签库就类似于ASP.net的服务端组件。JSF提供了非常丰富的标签库, 通过这些标签库, 可以生成各种客户端模型 (如HTML、WML、XML以及JavaScript等) 。通过这些标签, 你可以很容易建立大规模的客户端模型, 并由这些标签自动处理客户端请求。

在JSF中有两个库:

第一个叫做内核库, 在这个库中包含了各种主要的标签, 如配置组件、管理事件、验证输入信息等。

第二个库的主要功能是将HTML和JSF的各种标签相对应。每一个JSF标签都会对应一个HTML组件。如UIInput标签对应了HTML中的文本框或密码框。

2.2 JSF的实例

接下来让我们通过具体的实际例子来研究JSF如何与JSP在一起协同工作。

在JSF标签中文本输入框叫做inputText, 而密码输入库叫inputSecret。下面是一个简单的JSF和JSP结合的用户接口程序。

在上面的代码中, 我们可以了解到JSF同JSP集成的过程。我们首先可以看到一个内核标签:view。然后是几个JSF组件。如form、outputText、inputText以及commandButton。这几个组件被放到form中从而开成了form中的一部分。在程序的最开始, 必须使用impor导入两个标签库。代码如下。

上面2行代码声明了JSP中要使用哪一个JSF标签库。内核库使用前缀 (prefix) f声明, 而HTML库使用前缀 (prefix) h声明。这两个前缀并不是必须要使用, 而只是一个建议。在程序中, 内核库必须要使用, 因为view在所有的JSF页中必须使用。而HTML标签在运行时将JSF标签转化为HTML组件, 这个h前缀并不是必须的, 而是JSF规范推荐使用的, 这样, 我们使我们的JSF程序更易读。

JSF的开始是</f:view>标签, 而它的下一个标签form将建立一个HTML Form。而outputText标签相当于HTML中的label组件。inputText标签相当于HTML中的textField组件。而commandButton标签相当于HTML中的submit按钮。

3、JSP响应JSF请求

接下来让我们来看看上面程序的最重要的部分, 也就是UIInput组件的事件处理, 代码如下:

在JSF中事件处理是由valuechangeListener标签完成的。这个标签所表示的事件在文本框的值发生变化时引发事件。但有意思的是这个事件并不马上提交, 而是要等到用户点击"提交"按钮后这个事件连同相应的数据才提交给后端。因此, 这个事件请求也叫做预提交。最后, 让我们看看UICommand的代码实现:

上面的代码将convert () 方法和UICommand连接了起来, 也就是说, 点击"提交"按钮后, 将执行convert () 方法。在遇到view标签后, JSF程序结果, JSFAPI最后调用doEnd方法来结束JSF程序。JSF引擎在解析这段程序后, 将相应的JSF标签转换为HTML组件。

最后, 让我们来看看JSP是如何响应JSF事件的。下面是一段响应JSF事件的Java代码。

要想响应JSF事件, 必须要实现JSF库中的ValueChangeListener接口。上面的程序要注意的是最后根据输入的值来设置相应的颜色。这些值并不依赖JSP。当然, 你也可以将它们设置成null, 而由JSP标签来设置它们的颜色。

4、结束语

综上所述, JSF是一种方便的服务器端界面实现技术, 然而JSF在实现机制上还存在很多缺陷, 并且目前JSF在影响力上还有些欠缺, 使用该技术的人员基数也不太大, 但是由于Java技术的蓬勃发展, 我相信JSF技术一定会有统一Web前台开发技术的那一天。

参考文献

[1]Deepak Alur等.《J2EE核心模式》[M].机械工业出版社.2005. (15-16)

[2]程志艳著.《JSP实用简明教程》[M].清华大学出版社.2005. (124-150)

[3] (美) Al Williams著.《Java2网络协议内幕》[M].中国水利水电出版社.2006. (255)

[4]耿祥义著.《JSP实用教程》.清华大学出版社.2005. (28-30)

JSF技术 第5篇

ArcIMS是由Esri公司开发的WebGIS软件产品, 提供了一种通过网络获取动态地图、空间数据以及各种相关服务的途径[1]。2006年11月份, Esri公司发布了升级版本ArcIMS9.2, 提供了与ArcGIS Server相同的二次开发框架Web ADF, 该框架基于全新的Java web框架技术, 提供了多种功能接口, 大大增加了ArcIMS的可扩展性。本文结合JSF技术, 谈讨了新版本下ArcIMS与ADF开发框架工作原理, 并设计实现了一个土地管理部门信息管理发布的WebGIS系统。

1 ArcIMS ADF及JSF简介

1.1 JSF简介

JSF (JavaSever Faces) 是由Sun公司推出的新一代Web开发技术。首先, JSF将事件驱动 (event-driven) 的页面导航模型第一次引入了Java Web领域, 捕捉浏览器请求, 保存客户端状态, 页面转向等烦琐的操作都可交由JSF完成;其次, JSF提供了一系列可实现复杂功能的UI (User Interface) 组件, 使得开发人员可实现拖拉式编辑操作;再次, 在后台逻辑处理方面, JSF与Backing Bean相结合, 基于事件监听机制 (e v e n tlistening) , 通过Get和Set方法, 实现与服务器端的交互。

1.2 ADF框架结构

ADF (Application Development Framework) 开发框架的引入, 为使用ArcIMS进行二次开发提供了程序级的支持。ADF包含了.Net和Java两种版本的API组件, 其中支持Java的ADF基于JSF框架, 遵循事件驱动模型和MVC开发模式,

Control层是第一层, 包含了MVC模式中的View和Control层, 由标准的JSF控件和基于JSF的ADF控件组成, 提供用户视图并响应用户请求。第二层对应MVC模式中Model层中的第一层, 主要包含了WebContext对象, 其他与控件交互的程序逻辑对象则以Webcontext属性的形式存在。第三层则对应MVC模式中Model层中的第二层, 包含地图数据等相关操作的基础类和接口, 这些类的对象不直接与表现层接触, 而是提供了操作地图数据的入口。

1.3 基于ADF的ArcIMS工作原理

ArcIMS是一个基于服务以及请求/响应机制的系统, 主要包括客户端表现层、业务逻辑层和数据层三层体系结构, 各层之间均使用ArcXML语言进行通信[4]。业务逻辑层包含了网络服务器、ArcIMS应用服务器、空间服务器以及服务连接器和ADF。其中, 网络服务器响应HTTP协议处理客户端请求, 发送给应用服务器并把请求结果返回给客户端;应用服务器记录在每个空间服务器上运行的服务, 接收网络服务器的请求以后, 负责将不同的请求分发给相应的空间服务器。连接器和ADF提供网络服务器和空间服务器的通道。空间服务器运行ArcIMS服务, 并最终处理请求, 从数据层读取相应数据与请求处理信息一起返回客户端。

2 基于ADF和JSF的WebGIS系统设计

2.1 数据组织

空间数据与坐标位置信息密切相关, 且数据量较大, 因此, 在数据组织方面, 本系统使用不同的数据库用户存放管理空间数据与业务数据。其中, 空间数据采用空间数据引擎 (SDE) 结合大型关系型数据库的方式, 空间数据库引擎可以在GIS平台与数据库之间搭建一条数据通道, 使得GIS应用简单高效地访问关系型数据库, 且实现了空间数据与业务数据的分离, 便于不同类型数据的独立维护。笔者使用ArcSDE和Oracle对空间数据进行管理维护。业务数据使用Oracle直接管理, 并在数据表里添加ObjectID字段, 将空间数据库与业务数据库相关联。

2.2 系统结构及工作原理

JSF体系结构支持多种Web模式的开发。ArcIMS的二次开发工具Web ADF本质上是一组标准的JSF组件, 基于经典的MVC (模式-视图-控制器) 模式, 因此本系统采用了三层客户机/服务器结构。在此结构中, JSP充当视图角色, 显示地图及业务信息。在页面的控制方面, 除了可使用普通的H t m l语言以外, A D F还提供了强大的JavaScript脚本库, 这些脚本库符合面向对象思想, 通过对这些脚本函数的继承与重写可实现用户定制的各种针对空间数据的操作, 结合JSP页面向服务器端发送请求。

3 系统的实现及功能

3.1 地图服务的建立

使用ArcIMS中的Author软件, 加载所有需要显示的数据图层, 进行数据的符号化处理, 并设定各图层显示的比例尺范围等, 最终保存成.axl配置文件。使用Administrator软件, 读取配置好的.axl文件, 新建ImageServer类型的地图服务。

3.2 地图服务的调用

在JSF程序开发的配置文件faceconfig.xml文件中, 配置地图服务的名称、空间服务器的地址与端口号。通过关联字段ObjectID实现业务数据库与空间数据库的关联, 程序逻辑判断后最终通过ADF将地图请求组合成ArcXML格式的通信, 向空间服务器提交, 完成系统对于地图服务的调用。

3.3 系统功能简介

基本文围绕土地管理的相关空间信息, 实现了多种查询、维护以及空间分析功能。 (1) 系统提供多种方式的交互查询, 可以通过网点的名称进行地图上的查询定位也可以在地图上使用拉框及Tip等方式直接查询网点的业务信息; (2) 拥有维护权限的用户可以通过网点维护和地图编辑功能模块修改土地管理部门及地理底图的数据, 也可以在地图上圈划具有金融学意义的经济功能区等, 经上级主管用户审核后生效, 实现了对于空间数据的维护; (3) 缓冲区空间分析、报表统计分析等功能, 整个系统功能较为完善, 逻辑清晰严谨, 合理结合了土地管理业务数据与空间数据, 把GIS技术融入了土地管理。

4 结语

JSF技术 第6篇

1 Seam框架分析

1.1 Seam的框架特点

Seam是一个集JSF、EJB3.0、AJAX和j BPM于一体的全新应用框架,下面介绍Seam的主要特点。

1)基于EJB3.0的开发

EJB3.0摈弃了传统EJB粗粒度和重量级的性质,转变为拥有细粒度注释的轻量级POJO。因此,Seam框架中表示层组件和业务逻辑组件都是EJB。

2)基于AJAX的远程层

Seam提供了内置的Javascript远程访问层,允许开发者通过Ajax异步地从浏览器端调用EJB3.0的Session Bean组件。同时,Seam提供的Ajax解决方案隐藏了XMLHttpRequest API和XML序列化的复杂性。

3)富状态应用程序

传统的Web应用程序中,Http Session是管理Web应用状态的唯一方法。Seam框架为开发者提供了多种富状态的上下文(Context),支持从会话状态到业务过程的多种粒度,让开发者在Http Session之外有了更多状态管理的选择。

4)过程驱动应用程序

企业级应用存在许多业务流程和规则,需要实现复杂的工作流和页面流,Seam框架通过JBoss jBPM对业务过程管理提供强大支持。

1.2 Seam的工作原理

Seam使用带注释的POJOs作为组件进行开发,下面从几个方面介绍Seam的工作原理。

1)双向注入

Seam使用POJO作为服务组件,并采用依赖注入(DI)联结所有POJO组件。当某组件需要使用另一个组件时,通过注释(Annotation)向Seam声明依赖。Seam依据应用当前状态将这个依赖组件注入到所需组件中。

同时,Seam扩展了依赖注入的概念,允许进行双向注入(bijection)。一方面,组件可以作为一个变量被注入。另一方面,组件被Session Bean“抛还”给Seam,返回到JSF中。组件利用@In或者@Out注释可以在JSF页面和业务逻辑之间双向地传递数据。

2)拦截器

Seam引入拦截器与注释组合,为POJO对象提供功能支持。Seam构建拦截器的方式是采用标准的Java EE体系。拦截器类中定义拦截方法时,需要使用@AroundInvoke和@InvocationContext注释。@AroundInvoke注释用于指定具体的检查方法,检查操作完成后,利用ic.proceed()返回到被拦截检查的业务方法。拦截器类通过配置文件和框架代码进行自动调用,实现执行Session Bean中的业务逻辑时进行拦截检查。

3)Seam的多粒度上下文

Seam在传统上下文的基础上,添加了多种不同粒度的上下文,并自动管理上下文和组件状态。下面重点介绍Seam中两个重要的上下文。

会话(Conversation):一个会话通常包含了许多相关或串行的用户请求。比如,一次交谈往往需要用户完成多次请求并响应的周期。典型的案例是向导式对话框,或者电子商务中的购物车。Seam使用会话上下文管理这些交谈,解决了页面回退、刷新、重复提交、多窗口浏览等带来的问题。

业务流程(Business Process):Seam还内置了在应用程序中集成业务流程管理的功能。一个业务流程要求工作流完成两个操作:一是创建一个事务,二是批准这个事务。两个事务都需要与应用程序进行一次或者多次交谈才能完成它们的任务。Seam可以简单明了地定义这些任务和交谈。

4)基于Seam的三层架构

下面介绍Seam如何将拦截器嵌入三层架构中。拦截过程对于用户基本是透明的。用户请求的完整生命周期如图1所示。

(1)Seam集成MVC

大多数应用框架需要利用其特有的Servlets实现MVC架构,Seam与此不同,它通过在请求中加入监听器和生命周期控制各组件,维持原有JSF请求的生命周期。

在web.xml中,Seam加入了监听器:SeamListener。此监听器在整个生命周期中被最先请求,并为Lifecycle对象设置ServletContext和Session,Lifecyle类直接保存用于在web层管理状态的上下文组件。接着SeamPhaseListener对象被请求,SeamPhaseListener对象用于与FacesServlet交互。在faces-config.xml中,SeamPhaseListener已经被定义为FacesServlet生命周期的一部分,用于进一步管理上下文和存储请求状态。此监听器将数据从表现层传入到业务逻辑层。

(2)Seam集成EJB3.0

业务逻辑层的集成使用SeamInterceptor包裹调用EJB的请求,此拦截器包裹所有调用POJO EJB的请求,在生命周期中,每当包裹请求时,就间接访问了在Application Context中存储的组件对象。虽然组件对象包含了访问的EJB,但是它不是简单的包裹器对象。组件对象持有所有域级别的对象——从注入域到数据模型对象,再到验证器。基本涵盖了任何与POJO属性级别相关的Seam注释。而且,另一个较大的扩展是包含了其他默认的拦截器。这些拦截器处理从双向注入、验证到业务管理的所有事情。

2 Seam的应用

2.1 任务要求

用户注册程序要求输入用户名、真实名称和密码,将信息存入数据库。注册成功,显示已注册页面,否则,显示失败页面。本例虽不能完全展示Seam的全部特性,但展示了Seam使用带注释的POJOs进行开发,并集成JSF和EJB3的特性。

2.2 程序结构

该程序需要建立:

1)两个页面(register.jsp,registered.jsp)。

2)一个实体Bean(User.java):保存用户数据。

3)一个无态的Session Bean(RegisterAction.java):作为JSF的action listener。程序结构由图2所示:

2.3 代码实现

2.4 程序的工作流程

1)当register.jsp中的表单被提交后,JSF请求Seam处理user变量。此时任何Seam上下文中不存在与user变量名绑定的值。Seam实例化user组件并存储在Seam Session上下文中,随后将User Entity Bean的实例返回给JSF。

2)Hibernate验证器按照User Entity Bean中的约束定义对表单中的值进行验证。如果与约束不符,JSF刷新页面。否则,JSF将表单中的数据与User Entity Bean中对应属性进行绑定。

3)JSF请求Seam处理register变量,Seam在Stateless上下文中找到无态Bean RegisterAction,返回给JSF。JSF唤醒register()行为监听方法。

4)Seam拦截该方法调用,将Session上下文中的User实体注入到方法中。

5)register()检查注册用户名是否已存在,若存在,则返回FacesMessages附带的错误信息及null值,刷新页面。若无此用户名,则重定向到“/registered.jsp”。JSF生成页面时仍请求Seam从Session上下文中返回User实体。

3 结束语

JBoss Seam进一步简化了Java EE5,建立了更加集成化的EJB3和JSF,它的框架设计使Web应用具有强壮性和伸缩性。JBossSeam已成为现今流行的Web应用框架。

参考文献

[1]JBoss Seam官方文档[EB/OL].http://labs.jboss.com/portal/jbossseam/.

[2]Michael Juntao Yuan,Thomas Heute.JBoss(R)Seam:Simplicity and Power Beyond Java(TM)EE[M].US:Prentice Hall PTR,2007.

上一篇:高校会计制度改革研究下一篇:招标投标市场的建设