JFinalConfig
democonfig(启动类)需要继承JFinalCongig这个类,用于对整个web项目进行配置,并在web.xml文件中指定configClass
JFinalConfig子类需要实现六个抽象方法
public class DemoConfig extends JFinalConfig {
public void configConstant(Constants me){} //常量配置
public void configRoutes(Routes me){} //路由配置
public void configEngine(Engine me){} //配置模版引擎
public void configPlugin(Plugin me){} //配置插件
public void configInterceptor(Interceptor me){} //配置全局拦截器
public void configHandler(Handler me){} //配置处理器
}
configConstant
个人理解就是一些项目必要的配置 开发模式 依赖注入 配置日志 等一些常用配置官方已经写好了:点击跳转configConstant常用配置
configRoute
配置路由的一些属性
me.add("/hello", HelloController.class);
比如:
public void configRoute(Routes me) {
// 添加路由
me.add("/hello", HelloController.class);
}
- 前面的参数为链接,后面是对应的controller
- 添加之后访问http://localhost/hello路径就能跳转到HelloController里的index方法
- 必须在HelloController里写index这个方法 不然报404错误
- 也可以在链接上加入你的方法名
比如:
//这是 HelloController 方法 如果不写index方法,写了个aaa方法
public class HelloController extends Controller {
public void aaa() {
renderText("我是最帅的那个男人.");
}
}
链接输入http://localhost:8080/hello 会出现以下情况
输入http://localhost:8080/hello/aaa 才能显示出来
Routes.setBaseViewPath(baseViewPath)
内部的所有 Controller 设置视图渲染时的基础路径
config部分:
routes.setBaseViewPath("/wozuishuai");
routes.add("/admin", AdminController.class,"admin");
controller部分
public class AdminController extends Controller{
public void index() {
render("A.html");
}
}
他会去找webapp/wozuishuai/hello/A.html 这个html
极简路由规则
路由拆分、模块化
具体参考官方文档:configRoute(…)
configEngine(…)
此方法用来配置Template Engine,以下是代码示例:
public void configEngine(Engine me) {
me.addSharedFunction("/view/common/layout.html");
me.addSharedFunction("/view/common/paginate.html");
me.addSharedFunction("/view/admin/common/layout.html");
}
注意
me.setToClassPathSourceFactory()、me.setBaseTemplatePath(…)、me.setDevMode(…) 这三个配置要放在最前面,因为后续的 me.addSharedFunction(…) 等配置对前面三个配置有依赖。
configPlugin(…)
此方法用来配置JFinal的Plugin,如下代码配置了Druid数据库连接池插件与ActiveRecord数据库访问插件。通过以下的配置,可以在应用中使用ActiveRecord非常方便地操作数据库。
public void configPlugin(Plugins me) {
DruidPlugin dp = new DruidPlugin(jdbcUrl, userName, password);
me.add(dp);
ActiveRecordPlugin arp = new ActiveRecordPlugin(dp);
arp.addMapping("user", User.class);
me.add(arp);
}
JFinal插件架构是其主要扩展方式之一,可以方便地创建插件并应用到项目中去。
configInterceptor(…)
配置全局拦截器
configInterceptor 方法用来配置全局拦截器,全局拦截器分为两类:控制层、业务层,以下是配置示例:
public void configInterceptor(Interceptors me) {
// 以下两行代码配置作用于控制层的全局拦截器
me.add(new AuthInterceptor());
me.addGlobalActionInterceptor(new AaaInterceptor());
// 以下一行代码配置业务层全局拦截器
me.addGlobalServiceInterceptor(new BbbInterceptor());
}
以上 me.add(…) 与 me.addGlobalActionInterceptor(…) 两个方法是完全等价的,都是配置拦截所有 Controller 中 action 方法的拦截器。而 me.addGlobalServiceInterceptor(…) 配置的拦截器将拦截业务层所有 public 方法。
configHandler(…)
此方法用来配置JFinal的Handler,如下代码配置了名为ResourceHandler的处理器,Handler可以接管所有web请求,并对应用拥有完全的控制权,可以很方便地实现更高层的功能性扩展。
public void configHandler(Handlers me) {
me.add(new ResourceHandler());
}
onStart()、onStop() 回调配置
系统回调 系统开启与结束之前会自动调用这两个方法 可以自己在里面写一些启动前或关闭之前做的一些操作
// 系统启动完成后回调
public void onStart() {
}
// 系统关闭之前回调
public void onStop() {
}
jfinal 3.6 版本之前这两个方法名为:afterJFinalStart() 与 beforeJFinalStop()。
PropKit 读取配置
PropKit工具类用来读取外部键值对配置文件,PropKit可以极度方便地在系统任意时空使用,配置文件的格式如下:
xml:
userName=james
email=no-reply@jfinal.com
devMode=true
取时:
PropKit.use("config.txt");
String userName = PropKit.get("userName");
String email = PropKit.get("email");
// Prop 配合用法
Prop p = PropKit.use("config.txt");
Boolean devMode = p.getBoolean("devMode");
- 第一个被加载的配置文件可以使用PorpKit.get(…)方法直接操作,非第一个被加载的配置文件则需要使用PropKit.use(…).get(…)来操作。
- PropKit 的使用并不限于在 YourJFinalConfig 中,可以在项目的任何地方使用。此外PropKit.use(…)方法在加载配置文件内容以后会将数据缓存在内存之中,可以通过PropKit.useless(…)将缓存的内容进行清除。