您的位置:首页 > Web前端 > JavaScript

JSF MVC 流程

2016-03-30 00:00 183 查看
序言

在JAVA社区里,WEB应用的开发一直存在开发难的问题。从开始的最简单的CGI程序,到JSP,SERVLET。虽然说JSP/SERVLET的出现大大减轻了开发的难度,但稍微复杂点的WEB应用,就会产生大量重复代码,后来为了解决这些问题,先后出现了诸如Struts, Spring等优秀的框架,并得到了很大推广。在这些基础上,Java社区进程(Java Community Process:JCP),包括Sun Microsystems、Oracle、Borland、BEA、IBM以及一群业内知名的Java和Web专家,开始制作JSF规范请求,最初的Java规范请求(JSR127)起始于2001年中期,并于2004年3月,正式公开发布了JavaServer Faces规范和参考实现。

什么是 JSF?

JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的标准 Java 框架。它的目的是简化WEB应用程序的开发。它基于组件技术,并提供了以此为中心来开发 Java Web 用户界面的方法,从而简化开发。JSF框架体系完美地集成了具有良好构建的模型-视图-控制器 (MVC) 设计模式,确保了应用程序具有良好的可维护性。另外,因为JSF 是由 Java Community Process (JCP) 开发的一种 Java 标准,所以完全可以得到各大开发工具供应商的支持,为 JavaServer Faces 提供易于使用的、高效的可视化开发环境。

JSF的体系结构

上面提到了JSF体系框架中的模型-视图-控制器 (MVC) 设计模式。我们具体来看看。典型的JSF应用:用户请求JSF页面,首先会统一把请求交由FacesServlet(Controller),FacesServlet里经过一系列的处理,调用业务模型(Model)处理,最后把JSP页面内容(View)展现给用户。

JSF的生命周期:

JSF把整个用户请求明确地分成了6个阶段,每个阶段完成不同的任务。一个典型JSF请求分成以下6个阶段:

Restore View Phase:重载视图阶段

Apply Request Values Phase:应用请求值阶段这个阶段主要做2件事:第一,把用户提交的数据设置到组件中去;第二,把用户事件(比如按下按钮等)加到事件队列。

Process Validations Phase:数据检查阶段这个阶段主要做数据的合法性检查,如果用户输入了非法数据,则在画面上显示相应的错误消息。

Update Model Values Phase:更新模型值阶段把组件里的值设置到Model中去。

Invoke Application Phase:用户业务逻辑阶段主要处理用户按钮事件等,调用业务逻辑处理(action)。

Render Response:重画画面阶段画面描画和展现。

为了便于理解,用下面2个图加以说明:
JSF的生命周期 概要图

JSF的生命周期(详细):

备注1:重载视图组件树(Component Tree)
备注2:如果设置了按钮等的immediate属性设置为true,且被提交的数据格式正确无误的情况下,则把用户提交的数据设置到组件(Components)中去,如果有Converter等,则调用Converter做变换。
另外:processValidators阶段(immediate为false),如果有Converter等,且被提交的数据格式正确无误,则调用Converter做变换。
备注3:把组件里的值设置到BackingBean。
备注4:Action Event处理。

从上图可以看出,组件在JSF里起着中心关键的作用。基本上所有的处理都是围绕着组件为中心。

但对于一般开发人员,他们可以不用关心组件的实现,只专注于业务逻辑(Model)方面的处理就行了。从用户请求到业务逻辑(Action Event)处理,JSF框架几乎为我们作了所有的其他工作。我们除了在JSP里写几个关联标签之外(如:<h:outputText value="#{mybean.userName}" />把用户名关联到Mybean中username属性;<h:commandButton action="#{mybean.onLogin}" />把该按钮事件关联到Mybean中的onLogin方法),可以完全不用管这个请求是怎么调用我们的业务逻辑处理的。

JSF中的组件

JSF除了提供了一系列的标准组件之外,还提供了接口供开发者开发自己的组件。

JSF组件的实现也非常灵活,一个JSF组件一般由(标签:Tag,组件:Component, 描画器:Renderer)三部分组成。它同样体现了MVC的设计思想,作到了数据和显示的分离。同一套组件,可以由不同的描画器(Renderer)描画,从而展现给用户不同的界面。

总结:

JSF在不牺牲开发能力和灵活性的前提下提供高效的以组件为中心的开发,使得以JSF开发的WEB应用具有高度的可扩展性,解决了Java Web 开发中的许多历史问题,大大降低了开发难度。同时由于它的开放性和标准性,将得到越来越多的开发商和开发人员的青睐。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: