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>jfinal</filter-name>
    <filter-class>com.jfinal.core.JFinalFilter</filter-class>
    <init-param>
        <param-name>configClass</param-name>
        <param-value>cn.lang.common.TestConfig</param-value>
    </init-param>
</filter>

javaweb三大组件之一的filter过滤器的生命周期方法init()是在服务器启动时被执行。

以下JFinalFilter类仅仅引入了核心代码

public class JFinalFilter implements Filter {
   

    public void init(FilterConfig filterConfig) throws ServletException {
   
		if (jfinalConfig == null) {
   
		    //<1> 反射得到jfinalConfig对象
			createJFinalConfig(filterConfig.getInitParameter("configClass"));
		}
		//<2> 整个初始化核心方法
		jfinal.init(jfinalConfig, filterConfig.getServletContext());
	    //<3> 拿到应用名称以及应用名长度
		String contextPath = filterConfig.getServletContext().getContextPath();
		contextPathLength = (contextPath == null || "/".equals(contextPath) ? 0 : contextPath.length());
		
		constants = Config.getConstants();
		encoding = constants.getEncoding();
		//<4> 启动后的jfinal后的回调
		jfinalConfig.onStart();
		//<5> 和4一样的作用 为兼容以前版本
		jfinalConfig.afterJFinalStart();
		//<6> 处理请求的对象
		handler = jfinal.getHandler();		// 开始接受请求
	}
}
  • <1> 获取到我们web.xml中配置的全类名
    cn.lang.common.TestConfig 再通过createJFinalConfig()方法反射得到TestConfig的实例对象jfinalConfig
  • <2> 整个初始化的核心方法,后续会展开讲
  • <3> 拿到应用名称以及应用名长度,后续路由映射controller中的方法需要排除掉url中的应用名影响
  • <4><5> 用户可重写配置类JFinalConfig中的onStart()方法, jfinal启动初始化完后在这里调用用户重写的onStart()方法
  • <6> 获取到初始化后的handler对象,挂载到JFinalFilter类全局变量上, 用于在doFilter()中调用处理后续的每个请求。
4.核心初始化类:JFinal

接上一步的<2> 执行jfinal对象的init()方法

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

public 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值