《Java EE 7精粹》—— 3.4 请求处理生命周期阶段

3.4 请求处理生命周期阶段

JSF定义了标准的请求处理生命周期阶段。应用程序开发人员并不需要知道生命周期的详细信息,但在某些情况下我们可以从中得到帮助,比如何时验证,何时转换,通常在何时处理事件,怎样改变事件的处理方式和时间。

一个JSF页面是由被称为视图的UI组件树来表示的。当客户端向该页面发起请求时,开始一个生命周期。在生命周期中,JSF的实现必须建立视图,同时考虑保存此前提交页面的状态。当客户端提交页面时,JSF的实现必须执行一些任务,比如验证视图中组件的数据输入,将输入数据转换为服务器端指定的类型,并且将数据绑定到backing bean。JSF的实现为生命周期中的一系列步骤执行所有这些任务。

应用程序的不同组件经历以下明确定义的请求处理生命周期阶段。

3.4.1 恢复视图

恢复并创建一个服务器端的组件树表示来自客户端的UI信息。

如果是第一次向一个URL发起请求,那么创建一个新的视图对象并呈现给客户端。这个视图同时存储在当前FacesContext实例中。如果已经在FacesContext中发现视图状态,那么视图被恢复并显示。

任何与UI组件连接的自定义的转换器、验证器和渲染器,在这个阶段被恢复。如果UI组件的值被直接映射到一个托管Bean定义的属性,那么该属性的值将被恢复并与视图相关联。大部分的工作是由ViewHandler.restoreView方法来处理的。

3.4.2 接受请求值

这个阶段将使用来自客户端的请求参数、请求头信息、Cookie等更新服务器端组件。

更具体地说,UIComponent.processDecodes方法被所有组件调用。这一阶段可能结束于处理验证阶段或渲染响应阶段。如果任何转换或验证失败,则终止当前操作,控制直接转到渲染响应阶段,展示转换或验证的错误给客户端。

3.4.3 处理验证

这一阶段将处理所有UIComponent已配置的验证和数据类型转换。

在这个阶段中,UIComponent.processValidators方法被所有组件调用。如果有任何转换或验证错误发生,那么当前进程被终止,并且控制被引导到渲染响应阶段报告发生的任何错误。

3.4.4 更新模型值

到达这个阶段意味着请求值的语法是有效的。

UIComponent的值会与模型对象同步,模型对象通常是backing bean。在这个阶段中,UIComponent.processUpdates方法被所有组件调用。将请求值赋值给模型对象,也可能会导致排队和触发事件。

3.4.5 调用应用

调用应用的逻辑并执行导航处理。

所有已注册的UIComponent的监听器被调用。例如,所有的动作组件(如命令按钮或超链接)有默认的动作监听器,会在这个阶段被调用。

3.4.6 渲染响应

渲染响应并将其返回给客户端应用程序。

在渲染响应之前,应用程序通过调用UIViewRoot.saveState方法在缓存中存储视图的状态。

时间: 2024-10-30 08:14:21

《Java EE 7精粹》—— 3.4 请求处理生命周期阶段的相关文章

《Java EE 7精粹》—— 导读

前言 Java EE 7平台建立在以前的版本之上,侧重于提高生产力和拥抱HTML5.本书面向的是想快速概览这个平台和回来复习基础知识的读者. 本书提供了Java EE 7平台中关键规范的概述(每章一个规范).本书绝不是一本介绍不同规范中每一个概念的详尽指南或教程,而是通过简单的代码示例来解释不同规范的主要概念.阅读本书,无需具备Java EE平台早期版本的知识,但你需要对Java有一些基本了解,以便理解代码. 这本书的重要部分来自<Java EE 6 Pocket Guide>(O'Reill

《Java EE 7精粹》—— 1.2 可交付成果

1.2 可交付成果 Java EE 7平台是遵从JCP 2.9作为JSR 342而开发的.JCP过程对每一个JSR定义了以下三个主要可交付成果. 1.2.1 规范(Specification) 描述了被提议的组件及其功能的一份正式的文件. 1.2.2 参考实现(RI) 对被提议的规范的二进制实现.参考实现有助于确保被提议的规范能以一个二进制形式实现,并为规范过程提供不断的反馈. Java EE的参考实现建立在GlassFish社区中. 1.2.3 技术兼容包(TCK) 用于验证参考实现是否符合被

《Java EE 7精粹》—— 3.3 复合组件

3.3 复合组件 JSF使用Facelets的功能和资源的处理来定义复合组件,定义在Facelets标记文件中的一个或多个JSF组件组成了一个复合组件.这个.xhtml文件存储在资源库中,可以从页面的任意区域创建一个可重用的组件. 复合组件在定义页面中定义,在使用页面中使用.定义页面使用定义元数据(或参数),使用<cc:implementation>定义实现,其中cc是http://xmlns.jcp.org/jsf/composite/命名空间的前缀.JSF规范的未来版本可能会放宽对指定元数

《Java EE 7精粹》—— 2.3 事件监听器

2.3 事件监听器 事件监听器提供对ServletContext.HttpSession和ServletRequest对象生命周期的回调事件.这些监听器实现了支持上述对象状态变化事件通知的接口类.每个类可以通过@WebListener注解定义或者在web.xml中声明,抑或通过ServletContext. addListener()方法注册.一个典型的监听器例子是以编程方式注册一个额外的Servlet而没有明确要求程序员这样做,或者应用程序级别的数据库连接的初始化和恢复. 可以有多个监听器类来

java的线程机制(二) Thread的生命周期

之前讲到Thread的创建,那是Thread生命周期的第一步,其后就是通过start()方法来启动Thread,它会 执行一些内部的管理工作然后调用Thread的run()方法,此时该Thread就是alive(活跃)的,而且我们还可以通 过isAlive()方法来确定该线程是否启动还是终结. 一旦启动Thread后,我们就只能执行一个方 法:run(),而run()方法就是负责执行Thread的任务,所以终结Thread的方法很简单,就是终结run()方法.仔 细查看文档,我们会发现里面有一个

《Java EE 7精粹》—— 第3章 JSF 3.1 Facelets

第3章 JSF JSF是基于Java的Web应用程序开发的服务器端用户界面(UI)框架.使用JSF可以实现: 使用遵循模型-视图-控制器(MVC)设计模式的可重用的UI组件集合来创建网页. 绑定组件到服务器端模型,允许UI与应用程序数据双向移动. 处理UI事件响应和模型交互中的页面导航. 管理跨服务器请求的UI组件状态. 提供从客户端生成的事件到服务器端应用程序代码的简单模型. 轻松地构建和重用自定义UI组件. JSF应用程序包括: 置于UI组件的布局中的一组网页. 一组托管的Bean,包括绑定

《Java EE 7精粹》—— 2.11 Upgrade Processing

2.11 Upgrade Processing HTTP 1.1(RFC 2616)第14.42节定义的升级机制,允许从HTTP 1.1过渡到一些其他的.不兼容的协议.协议变更后的应用层通信的功能和性质是完全依赖于所选择的新的协议.在客户端和服务器之间协商升级后,后续请求使用新选择的协议交换消息.一个典型的例子是RFC 6455的Opening Handshake一节中描述的如何从HTTP协议升级到WebSocket协议. Servlet容器提供了一个HTTP升级机制.然而,Servlet容器本

《Java EE 7精粹》—— 2.5 非阻塞I/O

2.5 非阻塞I/O Servlet 3.0允许异步请求处理,但只允许传统的I/O,这限制了应用程序的可扩展性.在典型应用中,在while循环中读取ServletInputStream: 如果传入的数据被阻塞或者数据流慢于服务器的读取,那么服务器线程就要等待数据.如果数据被写入到ServletOutputStream,同样也可能发生这样的等待.这限制了Web容器的可扩展性. 非阻塞I/O允许开发人员在有可读的数据时执行读操作或者在有写入的数据时执行写操作.这不仅增加了Web容器可伸缩性,也增加了

《Java EE 7精粹》—— 3.5 Ajax

3.5 Ajax JSF原生支持添加Ajax功能到网页.JSF允许局部视图的处理,其中只有视图中的一些组件用于处理该响应.JSF可以摘选页面上的某些组件,渲染局部页面,而不是整个页面. 有以下两种方法可以启用这种支持. 以编程方式使用JavaScript资源. 以声明的方式使用f:ajax组件. 编程方式的Ajax集成是通过资源处理机制启用的.jsf.js是在javax.faces库中预定义的资源.该资源包含用于Ajax和JSF页面交互的JavaScript API.可以在页面中使用output