JFinal 源码解析-MVC部分
2019-01-24 本文已影响0人
powerjiajun
首先从请求入口看起,应用初始化时加载web.xml的JFinalFilter,和configClass
![](https://img.haomeiwen.com/i6084749/b9cb4cfd87c946a1.png)
从这段配置可以看出jfinal和spring mvc入口类似,通过一个实现Servlet Filter的过滤器来拦截所有请求。
接下来看看JFinalFilter的源码,可以看出首次请求触发Filter的初始化动作时,通过init方法加载了应用上下文路径、插件、编码、路由配置:
![](https://img.haomeiwen.com/i6084749/49764e1ba4c3a6ca.png)
接下来就是请求的处理:
![](https://img.haomeiwen.com/i6084749/91cb0b7d5f692b83.png)
handler用了责任链模式,将Global添加的handler放在前面,ActionHandler在最后:
![](https://img.haomeiwen.com/i6084749/1d56ea555f3d6bca.png)
![](https://img.haomeiwen.com/i6084749/f45460e2c6905d6a.png)
![](https://img.haomeiwen.com/i6084749/65b2ae40bd957a2a.png)
![](https://img.haomeiwen.com/i6084749/6dae7c913caf6af9.png)
在JFInalFilter的doFilter方法中,对handler.handle的调用会逐步走完这条责任链,ActionHandler最后执行,继续看看ActionHandler的代码:
![](https://img.haomeiwen.com/i6084749/7f03f1549c30c91c.png)
到这里已经按uri拿到了Action进而拿到Controller,执行完url对应的controller方法,根据render结果决定页面跳转还是json渲染,此处render策略靠策略模式实现。
当应用停止时,执行destory方法,通知jvm可以回收handler,停止插件,执行afterStopJfinal方法,生命周期结束了
![](https://img.haomeiwen.com/i6084749/8e001f6b9090e110.png)