1. 介绍

JFinal是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。 在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!

JFinal采用微内核全方位扩展架构,全方位是指其扩展方式在空间上的表现形式。JFinal由Handler、Interceptor、Controller、Render、Plugin五大部分组成。

JFinal架构十分简单,顶层是一个责任链模式变种,ActionHandler 内部结构也十分简单,是一个Command模式变种。

        

  1. 优势

1、MVC架构,设计精巧,使用简单

2、遵循COC原则,零配置,无xml

3、独创Db + Record模式,灵活便利

4、ActiveRecord支持,使数据库开发极致快速

5、自动加载修改后的java文件,开发过程中无需重启web server

6、AOP支持,拦截器配置灵活,功能强大

7、Plugin体系结构,扩展性强

8、多视图支持,支持FreeMarker、JSP、Velocity

9、强大的Validator后端校验功能

10、功能齐全,拥有struts2的绝大部分功能

 

  1. 流程

从一次新增操作请求来看:

1. 首先是客户端点击新增按钮,提交一个新增请求,请求中会带上服务端处理地址url 2. 所有请求都会被JFinalFilter拦截,然后调用Handler进行详细处理

3.Handler是一个链条形式的调用,包括0-n个自定义Handler,以及最后一个

ActionHandler,依次执行,当然可以自定义跳出。

4. 进入ActionHandler后,首先会根据请求的target从缓存的ActionMapping中映射获取

到具体操作对应的Action对象,这个对象里面封装了方法名、方法上面的拦截器,方法所在的Controllercontroller上面的拦截器等。然后根据Action以及Controller实例构造出ActionInvocation

5. 接下来通过ActionInvocationinvoke进行具体处理,这是一个明显的Command模式

的实现。首先是拦截器的调用,拦截器调用中会重新回调ActionInvocationinvoke,当拦截器调用完毕后,会调用当前操作的method

6. 当进入具体controller的新增方法时,调用基类的getModel(Systemparam.class);这个

方法会从request中解析出所需要的数据,通过反射设置给具体的Model实体类,最终

通过ActiveRecord来进行数据存储 7. 最后是页面渲染rerender

 

  1. 开发配置过程

  1. 配置web.xml拦截器


jfinal
com.jfinal.core.JFinalFilter

configClass
com.tener.web.WebConfig



jfinal
/*

 2.实现configure配置方法(com.tener.web.WebConfig)

package com.tener.web;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.tener.web.service.HelloController;
public class WebConfig extends JFinalConfig {
 @Override
 public void configConstant(Constants arg0) {
  arg0.setDevMode(true);
  
 }
 @Override
 public void configHandler(Handlers arg0) {
  
 }
 @Override
 public void configInterceptor(Interceptors arg0) {
  
 }
 @Override
 public void configPlugin(Plugins arg0) {
  
 }
 @Override
 public void configRoute(Routes arg0) {
  arg0.add("/hello", HelloController.class);
 }
}

 

实现在routes中注册的controllerHelloController

package com.tener.web.service;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.jfinal.core.Controller;
public class HelloController extends Controller {
 public void index(){
  renderText("Hello " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
 }
}

至此,JFinal的介绍以及简单配置开发。


以上记录描述难免出现错误措辞,望各位勘正,谢谢。