介紹
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的介紹以及簡單配置開發。
以上記錄描述難免出現錯誤措辭,望各位勘正,謝謝。