注册本站  论坛  繁體中文

慧民电脑芯片级维修-电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Java >> J2EE >> Jsp >> Java正文

JSF在GlassFish管理控制台中的应用

文章来源:InfoQ中文站 作者:霍泰稳 更新时间:2008-9-21 17:06:20 【 】 【加入收藏

    相比于Tomcat,GlassFish的用户群还没有那么广泛,但是因为其同样免费、开源,而且拥有如延迟加载、 Grizzly等技术,正取得越来越多人的认可。而JSF作为一个Web开发的标准,虽然自诞生之日起就一直饱受争议,不过在争议中,它也在赢得更多开发者的眼光。Anissa是GlassFish的一个主要提交者,领导其管理控制台项目,在Sun的应用服务器团队工作了7年之久。InfoQ中文站的编辑霍泰稳有幸就JSF在GlassFish管理控制台中的应用,如为何在GlassFish管理控制台中应用JSF模板,如何对JSF做单元测试,JSF的组件库以及如何提高JSF的性能等问题采访了Anissa.

    请介绍一下您自己以及目前所主要研究的技术领域。

    Anissa:我是GlassFish的主要提交者,目前领导其管理控制台项目。大约七年前,我加入了应用服务器团队,那时GlassFish还没有开源。我参与过许多GUI工具,包括J2EE 1.4参考实现中的deploytool以及我们深受欢迎的IDE_NetBeans的插件,而现在是负责管理控制台。在这些年里,我见证了Web应用开发技术的发展过程,并从中受益很多。我目前专注于Web 2.0,致力于将最新的技术应用到GlassFish管理控制台。

    GlassFish的管理控制台用到了JSF模板,请介绍一下选用这个技术的缘由。

    Anissa:JSF是一个面向组件的框架。因此,它易于组织各种具有复杂功能的“组件”成为一个网页,这些组件包括文件选择、文件上传、表格、BreadCrumb、属性表以及其它很多组件。但是,JSF 1.2 没有提供一种简洁的方式重用GUI显示逻辑或者通过模板组织页面。 JSFTemplating通过协调模板让定义页面变得更有效率。它也添加了许多旨在鼓励代码复用的特性和其他有用的功能。这些功能包括:一个细粒度的事件模型、能够参数化的可重用“处理函数”、支持注释、页面作用域、可以将任何内容来源转化为资源流、可定制的组件工厂。这些功能和JSF丰富的组件模型结合,为创建GlassFish管理控制台提供了丰富的开发环境。

    JSF的一个初衷就是快速开发,但单元测试对快速开发同样重要。您如何做JSF的单元测试?

    Anissa:我不得不承认管理控制台的单元测试是最具缺陷的地方之一,亟需提高。对于GlassFish V2,我们已经研究并使用Selenium做了一些测试,虽然Selenium更适合功能测试。我们也依靠质量保证部门对控制台进行自动化测试。对于 GlassFish V3,我们正在研究不同的框架,例如JSFUnit,它可以作为Maven构建过程和Hudson的一部分。

    目前关于JSF的错误提示似乎还不那么直观,过于底层,对于如何定位错误您有什么技巧?

    Anissa:JSF错误信息从1.0开始一直在持续改进。不幸的是,很多时候人们面对错误信息,仍然需要具备足够的JSF是如何工作的知识才能完全理解。找出错误的根源常常需要经验。但是,这里有一些技巧可以帮助你:

    查看JSF源代码。JSF是开源的,不要害怕去获取源代码,看一看错误发生位置处的代码。 报告糟糕的错误信息。当你无法理解错误信息的意思时,请去https://javaserverfaces.dev.java.net,提交一个“问题”,这会有助于改进错误信息而且你也很有可能得到你所遇到的问题的答案。 使用google,在论坛上提问。有很多人在使用JSF,可能有人已经遇到并提出了这个问题。如果没有,你会发现许多人乐于帮助你、解答你的问题。 确认你使用了JSF “h:messages”组件(或者另外一个显示这些内容的组件)。JSF经常使用“Faces消息”机制报告错误,如果你没有在页面上包含“h:messages” 组件,你就无法看到这些错误。

    使用这些技巧,你能够解决遇到的任何问题。

    JSF用来做重业务,轻页面的企业开发还比较合适,但现在客户也都比较重视页面,对界面设计也提出了很高的要求。通过IDE,JSF可以实现可视化编辑Web界面,但如何高效的实现开发人员和网页开发人员的合作?您在开发JSF时是如何跟美工配合的?

    Anissa:我们的产品对界面设计感观有一个非常明确的标准。我们使用的组件(Woodstock)默认情况下就反映了这种设计要求。因此,JSF面向组件的本质提供给我们很多外观和感觉方面的选择,而不需要太多开发工作。也就是说,我们的产品中有一些地方需要定制图片、决定如何显示信息,也存在一些地方没有被JSF Woodstock组件覆盖。针对这些情况,我们与美工合作创建图片,或者他们帮助我们决定哪些组件最合适,或者对新组件制定标准。如果需要新组件,我们经常让Woodstock团队负责这项工作--当我们不能等待时,我们才会自己实现。美工通常提供图片和HTML,我们将其转化成JSF页面或者组件。

    管理控制台是如何使用AJAX技术的?

    Anissa:在GlassFish V2中,我们在大多数页面上使用Ajax计算BreadCrumb。浏览器中的JavaScript计算当前哪一个树节点被选中,然后从树节点中获取 URL,将这些信息通过XMLHttpRequest发送给服务器。服务器将这些信息转化成由多个Woodstock超链接组成的BreadCrumb组件。显示该组件的代码返回到浏览器后,JavaScript将BreadCrumb信息更新到当前页面上。

    当新对象创建时,我们也使用Ajax更新树节点。整棵树从不会被完全刷新,它只会通过Ajax进行部分更新。我们使用Dynamic Faces实现Ajax技术,它是Ed Burns(JSF标准负责人)领导的JSF扩展项目的一部分。

    JSF一个重要的优势是基于组件,管理控制台有没有开发自己的组件库,关于组件库的选择使用有何建议?管理控制台中的表单是如何进行扩展的?

    Anissa:正如在回答第4个问题时所提到的,我们使用Woodstock组件开发控制台。Woodstock 提供了一整套JSF组件,让开发人员基于统一的规范创建方便的本地化的应用。我们还没有遇到需要自己开发组件的情况。如果你有这个想法,你可以看一看 Ken Paulsen写的有关ServerSide的文章,他是JSFTemplating的技术负责人和创建者。他在文中展示了如何使用 JSFTemplating简化和加快显示(Render)开发。

    我们的许多页面使用表单显示数据,这也是Woodstock的组件之一。

    在使用JSF的过程中,你们主要遇到了哪些棘手的难题,又是如何克服的?

    Anissa:Bug。当组件正常工作的时候它们很出色,但是当你处理一个无法工作的新组件时,很难找到原因。幸运的是,这种情况不会经常发生,因为组件被很多人、很多程序重用,因此bug会及时发现。但是,如果这发生了,我们会与组件作者交流、在论坛或者irc频道提问、搜索google中其他人遇到的类似问题,问题最终得到解决。

    JSF通过和Session绑定实现数据显示,虽然简单了,但是控制数据同时也困难了。对于这种情况,您是如何理解的?

    Anissa:管理控制台尽量避免使用session作用域。频繁使用session可能会导致内存的大量占用,或者之前的动作遗留下来的一些信息会导致产生bug。管理控制台尽可能多的使用request,还有pageSession,它允许伴随着页面存储值,只要你处于同一个页面,其值就一直存在,但不会超过页面的生存时间。我们的确遇到过一些情况,数据必须跨页面存在,我们要么在页面之间传递数据,要么在极少的个案中使用session。

    在提升JSF应用的性能方面,您有什么建议?

    Anissa:JSF提供了大量功能。但是,功能只有在需要时才是有价值的。是否应该使用JSF的更多功能取决于你应用程序的需求。如果你想对功能进一步了解以确定它们是否对你的应用有帮助,我推荐你阅读一本好书以及在JSF论坛上提问。你可能也会考虑加入 irc.freenode.net上的jsf IRC频道。这是一个聆听其他人提问和从专家获取答案的好地方。如果正在使用JSFTemplating或者只是想多了解一下,#jsftemplating也是一个不错的去处。

  • 上一篇Java:

  • 下一篇Java:
  • 最 新 热 门
     面向Java开发人员的Scala指南: 包和访问修饰…
     J2SE 路径问题综合分析
     深入Java调试体系: 第1部分,JPDA体系概览
     Apusic上用JavaMail发邮件
     Java开源协议小全
     java 实现压缩与解压缩ZIP
     利用Ruby简化你的Java测试
     开源Erlang真的能成为下一代Java语言吗
     Java SE 6 新特性: XML API与Web服务
     Java SE 6 新特性: 对脚本语言的支持
    最 新 推 荐
     JSTL中fn表达式的使用说明
     JSP Web框架研究:Struts
     JSF在GlassFish管理控制台中的应用
     介绍JSP程序动态网站环境搭建的详细步骤
     Jsp页面中文参数传递get和post方法分析
     Java\.net\PHP比较 程序员眼中的.Net世界
     JavaScript最常用的55个经典技巧
     Windows操作系统下JSP程序开发环境配置
     JSF点滴积累--权限验证
     小小分页帮助程序
    相 关 文 章

    JSF和Struts的区别概述
    JSTL中fn表达式的使用说明
    JSP Web框架研究:Struts
    介绍JSP程序动态网站环境搭建的详细步骤
    Jsp页面中文参数传递get和post方法分析
    Windows操作系统下JSP程序开发环境配置
    JSF点滴积累--权限验证
    经验分享全过程JSP程序员完全蜕变手册
    关于JSP防范SQL注入攻击
    JAVA高级:js动态创建控件的方法

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    门市地址:广东省佛山市南海区黄岐黄海路133号
    本网站所有内容未经许可不得转载或做其他使用