JFinal框架是一个轻量级快速开发框架,几乎没有XML配置文件,对于初学框架的学习者有很好的指导作用,至少对于我来说学习JFinal收益良多。
至于更多的JFinal配置说明和部署很简单就是一句话:
下载完安装包,导入工程,找到JFinalConFig类,启动即可。
JFianl内置了启动tomcat的方法,只要部署好工程文件就可以随意的玩耍。
JFianl的框架文件配置几乎是API的配置方式,符合快速,轻量级开发项目的基本要求。
JFinalConfig子类需要实现五种抽象方法
方法一:配置常量
此方法用来配置配置Jfianl的开发模式devModle,视图ViewType的设置。在开发模式下, JFinal 会对每次请求输出报告,如输出本次请求的 Controller、 Method 以及请求所携带的参数。 JFinal 支持 JSP、 FreeMarker、 Velocity 三种常用视图。这里的常量的配置相对于Spring,SSH和Spring+hibernate等框架配置中,几乎没有相对应的繁琐的XML文件的配置,在这个方法中提供了相应的API文件,来获取相关配置文件,例如:
PropKit.use("a_little_config.txt");//获取数据库信息
PropKit.use("log4j.properties");//获取log4j的配置文件
me.setDevMode(PropKit.getBoolean("devMode", false));//设置devMode
例如在Spring框架中需要在src中配置applicationContext.xml,在xml中配置相应的javaBean,然后创建容器 ClassPathXmlApplicationContext(xml文件),再然后在相应的方法中通过getBean()方法获取相应的对象。
方法二:配置路由
这个方法用来配置JFianl访问路由,这个也是完全有别于传统的路由的配置,并且在JFianl提供了两种方法:
public Routesadd(String controllerKey, Class<? extends Controller>controllerClass, String viewPath)
public Routesadd(String controllerKey, Class<? extends Controller>controllerClass)
其中第一个参数 controllerKey 是指访问某个Controller 所需要的一个字符串,该字符串唯一对
应一个 Controller, controllerKey 仅能定位到Controller。 第二个参数 controllerClass 是该 controllerKey 所对应到的Controller。第三个参数 viewPath 是指该 Controller 返回的视图的相对路径(该参数具体细节将在Controller 相关章节中给出)。 当 viewPath 未指定时默认值为controllerKey。
如:
// 第三个参数为该Controller的视图存放路径
me.add("/",IndexController.class, "/index");//代码通过IndexControler这个控制器,通过http://localhost/访问到IndexControler.index()方法,实现首页的加载动作;在传统的spring则通过注解的方式来访问相应的方法。并且在JFianl中也兼容了注解方法。
// 第三个参数省略时默认与第一个参数值相同
me.add("/student",StudentController.class);
me.add("/teacher",TeacherController.class);
一般在实际的生产中,特别是大型项目中,分成前段路由和后端路由,JFianl的路由可以拆分,继承路由Routes即可,最后在configRutes()方法中整合即可。
方法三:配置插件
这个方法主要是配置JFinal的插件Plugin,一般主要是配置相关的数据库连接插件;如:
// 配置C3p0数据库连接池插件
C3p0Plugin c3p0Plugin = newC3p0Plugin(PropKit.get("jdbcUrl"),PropKit.get("user"), PropKit.get("password").trim());
me.add(c3p0Plugin);
// 配置ActiveRecord插件
ActiveRecordPlugin arp = newActiveRecordPlugin(c3p0Plugin);
me.add(arp);
//映射实体 表到实体模型
arp.addMapping("student",Student.class);
arp.addMapping("teacher",Teacher.class);
注意:根据JFinal的架构特点,可以随意的扩展,可以方便的创建插件并引用到项目中。
方法四:配置全局拦截器
此方法用用来配置JFinal的全局拦截器,拦截所有的action请求,除非使用@Clear在Controller中清楚,否则一直有效。JFinal的拦截器Interceptor非常像Struts2,使用很方便,其颗粒度划分为全局拦截,类拦截,方法拦截。
方法五:配置处理器
此方法用来配置 JFinal的Handler,如下代码配置了名为 ResourceHandler的处理器,Handler可以接管所有 web 请求,并对应用拥有完全的控制权,可以很方便地实现更高层的功能性扩展。/**
* API引导式配置
*/
public class DemoConfig extends JFinalConfig {
/**
* 配置常量
*/
public void configConstant(Constants me) {
// 加载少量必要配置,随后可用PropKit.get(...)获取值
PropKit.use("a_little_config.txt");
PropKit.use("log4j.properties");
me.setDevMode(PropKit.getBoolean("devMode", false));
}
/**
* 配置路由
*/
public void configRoute(Routes me) {
// 第三个参数为该Controller的视图存放路径
me.add("/", IndexController.class, "/index");
// 第三个参数省略时默认与第一个参数值相同
me.add("/student", StudentController.class);
me.add("/teacher", TeacherController.class);
}
/**
* 配置插件
*/
public void configPlugin(Plugins me) {
// 配置C3p0数据库连接池插件
C3p0Plugin c3p0Plugin = new C3p0Plugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
me.add(c3p0Plugin);
// 配置ActiveRecord插件
ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin);
me.add(arp);
//映射实体 表到 实体模型
arp.addMapping("student", Student.class);
arp.addMapping("teacher", Teacher.class);
}
/**
* 配置全局拦截器
*/
public void configInterceptor(Interceptors me) {
}
/**
* 配置处理器
*/
public void configHandler(Handlers me) {
}
/**
* 建议使用 JFinal 手册推荐的方式启动项目
* 运行此 main 方法可以启动项目,此main方法可以放置在任意的Class类定义中,不一定要放于此
*/
public static void main(String[] args) {
JFinal.start("WebRoot", 8080, "/", 5);
}
}
JFianl中的常用的三个方法
afterJFinalStart()与 beforeJFinalStop()—目前还没有在实际学习中遇到,解释说明来自JFianl说明文档。
JFinalConfig中的 afterJFinalStart()与beforeJFinalStop()方法供开发者在JFinalConfig继承类中覆盖。 JFinal 会在系统启动完成后回调 afterJFinalStart()方法,会在系统关闭前回 调 beforeJFinalStop()方法。这两个方法可以很方便地在项目启动后与关闭前让开发者有机会进行额外操作,如在系统启动后创建调度线程或在系统关闭前写回缓存。
PropKit
Propkit工具类是在JFinal中比较常用的一个操作外部配置文件的工具类,可以在系统的任意时空使用。
PropKit 可同时加载多个配置文件,第一个被加载的配置文件可以使用 PorpKit.get(…)方法直接操作,非第一个被加载的配置文件则需要使用 PropKit.use(…).get(…)来操作。 PropKit 的使用并不限于在YourJFinalConfig 中,可以在项目的任何地方使用, JFinalConfig 的 getProperty 方法其底层依赖于PropKit 实现。
如下代码:
public voidconfigConstant(Constants me) {
// 加载少量必要配置,随后可用PropKit.get(...)获取值,第一次使用use加载的配置将成为主配置,可以通过PropKit.get(...)直接取值
PropKit.use("a_little_config.txt");
PropKit.use("log4j.properties");
me.setDevMode(PropKit.getBoolean("devMode", false));
}
public voidconfigPlugin(Plugins me) {
// 非第一次使用use加载的配置,需要通过每次使用use来指定配置文件名再来取值
// 配置C3p0数据库连接池插件
C3p0Pluginc3p0Plugin = newC3p0Plugin(PropKit.get("jdbcUrl"),PropKit.get("user"), PropKit.get("password").trim());
me.add(c3p0Plugin);
// 配置ActiveRecord插件
ActiveRecordPluginarp = newActiveRecordPlugin(c3p0Plugin);
me.add(arp);
//映射实体 表到实体模型
arp.addMapping("student",Student.class);
arp.addMapping("teacher",Teacher.class);
}