JFinal快速入門-核心概念-002
JFinal快速入門-核心概念-002
目錄
引言
JFinal 是一個基于 Java 的輕量級 Web 框架,其設計哲學強調簡潔、高效和約定優于配置(COC)。本文檔深入闡述 JFinal 的核心架構與設計原則,詳細解析從框架初始化到請求處理的完整流程。
框架啟動流程
JFinal 框架的啟動始于 JFinalConfig 配置類,通過單例模式實現全局唯一實例管理。整個啟動過程遵循嚴格的初始化順序,確保各組件正確加載和配置。
sequenceDiagram
participant App as 應用程序
participant Filter as JFinalFilter
participant JFinal as JFinal
participant Config as JFinalConfig
App->>Filter : init(FilterConfig)
Filter->>JFinal : init(JFinalConfig, ServletContext)
JFinal->>Config : configConstant(Constants)
JFinal->>Config : configRoute(Routes)
JFinal->>Config : configPlugin(Plugins)
JFinal->>Config : configEngine(Engine)
JFinal->>Config : configInterceptor(Interceptors)
JFinal->>Config : configHandler(Handlers)
JFinal->>JFinal : initActionMapping()
JFinal->>JFinal : initHandler()
JFinal->>JFinal : initRender()
JFinal->>Config : onStart()
Filter->>JFinal : getHandler()
Note over Filter,JFinal : 框架初始化完成,開始接受請求
核心配置機制
JFinal 采用 Constants 全局配置對象統一管理所有運行時參數,實現了零 XML 配置的設計目標。開發者通過繼承 JFinalConfig 抽象類,在 configConstant 方法中設置這些常量值。
常用配置項
| 配置項 | 描述 | 默認值 |
|---|---|---|
| devMode | 開發模式開關,影響日志輸出和模板更新策略 | false |
| encoding | 請求與響應的字符編碼 | UTF-8 |
| maxPostSize | HTTP POST 請求最大尺寸 | 無限制 |
| viewType | 默認視圖類型(如 FreeMarker、JSP) | JFINAL_TEMPLATE |
| baseUploadPath | 文件上傳基礎路徑 | webapp/upload |
classDiagram
class Constants {
+boolean devMode
+String encoding
+long maxPostSize
+ViewType viewType
+String baseUploadPath
+setDevMode(boolean)
+getDevMode() boolean
+setEncoding(String)
+getEncoding() String
+setMaxPostSize(long)
+getMaxPostSize() long
+setViewType(ViewType)
+getViewType() ViewType
+setBaseUploadPath(String)
+getBaseUploadPath() String
}
class JFinalConfig {
+configConstant(Constants)
+configRoute(Routes)
+configPlugin(Plugins)
+configEngine(Engine)
+configInterceptor(Interceptors)
+configHandler(Handlers)
+onStart()
+onStop()
}
JFinalConfig --> Constants : "配置"
Section sources
URL請求映射
ActionMapping 組件負責將 HTTP 請求 URL 映射到具體的 Controller 和 Action 方法。該過程在框架啟動時完成,通過掃描路由配置和控制器類的方法注解建立映射關系。
映射規則
- 默認映射:當方法名為
index時,使用控制器路徑作為 actionKey - 命名約定:普通方法名直接作為 actionKey 的一部分
- 注解覆蓋:使用
@ActionKey注解可自定義 actionKey - 路徑參數:支持
/controller/method/para形式的 URL 參數傳遞
flowchart TD
Start([開始]) --> ScanControllers["掃描所有Controller類"]
ScanControllers --> FindMethods["查找公共方法"]
FindMethods --> CheckAnnotation{"是否有@ActionKey注解?"}
CheckAnnotation --> |是| UseCustomKey["使用注解指定的actionKey"]
CheckAnnotation --> |否| CheckMethodName{"方法名是否為index?"}
CheckMethodName --> |是| UseControllerPath["使用控制器路徑"]
CheckMethodName --> |否| BuildDefaultKey["構建默認actionKey<br/>controllerPath/methodName"]
UseCustomKey --> ValidateKey["驗證actionKey有效性"]
UseControllerPath --> ValidateKey
BuildDefaultKey --> ValidateKey
ValidateKey --> RegisterMapping["注冊到mapping映射表"]
RegisterMapping --> End([結束])
style Start fill:#f9f,stroke:#333
style End fill:#f9f,stroke:#333
Section sources
請求處理生命周期
JFinalFilter 作為 Servlet 過濾器集成到容器中,攔截所有請求并交由內部處理器鏈進行處理。這是 JFinal 與 Servlet 容器交互的核心組件。
sequenceDiagram
participant Client as 客戶端
participant Filter as JFinalFilter
participant Handler as ActionHandler
participant Action as Action
participant Controller as Controller
Client->>Filter : 發送HTTP請求
Filter->>Filter : 設置字符編碼
Filter->>Filter : 截取上下文路徑
Filter->>Handler : 調用handle方法
Handler->>ActionMapping : 獲取Action對象
ActionMapping-->>Handler : 返回Action
Handler->>Controller : 創建Controller實例
Controller->>Controller : 初始化請求上下文
Controller->>Controller : 執行業務邏輯
Controller->>Handler : 返回Render對象
Handler->>Handler : 渲染視圖
Handler-->>Filter : 處理完成
Filter->>Client : 返回響應
alt 請求未被處理
Filter->>Filter : 檢查是否為JSP訪問
Filter->>Filter : 拒絕直接訪問JSP
Filter->>Servlet : 繼續過濾器鏈
end
**Section sources **
自動熱加載機制
JFinal-Undertow在開發模式下支持類文件的自動熱加載,極大提升了開發效率。
此機制要求 IDE 配置自動編譯功能。
浙公網安備 33010602011771號