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(); // 开始接受请求} }
    • 获取到我们web.xml中配置的全类名
      cn.lang.common.TestConfig 再通过createJFinalConfig()方法反射得到TestConfig的实例对象jfinalConfig
    • 整个初始化的核心方法,后续会展开讲
    • 拿到应用名称以及应用名长度,后续路由映射controller中的方法需要排除掉url中的应用名影响
    • 用户可重写配置类JFinalConfig中的onStart()方法, jfinal启动初始化完后在这里调用用户重写的onStart()方法
    • 获取到初始化后的handler对象,挂载到JFinalFilter类全局变量上, 用于在doFilter()中调用处理后续的每个请求。
    4.核心初始化类:JFinal

    接上一步的

  • 执行jfinal对象的init()方法

    本类主要处理服务器启动时的初始化,以及提供jetty的main方法启动方式。

    public 


    本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部