文档章节

JSF MVC 流程

AK_47
 AK_47
发布于 2016/03/30 22:45
字数 1287
阅读 12
收藏 0
序言

在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 开发中的许多历史问题,大大降低了开发难度。同时由于它的开放性和标准性,将得到越来越多的开发商和开发人员的青睐。


© 著作权归作者所有

AK_47
粉丝 16
博文 533
码字总数 569998
作品 0
嘉定
程序员
私信 提问
Getting started with MVC(9)

View engine Spring MVC providesViewandViewResolverto find view and render view. MVC providesViewEngineto do the same job. View Engine By default, ozark support tow built-in view......

hantsy
2016/04/19
88
0
Struts入门(一)

Jakarta Struts Framework 是一个开放源代码的 Apache 项目,由 Craig R. McClanahan 于 2000 年创建,并捐赠给了 Apache 基金会,已经成为基于 Java Servlet 和 Java Server Page (JSP)技...

Heinrich_Chen
2016/01/08
24
0
新版 MVC 1.0 (Ozark RI) 介绍

MVC 1.0 是一个在 JSR 371 下的新 Java EE 8 规范。它被设计成在 JAX-RS API (直到某个时刻,Servlet API 还在讨论中)顶层的一个面向行为的框架,并希望这是一个选择,是面向组件的 JSF, ...

oschina
2016/06/07
3.1K
4
工作流集成第三方jsp表单

工作流系统集成表单的过程,其实就是一个调用流程引擎api函数的集成过程。 工作流引擎只负责抽象的流程的流转,业务模块的实现,是在业务表单中完成。在和工作流系统集成的时候,完成表单提交...

长平狐
2012/10/11
215
0
J2EE表示层技术--JSF

JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。JavaServer Faces 还引起了广大 Java...

匿名
2008/09/12
77.6K
4

没有更多内容

加载失败,请刷新页面

加载更多

spring 本类中方法调用另外一个方法事务不生效

1、在spring配置文件中添加 <aop:aspectj-autoproxy expose-proxy="true"/> 声明自动代理 2、AopContext.currentProxy()来获取代理类 3、使用代理类proxy进行代理调用内部声明了事务的方法 ......

重城重楼
6分钟前
0
0
项目 banner 乱弹

------------------------------------------ 村上春树 ------------------------------------- 如果我爱你,而你也正巧爱我,你头发乱了的时候,我会笑笑地替你拨一拨,然后手还留恋地在你...

宿小帅
18分钟前
0
0
PHP获取未来七天的日期和星期

php获取未来七天的日期和星期代码 第一步:获取需要天数的日期,然后调用函数 //获取未来七天的日期 for($i=1;$i<8;$i++){ $dateArray[$i]=date('Y-m-d',strtotime(d...

一只懒猫-
30分钟前
0
0
总结:IO模型

分类 多路复用 参考文章: https://www.jianshu.com/p/6a6845464770 https://www.cnblogs.com/zingp/p/6863170.html https://blog.csdn.net/sehanlingfeng/article/details/78920423......

浮躁的码农
33分钟前
0
0
fabric-sdk-java 1.4安装说明

Hyperledger Fabric Java SDK是开发基于Hyperledger Fabric区块链的Java应用之必备开发包。本文将介绍如何在Maven、Gradle和Eclipse中安装使用最新1.4版本的Hyperledger Fabric Java SDK。 ...

汇智网教程
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部