文档章节

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

 丁建祥
发布于 2016/12/12 16:35
字数 413
阅读 219
收藏 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页面

 

 

© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 58
码字总数 14450
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

流量劫持是如何产生的?

流量劫持,这种古老的攻击沉寂了一段时间后,最近又开始闹的沸沸扬扬。众多知名品牌的路由器相继爆出存在安全漏洞,引来国内媒体纷纷报道。只要用户没改默认密码,打开一个网页甚至帖子,路由...

谢思华
25分钟前
0
0
Hadoop Client无法使用maven下载源码

最近在学习hadoop,使用maven的时候想看一下源码的注释,结果IDEA一直提示无法下载 搞得我一度以为maven坏掉了。 但是通过搜索,发现在maven仓库里确实没有源码.... 而2.8.1以及之前的版本是...

Iceberg_XTY
26分钟前
0
0
为什么程序员千万不要重写代码?

你所做的事情,也许暂时看不到成果,但不要灰心或焦虑,你不是没有成长,而是在扎根。 图片来自网络 0 前言 程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的...

Java小铺
28分钟前
0
0
VUE集成AdminLte

1. 安装需要到插件 npm i admin-lte -Snpm i jquery -Snpm i axios -Snpm i vue-router -S 2. 配置webpack.config.js 2.1 module.exports.module.rules修改字体loader: {test: /\.(p......

Pasenger
今天
0
0
Spring Aop原理之切点表达式解析

在前面的文章(Spring AOP切点表达式详解)中,我们总结了Spring Aop切点表达式的用法,而在上文(Spring Aop原理之Advisor过滤)中我们讲到,切点表达式的解析主要是在PatternParser.parse...

爱宝贝丶
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部