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:component,ui: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:actionListener, f: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:forEach, c:catch |
JSTL 1.2核心标签 |
| JSTL函数标签库 | http://xmlns.jcp.org/jsp/jstl/functions | fn: |
fn:toUpperCase, fn:toLowerCase |
JSTL 1.2函数标签 |
Facelets应用程序的生命周期
JSF规范定义了JavaServer Faces应用程序的生命周期。以下步骤为基于 Facelets 的应用程序的过程描述。
生命周期是在客户端使用
Facelets创建的网页发出新请求时启动。 JSF创建一个新的组件树或javax.faces.component.UIViewRoot并放入FacesContex。如果可用的
UIViewRoot应用于Facelets, 视图可以填充组件进行渲染。新建的视图作为对客户端的响应而被渲染。
在渲染时,存储此视图的状态用于下一个请求。 存储输入组件和表单数据的状态。
客户端可以与视图交互,并从JSF应用程序请求另一个视图。 此时,保存的视图从存储状态恢复。
恢复视图再次通过JSF生命周期,如果没有验证问题,并且没有触发任何操作,最终将生成新视图或重新呈现当前视图。
如果请求相同的视图,则再次呈现存储的视图。
如果要求新视图,则继续执行【步骤2】。
将新视图作为对客户端的响应。
j2ee高级开发技术课程第六周的更多相关文章
- j2ee高级开发技术课程第五周
pplet 是一种 Java 程序.它一般运行在支持 Java 的 Web 浏览器内.因为它有完整的 Java API支持,所以Applet 是一个全功能的 Java 应用程序. 如下所示是独立的 J ...
- j2ee高级开发技术课程第三周
一.分析Filter例子(轻量级javaee企业应用实战p132) // 执行过滤的核心方法 public void doFilter(ServletRequest request, ServletR ...
- j2ee高级开发技术课程第八周
介绍一. hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode()呢? 因 ...
- j2ee高级开发技术课程第七周
来源:https://baike.baidu.com/item/JSON/2462549?fr=aladdin JSON(JavaScript Object Notation, JS 对象标记) 是一 ...
- j2ee高级开发技术课程第一周
一.课程目标 这学期开始了J2EE高级开发技术这门课,在此之前我学习了javaSE,为这门课的学习打下了一定的基础.到这学期的结束我希望我能熟悉javaee,能开发企业级应用,对开发轻量级企业应用的主 ...
- j2ee高级开发技术课程第二周(web请求的整个过程、XML)
博客非原创,只是收集整理了一下网上的一些文章 一.web请求的整个过程 1)把URL分割成几个部分:协议.网络地址.资源路径.其中网络地址指示该连接网络上哪一台计算机,可以是域名或者IP地址,可以包括 ...
- j2ee高级开发技术课程第十四周
RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果.这个请求包括一个参数集和一个文本集,通常形成“cl ...
- Java EE开发技术课程第六周(jsf、facelets)
1.jsf(java sever faces) 1.1 jsf的定义: jsf是一种用于构建java web应用程序的框架.它提供了一种以组件为中心的用户界面(UI)构建方法,从而简化了Java服务器 ...
- j2ee高级开发技术课程第四周
分析hello.java,在hello1项目中.下载链接:https://github.com/javaee/tutorial-examples/tree/master/web/jsf/hello1 ...
随机推荐
- 基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库04 —— 安装HAWQ插件PXF3.3.0.0
一. 安装PXF3.3.0.0,这里所安装的pxf的包文件都包含在apache-hawq-rpm-2.3.0.0-incubating.tar.gz里面下面步骤都是以root身份执行这里注意,pxf插 ...
- 常见机试题分析Java版
1. 操作系统任务分为系统任务和用户任务两种.其中,系统任务的优先级<50,用户任务的优先级>=50且<=255.优先级大于255的为非法任务,应予以剔除.现有一任务队列task[] ...
- python str byte 转换
# bytes object b = b"example" # str object s = "example" # str to bytes bytes(s, ...
- POI导出复杂的excel;excel公共样式类;excel拼接定制类;数据科学计数法转为普通值
一.excel公共样式类(包含数据科学计数法转为普通值) package com.thinkgem.jeesite.common.utils.excel; import org.apache.poi. ...
- AWS事故总结,几招教你规避风险
版权声明:本文由王煜奕原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/90687001488360802 来源:腾云阁 ht ...
- 【Java核心技术】类型信息(Class对象 反射 动态代理)
1 Class对象 理解RTTI在Java中的工作原理,首先需要知道类型信息在运行时是如何表示的,这是由Class对象来完成的,它包含了与类有关的信息.Class对象就是用来创建所有“常规”对象的,J ...
- Spring MVC 知识点整理
extend:http://www.jianshu.com/p/bef0e52067d2 1. Redis 存储方式 Redis存储机制分成两种Snapshot 和 AOF.无论是那种机制,Redis ...
- Eclipse的设置、调优、使用(解决启动卡顿等问题)----转
eclipse调优 一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡,其实只要对eclipse的相关参数进行一些配置,就会有很大的改善. 加快启动速度 1. ...
- 4 html文件引用问题
通常在写html文件的时候会遇到需要引入样式文件,或者图片等问题,对于有一定开发经验的人来说,这些都不是问题,做为初学者,还是有必要理解html文件引用的“思路”的 当html文件和要引用的文件在同一 ...
- 根据某个字段去重 根据另一个字段排序的一个SQL
背景:一张表 有 name , crt_time , work_sts 三个字段 这张表里存在这样的数据 'a', '2018-12-18 21:37:24', '未''a', '2018-12-19 ...