文档章节

Jfinal 运行流程,以及源代码解读

 丁建祥
发布于 2016/12/12 16:35
字数 413
阅读 250
收藏 0

今天事情不错,抽出一段时间看了看Jfinal 的元代码:

一、项目启动

Jfinal 是在一个叫做JFinalFilter的过滤器中启动的,在这里边做了大量的初始化工作,config里的配置都一一加载进来。过滤器继承自javax.servlet.Filter 拥有三个默认的方法;init  doFilter destroy

项目启动的过程就是执行init的过程:首先根据web.xml传过来的类名实例化一个config对象,然后将配置信息加载进来

        jfinalConfig.configConstant(constants);                initLoggerFactory();
        jfinalConfig.configRoute(routes);
        jfinalConfig.configPlugin(plugins);                    startPlugins();    // very important!!!
        jfinalConfig.configInterceptor(interceptors);
        jfinalConfig.configHandler(handlers);

接着初始化actionMapping handerler render I18n TokenManager 等

初始化handler的时候是把所有的handler按照前后顺序串联起来,执行action 的时候挨个执行。

actionMapping  生成的方法是将actionKey和action对象组成map,action对象包括controllerKey, actionKey, controllerClass, method, methodName, actionInters, viewPath.

生成action对象的过程也同时将interceptor和Controller关联起来,interceptor数组是controller的一个对象,这就就解释了在执行controller 的之前先要执行inteceptor的方法。

二、一个链接到返回页面整个执行过程(servlet部分省略)

首先还是先交给过滤器的doFilter方法,然后交与handler执行,这里的handler要根据配置依次执行,由next对象控制,最后交与actionHandler,由actionHandler 进入具体方法。上边说了,进入具体方法之前先要经由配置的interceptor,具体action执行 完之后如果有渲染页面,需要freemark(也可以其他)。将response的返回数据与模板结合生成html页面

 

 

© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 64
码字总数 28522
作品 0
青岛
JFinal针对ORACLE的timestamp字段解决办法

JFinal是个比较不错的的框架,但JFinal起源时使用mysql数据库,因此在对数据库支持方面还没有达到完美。 本人使用JFinal有一段时间的,由于项目的数据库普遍采用oracle,在使用oracle过程中遇...

真的农夫三拳
2013/06/23
0
6
JFinal-Beetl-Shiro(JdbcRealm)-例子

JFinal-Shiro-JDBC-Demo http://git.oschina.net/yinjun622/JFinal-Shiro-JDBC-Demo 简单实现@JFinal与Shiro整合例子 1、工程通过Eclipse直接导入,部署到tomcat中; 2、新建jfinalshiro数据......

leon_rock
2014/02/27
0
12
JFinal 3.4 发布,将极速贯彻到 UI 层

jfinal 的终极目标是全面实现软件开发整个过程的极速开发,极大提升开发效率,极大降低学习成本,极大提升开发体验 jfinal 诞生头五年,已实现 WEB + ORM + AOP 层面的极速开发,赢得了大量开...

JFinal
04/28
0
129
JFinal极速开发实战教程新鲜出炉~

JFinal极速开发实战教程新鲜出炉~ [持续更新中...] JFinal框架让 IT 工程师发挥更大的潜能,实现更大价值,同时也希望 JFinal 工具力量能帮助正在创业的朋友们提升效率、降低成本从而实现创业...

山东-小木
2015/01/07
0
13
OSC上关于Jfinal的提问整理(二)

1.【问】:Db.tx(new IAtom())事务不起作用? 【jfinal答】:1:如果使用的mysql,确保引擎为 InnoDB 2:这行代码改一下Db.save(c3p0Plugin.getDataSource(), "tbtest", "PKID", record);去掉...

木川瓦兹
2013/04/25
0
2

没有更多内容

加载失败,请刷新页面

加载更多

java序列化(七) - fst 序列化

java序列化(七) - fst 序列化 github https://github.com/RuedigerMoeller/fast-serialization 实践 https://gitee.com/mengzhang6/serializable-demo.git maven依赖 <!-- https://mvnrepo......

晨猫
24分钟前
2
0
智力问题汇总

南京新建地铁线路,给你2块钱,测出来需要配置多少辆车? 参考答案:根据地铁有固定时间间隔,坐一圈该线路,推算出需要多少辆。 一共50张卡片,上面写着1--50 ,50个数字,藏起来一张,打乱...

职业搬砖工程师
28分钟前
2
0
ZFS-自我恢复RAID

ZFS-自我恢复RAID 这个给了我一个简单而又强大的理由,让我立马为之折服,ZFS可以自动的检测发生的错误,而且,可以自我修复这些错误。假设有一个时刻,磁盘阵列中的数据是错误的,不管是什么...

openthings
37分钟前
2
0
从Hash到一致性Hash原理(深度好文)

要讲一致性Hash原理,先从一般性Hash讲起,其实Hash的本质就是一个长度可变的数组,那为什么Hash的时间复杂度是O(1),而其他类型的数据结构查找都是要遍历来,遍历去,即便是树,二叉树,也是要经过几...

算法之名
50分钟前
18
0
软件测试工具书籍与面试题汇总下载(持续更新)

简介 本文是https://github.com/china-testing/python-api-tesing/blob/master/books.md 的节选。 欢迎转载,转载请附带此简介,谢谢! 试题 软件测试综合面试题(高级测试)-试题.pdf 软件测试...

python测试开发人工智能安全
58分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部