在Oracle ADF开发中,一个请求发生后,经过ADF处理后,我们可以很快得到响应页面,但在请求过程中ADF框架在背后究竟做了什么东西呢?今天让我们一起来了解下,ADF、JSF是基于组件模型的,不同于请求响应,它的每个组件具有生命周期的概念,在不同的阶段处理、完成不同的任务,理解了这个东西对于日常开发是很有帮助的,我们会清楚地知道代码会在哪个阶段执行,还有当发生异常时,我们可以根据异常快速定位到大概是哪些处理阶段发生问题,从而有针对性地排查处理,不扯那么多了,进入正题。
      首先给出JSF和Oracle ADF页面请求处理的生命周期的序列图:

以下对序列图进行说明:
1、 一个http://yourserver/yourapp/faces/some.jsp到达;
2、 ADF的过滤器ADFBindingFilter会找到当前session的绑定容器(BindingContext),如果是用户第一次访问则会进行创建:

  • 在BindingContext初始化中,ADF会获取web.xml文件<context-param>的 CpxFileName值,加上.cpx后缀作为绑定上下文数据文件,默认参数是:DataBindings;
  • 读取DataBindings.cpx文件以发现数据控制定义,用于在运行时实例化绑定容器的页面定义文件名以及将JSP页面与其页面定义文件相关联的页面映射;
  • 构造每个数据控件的一个实例,并引用每个BindingContainer(页面级别),每个绑定容器的内容在第一次被页面使用时被懒惰地加载。

BindingContext:In Brief, Data Bindings file contains the page Map, Page Definition references , References to Data Controls.
3、 接着ADFBindingFilter在参与请求的每个数据控件上调用beginRequest()方法(不同的阶段会有不同的调用方法,生命周期决定的),这样就可以在每个请求开始时通知每个数据控件,从而可以执行必要的设置。
4、 从AM池中获取AM实例;
5、 在JSF的各个标准处理阶段(Lifecycle类,由FacesServlet负责创建),除了完成自己的工作外,顺便通知ADF(ADFPhaseListener类),以便ADF在不同的阶段增加自己的处理内容,毕竟ADF是继承自JSF,肯定需要有自己特色的一些东西的,具体如图所示:

6、 ADFPhaseListener创建一个ADF PageLifecycle对象来处理每个请求,并将不同阶段的处理委托给ADF PageLifecycle类中的相应方法,此过程会创建BindingContainer对象;
7、 JSF转发到响应的页面;
8、 页面上的UI组件访问页面的绑定容器中的值绑定和迭代器绑定,并在浏览器中输出;
9、 ADFBindingFilter在参与请求的每个数据控件上调用endRequest()方法(各司其职),这样可以在每个请求结束时通知每个数据控件,从而可以执行必要的资源清理工作;
10、将应用程序模块的实例释放回应用程序模块池
11、用户在浏览器看到响应页面。

更多文章请见我的个人博客http://www.acanblog.com

一个请求中,ADF、JSF究竟做了哪些工作的更多相关文章

  1. jmeter从上一个请求使用正则表达式抓取Set-Cookie值,在下一个请求中运用

    工作中遇到的问题,登录请求,返回的Response Headers中有个参数Set-Cookie,需要抓取这个参数,运用到下一个请求中,见下图: 通过正则表达式抓取Set-Cookie的值,由于该值存 ...

  2. 几种将上一个请求的cookies带入下一个请求中的方法

    *** 此次练习不包含使用requests.session()方法实现: 练习环境:本地安装禅道 格式: 1.头部传Cookie:xxx2.加参数cookies=字典格式3.直接传RequestsCo ...

  3. 一张图带你看懂SpriteKit中Update Loop究竟做了神马!

    1首先Scene中只有开始一点时间用来回调其中的update方法 ;] 2然后是Scene中所有动作的模拟 3接下来是上一步完成之后,给你一个机会执行一些代码 4然后是Scene模拟其中的物理世界 5 ...

  4. postman简单教程,如何在请求中引用上次请求返回的值

    做接口测试,一定会遇到这种情况,需要拿上次请求的值在本次请求中使用,比如,我们去测试一个东西,要去登录才能做其他的操作,需要拿到登录返回数据中的某些字段,比如,token啊等... 如果发一次请求,就 ...

  5. postman的关联,即如何在请求中引用上次请求返回的值

    做接口测试,一定会遇到这种情况,需要拿上次请求的值在本次请求中使用,比如,我们去测试一个东西,要去登录才能做其他的操作,需要拿到登录返回数据中的某些字段,比如,token啊等... 如果发一次请求,就 ...

  6. SharePoint REST API - 一个请求批量操作

    博客地址:http://blog.csdn.net/FoxDave 本篇主要讲解如何应用$batch查询选项来批量执行REST/OData请求,它将多个操作捆绑到一个请求中,可以改进应用程序的性能 ...

  7. OpenGL中glRotatef()函数究竟对矩阵做了什么

    OpenGL中glRotatef()函数究竟对矩阵做了什么 我们知道OpenGL中维持着两套矩阵,一个是模型视图矩阵(model view matrix),另一个是投影矩阵(projection ma ...

  8. 浏览器在一次 HTTP 请求中,需要传输一个 4097 字节的文本数据给服务端,可以采用那些方式?

    浏览器在一次 HTTP 请求中,需要传输一个 4097 字节的文本数据给服务端,可以采用那些方式? 存入 IndexdDB 写入 COOKIE 放在 URL 参数 写入 Session 使用 POST ...

  9. 一个请求在Struts2框架中的处理流程

    1.客户端向Servlet容器发起一个请求,将请求封装为HttpServletRequest对象. 2.HttpServletRequest首先经过web.xml中配置的struts2的过滤器,以及s ...

随机推荐

  1. 《微信小程序七日谈》- 第七天:不要捡了芝麻丢了西瓜

    <微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩: 第五 ...

  2. look look C#7

    vs2017也rc好几个版本了,本想跟进看看c#7加入了什么内容,去搜索c#7,确实找到了不少文章,无奈很多特性ide根本不让编译啊...所以今天主要列出已经确定了的c#7特性(一般来说rc后也不会加 ...

  3. Android实现屏蔽微信拉黑和删除联系人功能

    实现效果: 让微信永远弹不出那个删除的对话框不就相当于屏蔽掉该功能了吗?哈哈效果如图: 实现原理: 同样是利用AccessibilityService辅助服务,关于这个服务类还不了解的同学可以先看下我 ...

  4. 微信小程序 JS动态修改样式

    微信小程序这个坑啊,js动态修改样式,我们并不能用js或者jq 轻轻松松一行代码搞定.或者用removeClass addClass 来修改样式. 以下是一种动态修改样式的方法,原理是绑定数据,然后动 ...

  5. 一个普通底层.NET程序员关于职场瓶颈期的思考,辗转自我提升/跳槽/转行之间

    徒有工龄,没技术没学历没平台没家底,工作几年,无车无房无存款还前景不明. 时常有身边的亲友问怎么学开发怎么转互联网,说起IT行业都说工资高,动辄月薪上万动辄年薪几十万. 再看看自己,我可能是假的程序员 ...

  6. java文件读写操作类

    借鉴了项目以前的文件写入功能,实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可(可以是绝对或相对路径) 以后使用时,可以在此基础上改进,比如: 写操作: 1,对java GUI中文本框中的内 ...

  7. winsshfs的快速入手

    之前在公司使用mac ,并且通过mac下的osfuse和sshfs连接,直接将虚拟机的文件目录同步到了本地,并且可以进行实时操作修改,对于写项目,确实是省了很大一部分上传的精力. 于是在自己的win下 ...

  8. JSP 学习一

    今天开始JSP的学习,作为Web开发人员,对JSP的开发是必不可少的,因此有必要对JSP进行掌握和学习:为此开始JSP的学习: 今日目标: 1)什么是JSP? 2)JSP的运行机制? 3)JSP的三种 ...

  9. [Noi2014]魔法森林( 动态mst lct)

    以前一直觉得lct特别难写,自从学了丽洁姐的lct之后,觉得lct居然能这么短,这个主程序能40行左右解决~~~~ 这道嘛~~虽说能用spfa解决,但还是写下lct吧 把边按a值排序后一条一条插入并维 ...

  10. 几分钟看完 flow.ci 全部功能

    从 0 到 1,从邀请式内测到收费上线,flow.ci 经历了十个多月的沉淀与打磨.这期间,flow.ci 工程师们奋力赶工,进行了一系列的大功能更新,Bug 修复,功能优化. 这篇文章记录了 flo ...