WEB開發技術框架利器之一 -- JFinal使用筆記

 

  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攔截器

<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中註冊的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的介紹以及簡單配置開發。


以上記錄描述難免出現錯誤措辭,望各位勘正,謝謝。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章