介绍
JFinal是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。 在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!
JFinal采用微内核全方位扩展架构,全方位是指其扩展方式在空间上的表现形式。JFinal由Handler、Interceptor、Controller、Render、Plugin五大部分组成。
JFinal架构十分简单,顶层是一个责任链模式变种,ActionHandler 内部结构也十分简单,是一个Command模式变种。
优势
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. 首先是客户端点击新增按钮,提交一个新增请求,请求中会带上服务端处理地址url 2. 所有请求都会被JFinalFilter拦截,然后调用Handler进行详细处理
3.Handler是一个链条形式的调用,包括0-n个自定义Handler,以及最后一个
ActionHandler,依次执行,当然可以自定义跳出。
4. 进入ActionHandler后,首先会根据请求的target从缓存的ActionMapping中映射获取
到具体操作对应的Action对象,这个对象里面封装了方法名、方法上面的拦截器,方法所在的Controller,controller上面的拦截器等。然后根据Action以及Controller实例构造出ActionInvocation。
5. 接下来通过ActionInvocation的invoke进行具体处理,这是一个明显的Command模式
的实现。首先是拦截器的调用,拦截器调用中会重新回调ActionInvocation的invoke,当拦截器调用完毕后,会调用当前操作的method
6. 当进入具体controller的新增方法时,调用基类的getModel(Systemparam.class);这个
方法会从request中解析出所需要的数据,通过反射设置给具体的Model实体类,最终
通过ActiveRecord来进行数据存储 7. 最后是页面渲染rerender
开发配置过程
配置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>com.tener.web.WebConfig</param-value> </init-param> </filter> <filter-mapping> <filter-name>jfinal</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
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中注册的controller(HelloController)
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的介绍以及简单配置开发。
以上记录描述难免出现错误措辞,望各位勘正,谢谢。