JFinal快速入门-核心概念-002
目录
- 引言
- 框架启动流程
- 核心配置机制
- URL请求映射
- 请求处理生命周期
- 自动热加载机制
引言
JFinal 是一个基于 Java 的轻量级 Web 框架,其设计哲学强调简洁、高效和约定优于配置(COC)。本文档深入阐述 JFinal 的核心架构与设计原则,详细解析从框架初始化到请求处理的完整流程。
框架启动流程
JFinal 框架的启动始于 JFinalConfig 配置类,通过单例模式实现全局唯一实例管理。整个启动过程遵循严格的初始化顺序,确保各组件正确加载和配置。
sequenceDiagramparticipant App as 应用程序participant Filter as JFinalFilterparticipant JFinal as JFinalparticipant Config as JFinalConfigApp->>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开发模式开关,影响日志输出和模板更新策略falseencoding请求与响应的字符编码UTF-8maxPostSizeHTTP POST 请求最大尺寸无限制viewType默认视图类型(如 FreeMarker、JSP)JFINAL_TEMPLATEbaseUploadPath文件上传基础路径webapp/uploadclassDiagramclass 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
- Constants.java
- JFinalConfig.java
URL请求映射
ActionMapping 组件负责将 HTTP 请求 URL 映射到具体的 Controller 和 Action 方法。该过程在框架启动时完成,通过扫描路由配置和控制器类的方法注解建立映射关系。
映射规则
- 默认映射:当方法名为 index 时,使用控制器路径作为 actionKey
- 命名约定:普通方法名直接作为 actionKey 的一部分
- 注解覆盖:使用 @ActionKey 注解可自定义 actionKey
- 路径参数:支持 /controller/method/para 形式的 URL 参数传递
flowchart TDStart([开始]) --> ScanControllers["扫描所有Controller类"]ScanControllers --> FindMethods["查找公共方法"]FindMethods --> CheckAnnotation{"是否有@ActionKey注解?"}CheckAnnotation --> |是| UseCustomKey["使用注解指定的actionKey"]CheckAnnotation --> |否| CheckMethodName{"方法名是否为index?"}CheckMethodName --> |是| UseControllerPath["使用控制器路径"]CheckMethodName --> |否| BuildDefaultKey["构建默认actionKey
controllerPath/methodName"]UseCustomKey --> ValidateKey["验证actionKey有效性"]UseControllerPath --> ValidateKeyBuildDefaultKey --> ValidateKeyValidateKey --> RegisterMapping["注册到mapping映射表"]RegisterMapping --> End([结束])style Start fill:#f9f,stroke:#333style End fill:#f9f,stroke:#333Section sources
请求处理生命周期
JFinalFilter 作为 Servlet 过滤器集成到容器中,拦截所有请求并交由内部处理器链进行处理。这是 JFinal 与 Servlet 容器交互的核心组件。
sequenceDiagramparticipant Client as 客户端participant Filter as JFinalFilterparticipant Handler as ActionHandlerparticipant Action as Actionparticipant Controller as ControllerClient->>Filter : 发送HTTP请求Filter->>Filter : 设置字符编码Filter->>Filter : 截取上下文路径Filter->>Handler : 调用handle方法Handler->>ActionMapping : 获取Action对象ActionMapping-->>Handler : 返回ActionHandler->>Controller : 创建Controller实例Controller->>Controller : 初始化请求上下文Controller->>Controller : 执行业务逻辑Controller->>Handler : 返回Render对象Handler->>Handler : 渲染视图Handler-->>Filter : 处理完成Filter->>Client : 返回响应alt 请求未被处理Filter->>Filter : 检查是否为JSP访问Filter->>Filter : 拒绝直接访问JSPFilter->>Servlet : 继续过滤器链end**Section sources **
- JFinalFilter.java
- ActionHandler.java
自动热加载机制
JFinal-Undertow在开发模式下支持类文件的自动热加载,极大提升了开发效率。
https://jfinal.com/doc/1-5
此机制要求 IDE 配置自动编译功能。
JFinal极速开发平台系列:
- JBolt极速开发平台(全栈版)
- JBolt极速开发平台(分离版-VUE)
- JBoltAI-Java AI应用开发平台
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |