JFinal 启动流程
- 前言
- 启动类
- 核心过滤器:JFinalFilter
- 核心初始化类:JFinal
- 总结
1.前言
JFinal 是基于Java 语言的极速 web 开发框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。 – 百度百科
写这篇文档的时候特意去知乎逛了一下,果然小众的框架还是没有被主流接受,毕竟现在还是spring一统天下的时期。
但我觉得它有它的优势。作为一个新手玩家,它的学习成本确实很低。我依然记得大学那会磨了一天也不知道SSM整合的时候哪里出了问题,我想如果那时候会jfinal,写课程设计或毕业设计应该会轻松些吧。虽说有springboot后免去了XML配置,但前提还是要会spring,mybatis的啊。jfinal封装比较浅,所以才会有读源码的欲望,里面一些设计也确实受益匪浅。
另我更惊呀的是在社区提交的问题很快就能得到詹总(jfinal作者)回复。
贴出官网地址: JFinal文档 很详细。
2.启动类
jetty服务器启动方式(undertow是另外一种)
public static void main(String[] args) {JFinal.start("src/main/webapp", 80, "/", 5);
}
为了简化开发,jfinal封装集成了jetty服务器,使得可以main方法启动服务器,springboot的SpringApplication.run应该是同样的道理。这里先不展开讨论,等我研究好了再写一篇专门讨论jfinal-jetty原理。
3.核心过滤器:JFinalFilter
web.xml中配置的JFinalFilter过滤器
<filter><filter-name>jfinalfilter-name><filter-class>com.jfinal.core.JFinalFilterfilter-class><init-param><param-name>configClassparam-name><param-value>cn.lang.common.TestConfigparam-value>init-param>
filter>
javaweb三大组件之一的filter过滤器的生命周期方法init()是在服务器启动时被执行。
以下JFinalFilter类仅仅引入了核心代码
public class JFinalFilter implements Filter {public void init(FilterConfig filterConfig) throws ServletException {if (jfinalConfig == null) {// 反射得到jfinalConfig对象
createJFinalConfig(filterConfig.getInitParameter("configClass"));}// 整个初始化核心方法 jfinal.init(jfinalConfig, filterConfig.getServletContext());// 拿到应用名称以及应用名长度String contextPath = filterConfig.getServletContext().getContextPath();contextPathLength = (contextPath == null || "/".equals(contextPath) ? 0 : contextPath.length());constants = Config.getConstants();encoding = constants.getEncoding();// 启动后的jfinal后的回调 jfinalConfig.onStart();// 和4一样的作用 为兼容以前版本jfinalConfig.afterJFinalStart();// 处理请求的对象 handler = jfinal.getHandler(); // 开始接受请求}
}
cn.lang.common.TestConfig 再通过createJFinalConfig()方法反射得到TestConfig的实例对象jfinalConfig- 整个初始化的核心方法,后续会展开讲 拿到应用名称以及应用名长度,后续路由映射controller中的方法需要排除掉url中的应用名影响
- 用户可重写配置类JFinalConfig中的onStart()方法, jfinal启动初始化完后在这里调用用户重写的onStart()方法
- 获取到初始化后的handler对象,挂载到JFinalFilter类全局变量上, 用于在doFilter()中调用处理后续的每个请求。
4.核心初始化类:JFinal
接上一步的
本类主要处理服务器启动时的初始化,以及提供jetty的main方法启动方式。
public
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
