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

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

本节书摘来异步社区《Java EE 7精粹》一书中的第3章,第3.4节,作者:【美】Arun Gupta,更多章节内容可以访问云栖社区“异步社区”公众号查看。

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方法在缓存中存储视图的状态。

相关文章
|
2月前
|
设计模式 Java Spring
Java 设计模式之责任链模式:优雅处理请求的艺术
责任链模式通过构建处理者链,使请求沿链传递直至被处理,实现发送者与接收者的解耦。适用于审批流程、日志处理等多级处理场景,提升系统灵活性与可扩展性。
336 2
|
3月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
505 1
|
2月前
|
机器学习/深度学习 人工智能 监控
Java与AI模型部署:构建企业级模型服务与生命周期管理平台
随着企业AI模型数量的快速增长,模型部署与生命周期管理成为确保AI应用稳定运行的关键。本文深入探讨如何使用Java生态构建一个企业级的模型服务平台,实现模型的版本控制、A/B测试、灰度发布、监控与回滚。通过集成Spring Boot、Kubernetes、MLflow和监控工具,我们将展示如何构建一个高可用、可扩展的模型服务架构,为大规模AI应用提供坚实的运维基础。
298 0
|
6月前
|
设计模式 算法 Java
Java SE 与 Java EE 组件封装使用方法及实践指南
本指南详细介绍了Java SE与Java EE的核心技术使用方法及组件封装策略。涵盖集合框架、文件操作、Servlet、JPA、EJB和RESTful API的使用示例,提供通用工具类与基础组件封装建议,如集合工具类、文件工具类、基础Servlet、实体基类和服务基类等。同时,通过分层架构集成示例展示Servlet、EJB和JPA的协同工作,并总结组件封装的最佳实践,包括单一职责原则、接口抽象、依赖注入、事务管理和异常处理等。适合希望提升代码可维护性和扩展性的开发者参考。
219 0
|
9月前
|
存储 监控 安全
重学Java基础篇—类的生命周期深度解析
本文全面解析了Java类的生命周期,涵盖加载、验证、准备、解析、初始化、使用及卸载七个关键阶段。通过分阶段执行机制详解(如加载阶段的触发条件与技术实现),结合方法调用机制、内存回收保护等使用阶段特性,以及卸载条件和特殊场景处理,帮助开发者深入理解JVM运作原理。同时,文章探讨了性能优化建议、典型异常处理及新一代JVM特性(如元空间与模块化系统)。总结中强调安全优先、延迟加载与动态扩展的设计思想,并提供开发建议与进阶方向,助力解决性能调优、内存泄漏排查及框架设计等问题。
413 5
|
Java
Java aop 如何获取请求头里的token
【8月更文挑战第13天】Java aop 如何获取请求头里的token
385 0
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
268 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
9月前
|
运维 Cloud Native Java
postman发起post请求遇到报错:java.io.FileNotFoundException (文件名、目录名或卷标语法不正确。)
遇到bug报错,多猜可能的原因,控制变量反复测试,直至找到问题的关键,然后再思考如何解决或者回避。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
206 6
|
Java API 调度
Java 线程的生命周期
在JDK 1.5之前,线程的生命周期包括五种状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。JDK 1.5及之后增加了三种阻塞状态,共六种状态:新建、可运行、终止、锁阻塞、计时等待和无限等待。这些状态描述了线程在操作系统和JVM中的不同阶段。
347 4
Java 线程的生命周期