play 1.2.4的action执行前后的加载逻辑
——杂言:最近在整理这一年的笔记,打算慢慢温故一遍,然后搬到博客里头来。这篇是2013.06.18时候整理的关于action执行前后的一些载入先后顺序逻辑。我的理解可能有偏差,如果有错误的,请读者们及时提醒我矫正,谢谢。共勉。
调用大致流程如下:
play.mvc.ActionInvoker:Invoke an action after an HTTP request.
ActionInvoker中的方法触发时间是在:服务器接受到HTTP request之后,调用Controller中的action之前。它具体做的事情有:
1)初始化行同中的request,scope,session,flash对象。对了,他还为HTTPrequest定义了一个标记变量resolved。
2)加载cache中的那些方法的变量
3)重载Enchancer中的classPool(ThreadLocal里的),这个和热编译有关,重载之后的enhancer可以动态只检测japidviews里的html声称的java的class文件的变化情况;还有跟play处理html对应的java中throw的Exception有关。部分注解的原话是这样子的:“Enhance global catch to avoid potential unwanted catching of play.mvc.results.Result”
(关于Enchancer这个之后有时间要研究下)
4)接下里就是各种Method,Class,Exception,pluginCollection等的处理
注意,上面的4个小点里做的处理都是发生在action真正被调用之前!!下面才开始真正处理业务逻辑里的action。
1)检查@Before
2)检查cache(注意:仅限以下这种request:
(request.method.equals("GET") || request.method.equals("HEAD")) && actionMethod.isAnnotationPresent(CacheFor.class))
cacheAction和action的diff:先检查cache中action,如果有,则运行,然后传出actionResult;处理完cacheAction之后检查actionResult是否为空,如果为空,则开始执行我们在接受到的request中的action。action的处理结果最后是保存到cache里哦,这个很神奇
3)执行@After
大致就这样了吧
play 1.2.4的action执行前后的加载逻辑的更多相关文章
- js异步执行 按需加载 三种方式
js异步执行 按需加载 三种方式 第一种:函数引用 将所需加载方法放在匿名函数中传入 //第一种 函数引用 function loadScript(url,callback){ //创建一个js va ...
- jquery mobile 请求数据方法执行时显示加载中提示框
在jquery mobile开发中,经常需要调用ajax方法,异步获取数据,如果异步获取数据方法由于网速等等的原因,会有一个反应时间,如果能在点击按钮后数据处理期间,给一个正在加载的提示,客户体验会更 ...
- js 如何保存代码段并执行以及动态加载script
1.模块化开发 通常使用的是 export和import 实现代码的共享和导入 2.特殊情况下需要将代码段作为参数传递 可以使用function 的toString方法将整合函数和里面的代码批量转化为 ...
- js、jquery的入口函数及其执行与图片加载的先后顺序
js的入口函数写法: window.onload = function() { }; 如果文件中有多个window.onload入口函数,则只会执行最后一个,之前的入口函数没有用. jquery的入口 ...
- 所有DOM元素加载之前执行的页面加载事件[jquery]
<script type="text/javascript"> (function() { alert("DOM还没加载"); })(jQuery) ...
- 浏览器中Javascript的加载和执行
在刚学习Javascript时曾对该问题在小组内做个一次StudyReport,发现其中的基础还是值得分析的. 从标题分析,可以加个Javascript的加载和执行分为两个阶段:加载.执行.而加载即浏 ...
- 高性能js之js加载执行
转载自:http://www.blogjava.net/BearRui/archive/2010/04/08/web_performance_js_where.html 外部JS的阻塞下载 所有浏览器 ...
- Javascript加载执行顺序
本文主要内容 一.不同位置的script标签执行顺序 二.document.ready和window.onload的区别 一.不同位置的script标签执行顺序 整个加载的过程从解析头部开始,比如ht ...
- HTML里的哪一部分Javascript 会在页面加载的时候被执行?
最近遇到一个问题:HTML里的哪一部分Javascript 会在页面加载的时候被执行()A : 文件头部 B : 文件尾 C : <head>标签部分 D : <body>标签 ...
随机推荐
- 数据库抽象层PDO
通过数据库抽象层PDO可以访问多个数据库 //数据库抽象层PDO //造DSN:驱动名:dbname=数据库名:host=服务器地址 $dsn = "mysql:dbname=mydb;ho ...
- c的详细学习(3)数据的输入输出
c语言没有专门的数据输入输出语句,而是通过调用系统提供的的标准输入/输出库函数来实现数据的输入和输出. (1)数据的输出: 注意:在使用标准的输入输出库函数时,使用编译预处理命令“#inclu ...
- 面向对象分析与设计(C++)课堂笔记
第一次课: 对象是程序设计最基本的单元 对象:对象标识.属性.操作(对象标识又分为内部标识.外部标识) 三三制原则 继承:英文语义”is a kind of” 自动的拥有或隐含的复制 虚基类:解决多继 ...
- CommonJS与AMD、CMD
随着JS模块化编程的发展,处理模块之间的依赖关系变得至关重要,随后诞生了CommonJS.AMD与CMD规范,但es6的import/export能代替他们,但因为本人所使用的webpack也支持前三 ...
- LINQ 学习路程 -- 查询操作 ElementAt, ElementAtOrDefault
Element Operators (Methods) Description ElementAt 返回指定索引的元素,如果索引超过集合长度,则抛出异常 ElementAtOrDefault 返回指定 ...
- JavaWeb -- 服务器传递给Servlet的对象 -- ServletConfig, ServletContext,Request, Response
1. ServletConfig 有一些东西不合适在程序中写死,应该写在web.xml中,比如 文字怎么显示, 访问数据库名 和 密码, servlet要读取的配置文件 等等.. l在Servle ...
- Tab支持的DHTML Window控件
带有Tab标签支持的DHTML Window控件.它使用cookies来“记忆”窗体大小,位置,哪个Tab选项被选中,window堆叠顺序.代码下载地址:http://www.huiyi8.com/ ...
- javascript 数组 去重
javascript数组去重有如下 方法: 一) 利用 数组中的 indexOf判断 例如: Array.prototype.unique=function(){ var n=[]; for(var ...
- L99
You're not obligated to win. You're obligated to keep trying.你不一定要获胜,但你必须不断尝试.He announced an expans ...
- PyQt5布局管理(1)
Qt布局管理按简单分可分为绝对位置布局和布局管理器布局 一.绝对位置布局: 组件不放在布局管理器中,通过函数setGeometry(x,y,width,height)来设定组件相对其父窗口的位置.其中 ...