jFinal使用
1 jFinal入门
1.1 jFinal所需要的库文件
将 jfinal-xxx.jar 与jetty-server-8.1.8.jar 拷贝至项目 WEB-INF\lib 下即可。
注意:jetty-server-8.1.8.jar是开发时使用的运行环境,生产环境不需要此文件。
1.2 修改 web.xml
将如下内容添加至 web.xml
<filter> <filter-name>jfinal</filter-name> <filter-class>com.jfinal.core.JFinalFilter</filter-class> <init-param> <param-name>configClass</param-name> <param-value>demo.DemoConfig</param-value> </init-param> </filter> <filter-mapping> <filter-name>jfinal</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
1.3JFinal相关生成文件
BaseModel是用于被最终的 Model 继承的基类,所有的 getter、setter方法都将生成在此文 件内,这样就保障了最终 Model 的清爽与干净,BaseModel不需要人工维护,在数据库有任何 变化时重新生成一次即可。
MappingKit用于生成table 到 Model 的映射关系,并且会生成主键/复合主键的配置,也即 在 JFinal 2.1 中无需在 configPlugin(Plugins me)方法中书写任何样板式的映射代码。
DataDictionary 是指生成的数据字典,会生成数据表所有字段的名称、类型、长度、备注、是否主键等信息。
2.JfinalConfig
2.1 概述
基于 JFinal 的 web 项目需要创建一个继承自 JFinalConfig 类的子类,该类用于对整个 web
项目进行配置。
JFinalConfig 子类需要实现五个抽象方法,如下所示:
public class DemoConfigextends JFinalConfig { publicvoid configConstant(Constants me) {} public void configRoute(Routesme) {} publicvoid configPlugin(Plugins me) {} public void configInterceptor(Interceptors me) {} public void configHandler(Handlersme) {} }
2.2 configConstant(Constants me)
此方法用来配置 JFinal 常量值,如开发模式常量 devMode 的配置,默认视图类型 ViewType的配置,如下代码配置了 JFinal 运行在开发模式下且默认视图类型为 JSP:
public void configConstant(Constantsme) { me.setDevMode(true); me.setViewType(ViewType.JSP); }
在开发模式下,JFinal 会对每次请求输出报告,如输出本次请求的 Controller、Method 以 及请求所携带的参数。JFinal 支持 JSP、FreeMarker、Velocity 三种常用视图。
2.3 configRoute(Routes me)
此方法用来配置 JFinal 访问路由,如下代码配置了将”/hello”映射到 HelloController 这个控 制器 , 通 过 以 下 的 配 置 , http://localhost/hello 将 访 问 HelloController.index() 方法, 而 http://localhost/hello/methodName 将访问到 HelloController.methodName()方法。
public void configRoute(Routes me)
{ me.add("/hello", HelloController.class);
Routes 类主要有如下两个方法:
public Routes add(String controllerKey, Class<? extends Controller> controllerClass, String viewPath)
public Routes add(String controllerKey, Class<? extends Controller> controllerClass)
第一个参数 controllerKey 是指访问某个 Controller 所需要的一个字符串,该字符串唯一对 应一个 Controller,controllerKey 仅能定位到 Controller。第二个参数 controllerClass 是该 controllerKey 所对应到的 Controller。第三个参数 viewPath 是指该 Controller 返回的视图的相对 路径(该参数具体细节将在 Controller 相关章节中给出)。当 viewPath 未指定时默认值为 controllerKey。
JFinal 路由规则如下表:
url 组成 |
访问目标 |
controllerKey |
YourController.index() |
controllerKey/method |
YourController.method() |
controllerKey/method/v0-v1 |
YourController.method(),所带 url 参数值为:v0-v1 |
controllerKey/v0-v1 |
YourController.index(),所带 url 参数值为:v0-v1 |
2.4 configPlugin (Plugins me)
此方法用来配置 JFinal 的 Plugin,如下代码配置了 C3p0 数据库连接池插件与 ActiveRecord数据库访问插件。通过以下的配置,可以在应用中使用 ActiveRecord 非常方便地操作数据库。
public void configPlugin(Pluginsme) { loadPropertyFile("your_app_config.txt"); C3p0Plugin c3p0Plugin = new C3p0Plugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password")); me.add(c3p0Plugin); ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin);me.add(arp); arp.addMapping("user",User.class);
2.5 configInterceptor (Interceptors me)
此方法用来配置 JFinal 的全局拦截器,全局拦截器将拦截所有 action 请求,除非使用@Clear 在 Controller 中清除,如下代码配置了名为 AuthInterceptor 的拦截器。
public void configInterceptor(Interceptorsme) { me.add(newAuthInterceptor()); }
2.6 configHandler (Handlers me)
此方法用来配置 JFinal 的 Handler,如下代码配置了名为 ResourceHandler 的处理器,Handler 可以接管所有 web 请求,并对应用拥有完全的控制权,可以很方便地实现更高层的功能性扩 展。
public void configHandler(Handlers me) { me.add(new ResourceHandler()); }