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号