运用于Web界面的新技术

JavaServer Faces技术在分离显示层和商业逻辑层方面更进了一步。
by Peter Varhol

用Java 2 Platform Enterprise Edition (J2EE)构建用户界面(UI)总是不能令人完全满意。如今,大多数运用JavaServer Pages(JSP)的开发人员都用HTML用户控件来构建UI,这些HTML用户控件是任何浏览器都可以支持的。结果就是,基于Web的UI远不如富客户端UI丰富,这是我们长期以来就了解的。

这种状况可能就要改变了。JavaServer Faces(JSF)技术可以给开发人员提供一组丰富的用户界面组件,使他们可以将更好的功能和可用性构建到J2EE应用程序中。JSF是在Java Community Process(JCP)下开发的(作为JSR-127),在我写这篇文章时,人们已经可以使用它的初版了。

JavaServer Faces技术包含两个单独的技术。第一个技术是一组API,它们代表用户界面组件、管理它们的状态、处理事件和输入验证、跨用户界面定义页面导航、并支持国际化和可访问性。最终用户是可以看到该部分的。第二个技术是一个JSP自定义标签库,从Web应用程序开发人员的角度来说,这部分会更有趣。它是用来在一个JSP页面中显示一个JSF界面的。通过该功能,JSP开发人员可以通过添加一个标签库,很容易地合并这些用户界面控件。

开发人员还可以得到更多的好处。在分离显示层和逻辑层方面,JSF扩展了我们自JSP起就运用的模式。在新的模式下,我们可以更进一步,将与用户行为相关的功能从页面上分离出来,放到服务器上。

JSF技术的一个前提就是HTML客户端不足以显示丰富的用户界面。长期以来,基于浏览器的界面就不能很好地显示富客户端的功能。在提出该技术时,JCP就承认了这个不足,并提供了一个解决方案可以用来解决目前的局限性问题。

JavaServer Faces技术也提供了一个有趣的用户界面架构。JSF的关键是,用户界面代码是在服务器上运行的,对在客户端生成的事件作出响应,使用户界面本身更容易分布。这种特征与传统的应用程序设计相反,我们仔细想想,就会发现这种架构有好几个好处。例如,它的运作同JSP一样,为实现方法提供了一致性。假设有一个可靠的和稳固的网络连接,那么我们就没有理由认为它不能同其它用户界面运行得一样快了。

有几种用户可以从JSF受益,包括页面设计人员和应用程序开发人员,它们运用JSF来创建页面和可以实现功能的代码。然而,其应用范围不仅局限于这些明显的用户。供应商和开发可重用的组件的个人也可以将JSF用于他们自己的组件,甚至开发他们自定义的界面。商业软件开发人员也可能将该技术整合到现有的和未来的J2EE应用程序中,以便在企业中运用。

运用JSF
要开始运用JSF,你需要Java Web Services Developer Pack(WSDP)的一个副本,并需要在你的系统上安装Java 2 Platform Standard Edition(J2SE)SDK 1.3或1.4,分别将你的路径和JWSDP_HOME环境变量下的bin目录设置为WSDP工具包的安装位置。然后,你必须下载和安装JSF reference implementation。

当然,这种安装会认为,在其它情况下,你的配置也可以运行JSP和标签库,所以你至少也需要安装和配置Tomcat。JSF版本1.0是依赖于JSP 1.2的。因为JSP 2.0是JSP 1.2的扩展集(superset),所以可以将JSF版本1.0同JSP 2.0一起使用。JSP规范的未来版本应该可以更好地利用JSP 2.0。

JavaServer Faces应用程序需要几个JAR文件正确运行。一个JSF应用程序的WAR文件必须在WEB-INF/lib目录中包含以下这些JAR文件:

jsf-api.jar
jsf-ri.jar
jstl.jar
standard.jar
commons-beanutils.jar
commons-digester.jar
commons-collections.jar
commons-logging.jar

安装了这些文件就完成了对程序包的常规安装。一般来说,不需要另外的配置来运行运用JSF的应用程序了。在reference implementation中我们提供了一组WAR文件的例子。你需要确信你的Servlet容器可以解包WAR文件,否则,你需要从一个命令行执行应用程序。WSDP工具包用Ant作为其编译工具(build tool),所以你可以用它来自动编译运用JSF的应用程序。

在JSF应用程序发布第一个JSP页面前,它必须经历FacesServlet以启动Servlet生命周期。要确定让你的JSF应用程序经历FacesServlet,必须在到第一个JSP页面的URL中包含到FacesServlet的路径。

对于应用程序的其它部分,你只需要像通常所做的那样运用一个标签库就行了。你可以用一个标签库说明文件来定义自定义标签库的内容,并告诉Servlet引擎在哪里查找标签处理器(tag handler)。该文件应该放在你运用的Servlet引擎的适当的目录中。下一步就是在Servlet引擎或应用程序服务器上的web.xml配置文件中指定TLD文件,这样引擎就可以找到你运用的控件的定义了。

现在你就可以在你的JSP页面中运用JSF标签库了。你可以像调用其它标签库那样来调用JSF控件。下面是个例子,你可以看到如何声明和运用标签库来在一个Web页面上创建一个按钮:

<html>
<head><title>Hello</title></head>
   %@taglib uri=
   http://www.petervarhol.com/
   java/prefix="faces"%
<h2>Please enter your name . . .
</h2>
<jsp:useBean id="UserBean"
   class="helloDuke1.
   UserNameBean"scope="session"/>
<faces:usefaces>
<faces:form id=
   "helloForm"formName=
   "helloForm">>
<faces:textentry_input
   id="username"modelReference=
   "UserBean.userName">>
<p></p>
<faces:command_button id=
   "submitButton"label="Submit "
</faces:form>
</faces:usefaces>
</body>
</html>

你可能会想,在运用JSF时,这些页面有必要包含Java代码。该例子中的Java代码局限于UserBean JavaBean。任何需要执行的逻辑都是在模型对象或辅助类中实现的,作为特点,它们通常是被封装在JavaBeans中的,而不是在页面中。

优点及不足
我在一个单独的Windows XP机器上运用JSF运行了一个小的JSP应用程序样例,在该机器上,我还安装了浏览器、Tomcat Servlet引擎和MySQL数据库。同将控制逻辑放在页面上相比,性能似乎有些不同,不过引起这种效果的部分原因可能是因为我没有连接网络。然而,实际上,页面上的控件是可以用来在服务器上执行某些行为的,所以将控制逻辑放在服务器上应该不是一个大的性能问题。

人们很自然地就会问:JSF是如何同其它更多的确定技术相适应的呢?JSF运用了Model-View-Controller(MVC)架构,这类似于Struts和JATO实现的架构。然而,目前JSF似乎还不能同这两种技术的任何一种结合使用。换句话说,你不能将一个JSF控件放在一个运用Struts架构的页面上。这种情况很令人失望,因为越来越多的开发人员都在用这两种架构,而且IDE供应商也开始将它们作为一种可选的开发工具包打包在程序包中了。目的就是可以让JSF架构处理到JSF控件的请求,同时让页面级的请求可以继续被Struts或JATO接受和处理。

在你的Web应用程序中开始运用JSF有很多好的理由。最重要的是,它们可以使你的应用程序更具用户友好性。你的用户可以享有这些控件提供的大量的用户行为,同标准的HTML前端相比,它们可以使你更方便地提供更多的功能。

同时,从编程的角度来看,JSF也提供了很多优势。首先,与一个普通的JSP配置相比,它不需要更多的底层架构来运用标签库,所以我们没有理由不用它们。第二,如果你已经在实践如何分离显示层和逻辑层了,那么该技术正是你一直在等待的技术。通过将逻辑层和显示层,以及驱动那些用户控件的单独的逻辑组件明确地分割开,你就可以在代码中运用很好的软件工程原理了。

运用JSF技术的主要的问题是它很新,而且必须在幕后进行配置。因为JSF标签不是HTML编写者们经常运用的标准的HTML标签的一部分,所以如果不对这些编写者进行鼓励,你就不要期望他们会主动运用这些标签。程序员和Web应用程序管理员应该确信标签库的配置是正确的以便用于开发,而且页面创建者也理解它们的用法,在功能方面也受过培训。

当然,在JSF技术构建到更受欢迎的IDE中之前,人们不太可能很广泛地运用它。在开发人员可以选取控件、将它们放到一个Web页面上、使幕后基本连接自动完成前,任何功能都必须手动实现。对于那些想设置该底层架构以使页面设计人员可以构建更可用的应用程序的人来说,该因素不会是个障碍,但他们应该考虑到这一点。

在简单的HTML技术不能提供更好的架构和控件之际,JavaServer Faces技术的出现就给我们带来了希望,使我们可以改善Web应用程序。用户可以运用更好的控件,同时开发人员也可以享有在设计策略和可维护性方面所做的改进。


关于作者:
Peter Varhol是Compuware Corporation的一位技术传播者。你可以通过peterv@mv.mv.com与他联系。
阅读更多
个人分类: JSP资料
上一篇利用JSP 2.0开发Web应用程序(4)
下一篇Java实现利用搜索引擎收集网址的程序
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭