`

JSF MVC 流程

 
阅读更多
序言

在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个阶段:

  1. Restore View Phase:重载视图阶段
  2. Apply Request Values Phase:应用请求值阶段这个阶段主要做2件事:第一,把用户提交的数据设置到组件中去;第二,把用户事件(比如按下按钮等)加到事件队列。
  3. Process Validations Phase:数据检查阶段这个阶段主要做数据的合法性检查,如果用户输入了非法数据,则在画面上显示相应的错误消息。
  4. Update Model Values Phase:更新模型值阶段把组件里的值设置到Model中去。
  5. Invoke Application Phase:用户业务逻辑阶段主要处理用户按钮事件等,调用业务逻辑处理(action)。
  6. 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 开发中的许多历史问题,大大降低了开发难度。同时由于它的开放性和标准性,将得到越来越多的开发商和开发人员的青睐。


分享到:
评论

相关推荐

    基于Ajax的新MVC框架的研究与实现

    新框架的请求处理流程借鉴了JSF的请求生命周期,但对它进行了改造,从而简化了流程。本文还将Java反射机制与Velocity技术相结合,实现了在VTL文件中直接存取Container的相关属性。由于引入了jQuery,极大简化了DOM以及...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    2.8 JSF的运行流程和生命周期 109 2.8.1 恢复视图阶段 110 2.8.2 应用请求值阶段 110 2.8.3 处理输入校验阶段 111 2.8.4 更新模型的值阶段 111 2.8.5 调用应用阶段 111 2.8.6 生成响应阶段 111 2.9 利用JSF的消息 ...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................

    spring web flow demo

    Spring Web Flow 1.x 是个自成体系的框架,可与 Spring Web MVC 、 Struts 、 JSF 等 Web 框架整合。最新的 Spring Web Flow 2.0 则明确声明是基于 Spring Web MVC 的一个扩展。 • 提供了处理 Ajax 事件的能力 Ajax...

    J2EE应用开发详解

    124 8.5.3 Struts2的内置拦截器 124 8.5.4 拦截器的配置和使用 125 8.5.5 自定义拦截器 126 8.6 一个简单的Struts2应用 130 8.7 小结 140 第9章 JSF 141 9.1 JSF技术简介 141 9.1.1 JSF与MVC模式 141 9.1.2 JSF应用...

    java web 开发详解

    Web框架虽然各不相同,但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向抽象实现请求和响应的流程,支持...

    Spring in Action(第二版 中文高清版).part2

    16.4.3 在JSF页面中使用Spring Bean 16.4.4 在JSF中暴露应用程序环境 16.5 Spring中带有DWR的支持Ajax的应用程序 16.5.1 直接Web远程控制 16.5.2 访问Spring管理的Bean DWR 16.6 小结 附录A 装配Spring A.1 ...

    Spring in Action(第二版 中文高清版).part1

    16.4.3 在JSF页面中使用Spring Bean 16.4.4 在JSF中暴露应用程序环境 16.5 Spring中带有DWR的支持Ajax的应用程序 16.5.1 直接Web远程控制 16.5.2 访问Spring管理的Bean DWR 16.6 小结 附录A 装配Spring A.1 ...

    spring4.1核心包

    包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 18. spring-webmvc-4.1.1.RELEASE.jar 包含...

    开源框架 Spring Gossip

    第一个 Struts 程式 在 Struts 中整合 Spring 第一个 JSF 程式 在 JSF 中整合 Spring &lt;br&gt; 其它 Spring 提供了简化且一致的方式,让您在使用一些 API 或服务时更加简单。 远程...

    JAVA程序开发大全---上半部分

    8.1.1 MVC设计模式 117 8.1.2 Struts框架工作原理 118 8.1.3 Struts框架执行流程 118 8.2 MyEclipse创建基于Struts框架的项目 119 8.2.1 创建Struts项目 119 8.2.2 Struts组件向导 121 8.2.3 Struts配置文件编辑器 ...

    从Java走向Java+EE+.rar

    9.1.2 Struts的MVC框架 108 9.2 Struts的配置 110 9.2.1 配置Web.xml 110 9.2.2 配置Struts-config.xml 111 9.2.3 多个配置文件的使用 120 9.3 Struts的各种组件 121 9.3.1 Struts的处理流程 122 ...

    Spring攻略(第二版 中文高清版).part2

    14.1 用Spring Portlet MVC开发一个简单的Portlet 544 14.1.1 问题 544 14.1.2 解决方案 545 14.1.3 工作原理 546 14.2 将Portlet请求映射到处理程序 553 14.2.1 问题 553 14.2.2 解决方案 553 14.2.3...

    Spring攻略(第二版 中文高清版).part1

    14.1 用Spring Portlet MVC开发一个简单的Portlet 544 14.1.1 问题 544 14.1.2 解决方案 545 14.1.3 工作原理 546 14.2 将Portlet请求映射到处理程序 553 14.2.1 问题 553 14.2.2 解决方案 553 14.2.3...

    JAVA上百实例源码以及开源项目

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    JAVA上百实例源码以及开源项目源代码

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

Global site tag (gtag.js) - Google Analytics