static void configJFinal(JFinalConfig jfinalConfig) { jfinalConfig.configConstant(constants); initLoggerFactory(); jfinalConfig.configRoute(routes); jfinalConfig.configPlugin(plugins); startPlugins(); // very important!!! jfinalConfig.configInterceptor(interceptors); jfinalConfig.configHandler(handlers); }2. jfinalConfig.configConstant(constants);这句话就会调用我们的配置信息
/** * 配置常量 */ public void configConstant(Constants me) { // 加载少量必要配置,随后可用getProperty(...)获取值 loadPropertyFile("a_little_config.txt"); me.setDevMode(getPropertyToBoolean("devMode", false)); }
3. 这句话的第一句代码loadPropertyFile("a_little_config.txt"); 会调用如下代码
/** * Load property file * Example: loadPropertyFile("db_username_pass.txt"); * @param file the file in WEB-INF directory */ public Properties loadPropertyFile(String file) { if (StringKit.isBlank(file)) throw new IllegalArgumentException("Parameter of file can not be blank"); if (file.contains("..")) throw new IllegalArgumentException("Parameter of file can not contains \"..\""); InputStream inputStream = null; String fullFile; // String fullFile = PathUtil.getWebRootPath() + file; if (file.startsWith(File.separator)) fullFile = PathKit.getWebRootPath() + File.separator + "WEB-INF" + file; else fullFile = PathKit.getWebRootPath() + File.separator + "WEB-INF" + File.separator + file; try { inputStream = new FileInputStream(new File(fullFile)); Properties p = new Properties(); p.load(inputStream); properties = p; } catch (FileNotFoundException e) { throw new IllegalArgumentException("Properties file not found: " + fullFile); } catch (IOException e) { throw new IllegalArgumentException("Properties file can not be loading: " + fullFile); } finally { try {if (inputStream != null) inputStream.close();} catch (IOException e) {e.printStackTrace();} } if (properties == null) throw new RuntimeException("Properties file loading failed: " + fullFile); return properties; }3.从上面代码可以看出该配置文件a_little_config.txt一定要放在 WEB-INF文件下面
public Boolean getPropertyToBoolean(String key) { checkPropertyLoading(); String resultStr = properties.getProperty(key); Boolean resultBool = null; if (resultStr != null) { if (resultStr.trim().equalsIgnoreCase("true")) resultBool = true; else if (resultStr.trim().equalsIgnoreCase("false")) resultBool = false; } return resultBool; } public Boolean getPropertyToBoolean(String key, boolean defaultValue) { Boolean result = getPropertyToBoolean(key); return result != null ? result : defaultValue; }4.initLoggerFactory();就是初始化logger,运用了工厂模式,有JdkLogger和Loger4jLogger,比较简单,大家有空可以好好学习
5.jfinalConfig.configRoute(routes);就是调用我们
/** * 配置路由 */ public void configRoute(Routes me) { me.add("/", CommonController.class); me.add("/blog", BlogController.class); }6.me.add会调用如下代码
private final Map<String, Class<? extends Controller>> map = new HashMap<String, Class<? extends Controller>>(); private final Map<String, String> viewPathMap = new HashMap<String, String>(); /** * Add url mapping to controller. The view path is controllerKey * @param controllerkey A key can find controller * @param controllerClass Controller Class */ public Routes add(String controllerkey, Class<? extends Controller> controllerClass) { return add(controllerkey, controllerClass, controllerkey); } /** * Add route * @param controllerKey A key can find controller * @param controllerClass Controller Class * @param viewPath View path for this Controller */ public Routes add(String controllerKey, Class<? extends Controller> controllerClass, String viewPath) { if (controllerKey == null) throw new IllegalArgumentException("The controllerKey can not be null"); // if (controllerKey.indexOf(".") != -1) // throw new IllegalArgumentException("The controllerKey can not contain dot character: \".\""); controllerKey = controllerKey.trim(); if ("".equals(controllerKey)) throw new IllegalArgumentException("The controllerKey can not be blank"); if (controllerClass == null) throw new IllegalArgumentException("The controllerClass can not be null"); if (map.containsKey(controllerKey)) throw new IllegalArgumentException("The controllerKey already exists"); if (!controllerKey.startsWith("/")) controllerKey = "/" + controllerKey; map.put(controllerKey, controllerClass); if (viewPath == null || "".equals(viewPath.trim())) // view path is controllerKey by default viewPath = controllerKey; viewPath = viewPath.trim(); if (!viewPath.startsWith("/")) // "/" added to prefix viewPath = "/" + viewPath; if (!viewPath.endsWith("/")) // "/" added to postfix viewPath = viewPath + "/"; if (baseViewPath != null) // support baseViewPath viewPath = baseViewPath + viewPath; viewPathMap.put(controllerKey, viewPath); return this; }