j2ee高级开发技术课程第六周

一.jsf(java server faces)的运行原理(工作方式)

1.jsf应用是事件驱动的,当一个事件发生时(比如用户单击一个按钮),事件通知通过HTTP发往服务器,服务器端使用叫做FacesServlet的特殊servlet处理该通知,web容器里每一个jsf应用都有它自己的FacesServlet;

在后台,每一个jsf请求都触发了3件事情:

1)FacesServlet创建FacesContext(该对象中包含Web容器传给FacesServlet的service方法的ServletContext,ServletRequest,ServletRespons对象,在处理过程中主要就是修改这个FacesContext)

2)FacesServlet把控制权交给Lifecycle

3)Lifecycle分6个阶段处理FacesContext(也即jsf生命周期过程)

二.jsf生命周期过程

1. 重建视图: 建立组件树,如果是首次渲染,则组件树被重置合适的状态;如果不是首次渲染,则组件树被创建跳到响应阶段(JSF的组件树结构和DOM是一样的,只不过后者是client前者是server)。

2. 应用请求值: 树中的每个组件都能从请求参数中提取到新的值,并把值存储本地,之后处理所有与组件相关的事件进入队列,如果某个组件的immediate属性设置为true,那么验证,转换,以及与组件关联的事件在这个阶段被处理.

3. 处理验证: 组件值转换成与之相对应的数据类型。如果转换失败,这一阶段将继续完成所有剩余的转换器,验证和运行所需的检查,但在完成后,跳转到生命周期的Render Response阶段。如果验证成功,则检查组件上的required 的属性。如果该属性是必须的并且组件中输入了值,那么与之相关的验证程序运行。如果required的属性是必须但又没有输入值,这一阶段完成(所有剩余验证程序还会继续执行),然后生命周期跳跃到Render Response阶段。如果required 属性标识为false,不管组件中有没有输入值,验证过程都不会运行。

4. 更新模型: 验证组件的本地值移动到模型中,同时本地副本被丢弃。

5. 调用应用程序: 执行应用级逻辑(如事件处理程序)。

6. 呈现响应: 呈现树中的组件。后续请求和Restore View阶段保存状态信息。

二、Facelets

Facelets是一种轻量级的页面声明语言,用于使用HTML样式构建JSF(JavaServer Faces)视图。

它包括以下功能:

  • 它使用XHTML创建网页。
  • 除了支持JavaServer Faces和JSTL标记库之外,它还支持Facelets标签库。
  • 它支持表达语言(EL)。
  • 它是使用组件和页面的模板。

优点

  • 它通过模板和复合组件支持代码可重用性。
  • 它通过定制提供组件和其他服务器端对象的功能可扩展性。
  • 编译时间更快
  • 它在编译时验证表达式语言。
  • 高性能渲染能力。

JSF(JavaServer Faces)技术支持各种标签库,以将组件添加到网页。 为了支持JavaServer Faces标签库机制,Facelets使用XML命名空间声明。

下表显示了Facelets支持的标签库。

标签库 URI 前缀 示例 内容
JSF Facelets标签库 http://xmlns.jcp.org/jsf/facelets ui: ui:componentui:insert 模板标签
JSF HTML标签库 http://xmlns.jcp.org/jsf/html h: h:head,h:body 所有UI组件对象的JavaServer Faces组件标记
JSF核心标签库 http://xmlns.jcp.org/jsf/core f: f:actionListenerf:attribute JSF标签独立于任何特定渲染工具包的自定义操作
传递元素标签库 http://xmlns.jcp.org/jsf jsf: jsf:id 支持HTML5友好标记的标签
传递属性标签库 http://xmlns.jcp.org/jsf/passthrough p: p:type 支持HTML5友好标记的标签
复合组件标签库 http://xmlns.jcp.org/jsf/composite cc: cc:interface 支持复合组件的标签
JSTL核心标签库 http://xmlns.jcp.org/jsp/jstl/core c: c:forEachc:catch JSTL 1.2核心标签
JSTL函数标签库 http://xmlns.jcp.org/jsp/jstl/functions fn: fn:toUpperCasefn:toLowerCase JSTL 1.2函数标签

Facelets应用程序的生命周期

JSF规范定义了JavaServer Faces应用程序的生命周期。以下步骤为基于 Facelets 的应用程序的过程描述。

  1. 生命周期是在客户端使用Facelets创建的网页发出新请求时启动。 JSF创建一个新的组件树或javax.faces.component.UIViewRoot并放入FacesContex
  2. 如果可用的UIViewRoot应用于Facelets, 视图可以填充组件进行渲染。
  3. 新建的视图作为对客户端的响应而被渲染。
  4. 在渲染时,存储此视图的状态用于下一个请求。 存储输入组件和表单数据的状态。
  5. 客户端可以与视图交互,并从JSF应用程序请求另一个视图。 此时,保存的视图从存储状态恢复。
  6. 恢复视图再次通过JSF生命周期,如果没有验证问题,并且没有触发任何操作,最终将生成新视图或重新呈现当前视图。
  7. 如果请求相同的视图,则再次呈现存储的视图。
  8. 如果要求新视图,则继续执行【步骤2】。
  9. 将新视图作为对客户端的响应。

原文地址:https://www.cnblogs.com/zgq0/p/8849106.html

时间: 2024-10-31 06:33:50

j2ee高级开发技术课程第六周的相关文章

Java EE开发技术课程第五周(Applet程序组件与AJAX技术)

1.Applet程序组件 1.1.定义: Applet是采用Java编程语言编写的小应用程序,该程序可以包含在HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同.含有Applet的网页的HTML文件代码中部带有<applet> 和</applet>这样一对标记,当支持Java的网络浏览器遇到这对标记时,就将下载相应的小应用程序代码并在本地计算机上执行该Applet. 1.2.工作原理及优势: 1.2.1  Java Applet 可以大大提高Web页面的交互

Java EE开发技术课程第七周(json)

JSON: https://baike.baidu.com/item/JSON/2462549?fr=aladdin JSON指JavaScript对象表示法(JavaScript Object Notation),是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,有效地提升网络传输效率. JSON 语法 JSON 语法规则 在 JS 语言中,一切都是对象.因此,任何支持的类型都可以通过 JSON 来表示,例如字符串.数字.对象.数组等.但是对象和数组是比较特殊且常用

[_CN] Eclipse精要与高级开发技术 note

一 eclipse是基于java的 ide ,但根据其体系结构,开发插件,也可拓展到其他语言———————— 尽管如此,但还是很少听说用eclipse来写php或者c的 跨os 三个项目:eclipse项目.eclipse工具项目.eclipse技术项目.———— 都是基于cpl common public license eclipse项目的三个子项目:1 平台子项目2 java开发工具项目 jdt-java3 插件开发环境项目 pde-plug-in 每个插件有一个plugin.xml ec

开发技术前线 第六期

Android 技术文章 Android 应用性能优化系列 那些年我们错过的响应式编程 深入理解Content Transition (part 2) Kotlin for Android (III) 扩展函数与默认值 功能测试框架 espresso 如何在本地搭建一个Android应用crashing跟踪系统-ACRA 实现Instagram的Material Design概念设计 一个支持多设备的Android参考应用 开源库 聚合各种UI效果的库 在View上面添加标签效果 很有个性的进度

课程报名 | 《六周玩转云原生》- 给小白的Kubernetes技术课

六周玩转云原生 为了让开发者们在这个特殊的时期里可以学习到更多干货,京东智联云开发者特别策划了 <六周玩转云原生>系列课程,让我们的开发者可以迅速入门,持续充电. 3 月 12 日,我们的第一节针对容器方向的公开课<容器入门,Docker.Pod初探>隆重开讲.课程结束后,收到了很多来自开发者的反馈: 为了让大家进一步了解"云原生"的概念,Google和Red Hat在2014年提出的Kubernetes解决方案,是必学一课! 在近几年中,Kubernetes已

【异周话题 第 16 期】2018年,你最期待的前端开发技术有哪些?

[异周话题 第 16 期]2018年,你最期待的前端开发技术有哪些?话题背景2017年已经过去,2018年如约而至.2017年在前端领域里,react已经逐渐占据主流,Angular 发布了 v4 以及 v5,Vue.js 继续流行:谷歌也宣布PWA将获得与安卓原生应用同等的待遇与权限,PWA将会得到迅速的普及.微软开发的TypeScript也逐渐得到关注,angular已经开始使用typeScript进行开发,react和vue也进一步加深对typeScript的支持.在过去的一年里前端领域的

Android开发经典书籍下载——《Android 4高级编程》《疯狂Android讲义》《Android应用开发详解(郭宏志)》《Android应用案例开发大全》《Android 3D游戏开发技术》

这是我收集的关于android开发方面的经典书籍,高清PDF电子版,可以在我的百度网盘免费下载,希望对需要的朋友有帮助. 目录: <Android 4高级编程>(附完整源代码) <疯狂Android讲义> <Android应用开发详解(郭宏志)> <Android应用案例开发大全> <Android 3D游戏开发技术> <Android内核剖析 柯元旦> <深入理解Android  卷1> <深入理解Android

第六周课程总结及实验报告

一.实验目的 (1)掌握类的继承 (2)变量的继承和覆盖,方法的继承,重载和覆盖的实现: 二.实验的内容 (1)根据下面的要求实现圆类Circle. 1.圆类Circle的成员变量:radius表示圆的半径. 2.圆类Circle的方法成员: Circle():构造方法,将半径置0 Circle(double r):构造方法,创建Circle对象时将半径初始化为r double getRadius():获得圆的半径值 double getPerimeter():获得圆的周长 void disp(

JavaWeb开发技术基础概念回顾篇

第一章 动态网页开发技术概述 1.JSP技术:JSP是Java Server Page的缩写,指的是基于Java服务器端动态网页. 2.JSP的运行原理:当用户第一次请求某个JSP文件时,容器首先检查JSP文件的语法是否正确,然后将JSP文件转换成Servlet原文件,并调用Java工具类将Servlet原文件编译成字节码文件.接下来,容器加载转换后的Servlet类,实例化一个该类的对象处理客户端的请求,请求处理完成后,容器将HTML格式的相应信息发送给客户端,执行过程如图所示: 3.JSP的