博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JFinal 源码导读第一天(JFinalFilter init)
阅读量:6454 次
发布时间:2019-06-23

本文共 3110 字,大约阅读时间需要 10 分钟。

  hot3.png

  1.读源码当然从入口开始读 web.xml,非常简单一个filter

jfinal
com.jfinal.core.JFinalFilter
configClass
com.demo.common.DemoConfig
jfinal
/*
  2.JFinalFilter的init初始化
public void init(FilterConfig filterConfig) throws ServletException {		createJFinalConfig(filterConfig.getInitParameter("configClass"));				if (jfinal.init(jfinalConfig, filterConfig.getServletContext()) == false)			throw new RuntimeException("JFinal init error!");				handler = jfinal.getHandler();		constants = Config.getConstants();		encoding = constants.getEncoding();		jfinalConfig.afterJFinalStart();				String contextPath = filterConfig.getServletContext().getContextPath();		contextPathLength = (contextPath == null || "/".equals(contextPath) ? 0 : contextPath.length());	}

   3.createJFinalConfig,就是实例化上面的param-value中的值

private void createJFinalConfig(String configClass) {		if (configClass == null)			throw new RuntimeException("Please set configClass parameter of JFinalFilter in web.xml");				try {			Object temp = Class.forName(configClass).newInstance();			if (temp instanceof JFinalConfig)				jfinalConfig = (JFinalConfig)temp;			else				throw new RuntimeException("Can not create instance of class: " + configClass + ". Please check the config in web.xml");		} catch (InstantiationException e) {			throw new RuntimeException("Can not create instance of class: " + configClass, e);		} catch (IllegalAccessException e) {			throw new RuntimeException("Can not create instance of class: " + configClass, e);		} catch (ClassNotFoundException e) {			throw new RuntimeException("Class not found: " + configClass + ". Please config it in web.xml", e);		}	}

  4.jfinal.init才是代码初始化的关键

boolean init(JFinalConfig jfinalConfig, ServletContext servletContext) {		this.servletContext = servletContext;		this.contextPath = servletContext.getContextPath();				initPathUtil();				Config.configJFinal(jfinalConfig);	// start plugin and init logger factory in this method		constants = Config.getConstants();				initActionMapping();		initHandler();		initRender();		initActiveRecord();		initOreillyCos();		initI18n();		initTokenManager();				return true;	}
 5.initPathUtil()代码很简单,自己调试进去就知道,没什么好说
private void initPathUtil() {		String path = servletContext.getRealPath("/");		PathKit.setWebRootPath(path);	}
public static void setWebRootPath(String webRootPath) {		if (webRootPath == null)			return ;				if (webRootPath.endsWith(File.separator))			webRootPath = webRootPath.substring(0, webRootPath.length() - 1);		PathKit.webRootPath = webRootPath;	}

6.Config.configJFinal(jfinalConfig);

jfinalConfig.configConstant(constants);				initLoggerFactory();		jfinalConfig.configRoute(routes);		jfinalConfig.configPlugin(plugins);					startPlugins();	// very important!!!		jfinalConfig.configInterceptor(interceptors);		jfinalConfig.configHandler(handlers);
7.我这里就看一个方法initLoggerFactory
private static void initLoggerFactory() {		Logger.init();		log = Logger.getLogger(Config.class);		JFinalFilter.initLogger();	}

转载于:https://my.oschina.net/skyim/blog/137861

你可能感兴趣的文章
小儿外感输液后遗留咳嗽案
查看>>
Repeater控件添加onmouseover和onmouseout事件
查看>>
ASP.NET开发,从二层至三层,至面向对象 (3)
查看>>
JQuery中$.ajax()方法参数详解
查看>>
急性乳腺炎乳汁不止案
查看>>
图像处理之基础---卷积,滤波,平滑
查看>>
【Java】Java XML 技术专题
查看>>
Centos yum安装java jdk1.8
查看>>
Python 模块的一般处理
查看>>
一个简单的旋转控制器与固定屏幕位置
查看>>
c# 获取excel所有工作表
查看>>
50个查询系列-建表和插入数据
查看>>
5935 小球
查看>>
【IDEA&&Eclipse】1、为何 IntelliJ IDEA 比 Eclipse 更适合于专业java开发者
查看>>
hdu 1999 不可摸数 筛选素数 两次打表
查看>>
RabbitMQ系列教程之三:发布/订阅(Publish/Subscribe)
查看>>
css中span元素的width属性无效果原因及多种解决方案
查看>>
(原創) C語言初學者建議的書籍 (C/C++) (C)
查看>>
设置信号传送闹钟
查看>>
POJ 1743 Musical Theme (后缀数组,求最长不重叠重复子串)
查看>>