论文部分内容阅读
[摘要]JSF这项技术是由Craig McClanahan为主设计的,而Craig McClanahan正是如日中天的Struts的主设计师(Java人都知道),故JSF大体上与Struts一脉相承。Struts是典型的framework,侧重架构设计,而JSF则侧重于JSP的快速开发功能。
[关键词]JavaServer Faces(JSF)MVC Managed Beans
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2008)1110044-01
参加J2EE的项目开发也有3年了,其表现层的框架使用过Struts和JSF,目前主要还是使用JSF 为主,因为JSF在许多方面相对于Struts还是有很多的优势的。总结这几年的开发经验再结合网上一些朋友对JSF一些评价,我对JSF这项技术进行一些分析和点评。
JSF这项技术是由Craig McClanahan为主设计的,而Craig McClanahan正是如日中天的Struts的主设计师(Java人都知道),故JSF大体上与Struts一脉相承。以笔者初试的体验,Struts是典型的framework,侧重架构设计,而JSF则侧重于JSP的快速开发功能。
一、什么是MVC
Model-View-Controller (MVC) 模式的目的是从数据表示(View)中将数据(即 Model)分离出来。如果应用程序有多种表示,可以仅替换视图层而重用控制器和模型代码。类似的,如果需要改变模型,可以在很大程度上不改变视图层。控 制器处理用户动作,用户动作可能造成模型改变和视图更新。当用户请求一个JSF页面时,请求发送到 FacesServlet。FacesServlet 是 JSF 使用的前端控制器 servlet。和其他很多 Web 应用程序框架一样,JSF 使用 MVS模式消除视图和模型之间的耦合。为了集中处理用户请求,控制器 servlet 改变模型并将用户导航到视图。
FacesServlet 是 JSF 框架中所有用户请求都要经过的控制器元素。FacesServlet 分析用户请求,使用托管 bean 对模型调用各种动作。后台(backing)或托管(managed)bean 就是该模型的例子。JSF 用户界面(UI)组件是视图层的例子。MVC 模式把任务分解给具有不同技能的开发人员,使这些任务能够同时进行,这样 GUI 设计人员就可以使用丰富的 UI 组件创建 JSF 页面,同时后端开发人员可以创建托管 bean 来编写专门的业务逻辑代码。
二、JSF is the standard(JSF是标准)
J2EE5.0要提供一个JSF的实现,这表明JSF不久将会无处不在。这可能与你无关,但是和工具供应商密切相关。现在大概有50个Java web应用程序框架,工具供应商不会情愿去支持一个特别的框架,但是他们会毫不犹豫地去支持一个标准。而且不止供应商,开源项目也会迅速的聚集在JSF的四周,争先恐后的去实现相同的功能。
三、POJO Action Methods
JSF的行为方法可以在POJPO中实现。这意味着你不用在表单和模型对象之间实现一个多余的行为层。顺便说一下,在JSF里面没有行为对象,行为在模型对象中实现。
四、Managed Beans(Dependency Injection 依赖注入)
在JSF中不仅使用了 POJO 技术,而且还使用了类似 Spring 的控制反转(IoC) (或称为依赖注入-DI) 技术,在 JSF 的 Backing Bean 中,我们可以把视图所需要的数据和操作放进一个 Backing Bean 中。同时得益于 JSF 使用的 DI 技术,我们可以在配置文件中初始化 Managed Bean,同时我们也可以通过这样的技术很方便的和使用类似技术的 Spring 进行整合。
五、Extensibility(可扩展性)
JSF有6个对象实现了这个框架的大部分功能,而且你可以很容易的用你自己的实现代替原有实现。比如你想加一个自定义参数在JSF表达式语言里面,或是添加一个自己的视图控制器以便于区分组件和HTML.事实上Shale实现了上面的功能。如果你还没有满足,JSF提供了几个地方你可以轻松的控制JSF的生命周期。Shale给你的会更多。
六、Value Binding Expressions(值绑定表达式)
在Struts中,你负责把数据从Form传递到模型对象。你实现的Action的execute方法是把Form作为一个参数。然后你再手动的把数据从Form Bean里面取出放到模型对象里面。你要为应用里面的每个Form做这些事情,然而在JSF里面,你只需像这样:#{model.property}就够了,其他的交给JSF来处理。
七、Components(组件)
就像Swing一样,JSF提供丰富的底层构件去开发组件然后添加到标准的组件集。那些底层构件让你很容易的生成自己的组件并且和别人共享。现在我们到处都能看到自定义组件跳出来,比如说Oracle的ADF和MyFaces,两者都提供了丰富的组件集,就像javascript日历,tree等等。
当然,组件只是一部分。典型的是,组件都和一个独立的renderer对应,这给我们带来了真正的好处。但是和JSF中的很多东西一样,你不一定要墨守成规。只要你愿意,你可以实现render自己的组件,虽然这样你会失去给组件加入别的renderer的能力。
八、程序员和网页设计人员的分工
在JSP中,程序员和网页设计人员的工作有时候是互相交织、无法区分的。这是因为JSP页面中掺入了网页设计人员所不熟悉的一些JSP标签,甚至是晦涩的Java代码。要求网页设计人员理解这些标签和代码是不现实的,不符合分工合作的原则。在JSF中,框架为网页设计人员提供了一套标准的UI组件,在工具的支持下,可以通过拖放简单地添加到网页上,然后设置某些显示属性来满足视觉要求。
网页设计人员不需要知道UI组件背后的复杂代码,那是程序员的事,而程序员也不需要再处理任何与视觉相关的细节,程序员所做的只是给UI组件绑定类的属性或方法。虽然程序员和网页设计人员需要修改同一份文件,但他们各司其职,各得其所,互不干扰。程序员和网页设计人员工作的明确划分,是JSF在易用性方面迈出的一大步。
参考文献:
[1][美]曼,JSF实战.北京:人民邮电出版社.
[2][美]Chris Schalk. JavaServer. Faces完全参考手册. 北京:人民邮电出版社.
[关键词]JavaServer Faces(JSF)MVC Managed Beans
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2008)1110044-01
参加J2EE的项目开发也有3年了,其表现层的框架使用过Struts和JSF,目前主要还是使用JSF 为主,因为JSF在许多方面相对于Struts还是有很多的优势的。总结这几年的开发经验再结合网上一些朋友对JSF一些评价,我对JSF这项技术进行一些分析和点评。
JSF这项技术是由Craig McClanahan为主设计的,而Craig McClanahan正是如日中天的Struts的主设计师(Java人都知道),故JSF大体上与Struts一脉相承。以笔者初试的体验,Struts是典型的framework,侧重架构设计,而JSF则侧重于JSP的快速开发功能。
一、什么是MVC
Model-View-Controller (MVC) 模式的目的是从数据表示(View)中将数据(即 Model)分离出来。如果应用程序有多种表示,可以仅替换视图层而重用控制器和模型代码。类似的,如果需要改变模型,可以在很大程度上不改变视图层。控 制器处理用户动作,用户动作可能造成模型改变和视图更新。当用户请求一个JSF页面时,请求发送到 FacesServlet。FacesServlet 是 JSF 使用的前端控制器 servlet。和其他很多 Web 应用程序框架一样,JSF 使用 MVS模式消除视图和模型之间的耦合。为了集中处理用户请求,控制器 servlet 改变模型并将用户导航到视图。
FacesServlet 是 JSF 框架中所有用户请求都要经过的控制器元素。FacesServlet 分析用户请求,使用托管 bean 对模型调用各种动作。后台(backing)或托管(managed)bean 就是该模型的例子。JSF 用户界面(UI)组件是视图层的例子。MVC 模式把任务分解给具有不同技能的开发人员,使这些任务能够同时进行,这样 GUI 设计人员就可以使用丰富的 UI 组件创建 JSF 页面,同时后端开发人员可以创建托管 bean 来编写专门的业务逻辑代码。
二、JSF is the standard(JSF是标准)
J2EE5.0要提供一个JSF的实现,这表明JSF不久将会无处不在。这可能与你无关,但是和工具供应商密切相关。现在大概有50个Java web应用程序框架,工具供应商不会情愿去支持一个特别的框架,但是他们会毫不犹豫地去支持一个标准。而且不止供应商,开源项目也会迅速的聚集在JSF的四周,争先恐后的去实现相同的功能。
三、POJO Action Methods
JSF的行为方法可以在POJPO中实现。这意味着你不用在表单和模型对象之间实现一个多余的行为层。顺便说一下,在JSF里面没有行为对象,行为在模型对象中实现。
四、Managed Beans(Dependency Injection 依赖注入)
在JSF中不仅使用了 POJO 技术,而且还使用了类似 Spring 的控制反转(IoC) (或称为依赖注入-DI) 技术,在 JSF 的 Backing Bean 中,我们可以把视图所需要的数据和操作放进一个 Backing Bean 中。同时得益于 JSF 使用的 DI 技术,我们可以在配置文件中初始化 Managed Bean,同时我们也可以通过这样的技术很方便的和使用类似技术的 Spring 进行整合。
五、Extensibility(可扩展性)
JSF有6个对象实现了这个框架的大部分功能,而且你可以很容易的用你自己的实现代替原有实现。比如你想加一个自定义参数在JSF表达式语言里面,或是添加一个自己的视图控制器以便于区分组件和HTML.事实上Shale实现了上面的功能。如果你还没有满足,JSF提供了几个地方你可以轻松的控制JSF的生命周期。Shale给你的会更多。
六、Value Binding Expressions(值绑定表达式)
在Struts中,你负责把数据从Form传递到模型对象。你实现的Action的execute方法是把Form作为一个参数。然后你再手动的把数据从Form Bean里面取出放到模型对象里面。你要为应用里面的每个Form做这些事情,然而在JSF里面,你只需像这样:#{model.property}就够了,其他的交给JSF来处理。
七、Components(组件)
就像Swing一样,JSF提供丰富的底层构件去开发组件然后添加到标准的组件集。那些底层构件让你很容易的生成自己的组件并且和别人共享。现在我们到处都能看到自定义组件跳出来,比如说Oracle的ADF和MyFaces,两者都提供了丰富的组件集,就像javascript日历,tree等等。
当然,组件只是一部分。典型的是,组件都和一个独立的renderer对应,这给我们带来了真正的好处。但是和JSF中的很多东西一样,你不一定要墨守成规。只要你愿意,你可以实现render自己的组件,虽然这样你会失去给组件加入别的renderer的能力。
八、程序员和网页设计人员的分工
在JSP中,程序员和网页设计人员的工作有时候是互相交织、无法区分的。这是因为JSP页面中掺入了网页设计人员所不熟悉的一些JSP标签,甚至是晦涩的Java代码。要求网页设计人员理解这些标签和代码是不现实的,不符合分工合作的原则。在JSF中,框架为网页设计人员提供了一套标准的UI组件,在工具的支持下,可以通过拖放简单地添加到网页上,然后设置某些显示属性来满足视觉要求。
网页设计人员不需要知道UI组件背后的复杂代码,那是程序员的事,而程序员也不需要再处理任何与视觉相关的细节,程序员所做的只是给UI组件绑定类的属性或方法。虽然程序员和网页设计人员需要修改同一份文件,但他们各司其职,各得其所,互不干扰。程序员和网页设计人员工作的明确划分,是JSF在易用性方面迈出的一大步。
参考文献:
[1][美]曼,JSF实战.北京:人民邮电出版社.
[2][美]Chris Schalk. JavaServer. Faces完全参考手册. 北京:人民邮电出版社.