JFinal快速入门-核心概念-002
JFinal快速入门-核心概念-002
目录
引言
JFinal 是一个基于 Java 的轻量级 Web 框架,其设计哲学强调简洁、高效和约定优于配置(COC)。本文档深入阐述 JFinal 的核心架构与设计原则,详细解析从框架初始化到请求处理的完整流程。
框架启动流程
JFinal 框架的启动始于 JFinalConfig
配置类,通过单例模式实现全局唯一实例管理。整个启动过程遵循严格的初始化顺序,确保各组件正确加载和配置。
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 |
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 参数传递
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 容器交互的核心组件。
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 配置自动编译功能。
JFinal极速开发平台系列:
JFinal快速入门-核心概念-002的更多相关文章
- Mycat入门核心概念
Mycat中的核心概念 Mycat中的核心概念 1.数据库中间件 Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有 存储引擎,所以并 ...
- Expression Blend实例中文教程(7) - 动画基础快速入门Animation
通过前面文章学习,已经对Blend的开发界面,以及控件有了初步的认识.本文将讲述Blend的一个核心功能,动画设计.大家也许注意到,从开篇到现在,所有的文章都是属于快速入门,是因为这些文章,都是我曾经 ...
- Spring系列22:Spring AOP 概念与快速入门篇
本文内容 Spring AOP含义和目标 AOP相关概念 声明式AOP快速入门 编程式创建代理对象 Spring AOP含义和目标 OOP: Object-oriented Programming 面 ...
- 快速入门系列--WCF--01基础概念
转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...
- Linux快速入门01-基础概念
4年多前,刚到上海时报过一个关于Oracle的培训班,在那里接触到了Linux,不过一直都没真正去试着使用它.现在经过慢慢的成长,越来越觉得,Linux是每一个服务端工程师必须掌握的系统,即使是现在最 ...
- Html与CSS快速入门01-基础概念
Web前端技术一直是自己的薄弱环节,经常为了调节一个简单的样式花费大量的时间.最近趁着在做前端部分的开发,果断把这部分知识成体系的恶补一下.内容相对都比较简单,很类似工具手册的学习,但目标是熟练掌握. ...
- JAVAEE——BOS物流项目13:Quartz入门案例、核心概念、cron 表达式的格式(了解)
1.quartz入门案例 本入门案例基于spring和quartz整合完成. 第一步:创建maven工程,导入spring和quartz相关依赖 第二步:创建任务类 第三步:在spring配置文件中配 ...
- JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP、IOC)
接上篇<JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构.调试.部署>,通过一个简单的JSP WEB网站了解了JAVA WEB相关的知识,比如:Ser ...
- lucene 核心概念及入门
lucene Lucene介绍及核心概念 什么是Lucene Lucene是一套用于全文检索和搜索的开放源代码程序库,由Apache软件基金会支持和提供.Lucene提供了一个简单却强大的应用程序接口 ...
- Spring框架的IOC核心功能快速入门
2. 步骤一:下载Spring框架的开发包 * 官网:http://spring.io/ * 下载地址:http://repo.springsource.org/libs-release-local/ ...
随机推荐
- 扩散模型(Diffusion Model)原理概述
一.核心思想 扩散模型(Diffusion Model)是一种生成模型,受热力学中扩散过程的启发,通过模拟数据从噪声中逐步去噪的过程来生成样本.其核心思想是渐进式地添加噪声(正向过程)和逐步去噪( ...
- 在线文件大小(bit,bytes,KB,MB,GB,TB)转换换算
https://www.bejson.com/convert/filesize/ 在线文件大小(bit,bytes,KB,MB,GB,TB)转换换算 在线文件大小转换,bit,bytes,KB,MB, ...
- linux 休眠
命令 操作 systemctl reboot 重启机器 systemctl poweroff 关机 systemctl suspend 挂起-睡眠-保存在內存 systemctl hibernate ...
- java 实现自定义框架
简介 实现LayoutManager 接口即可,只要实现5个接口杰克 分别是 void addLayoutComponent(String s, Component c); void removeLa ...
- Scrcpy Shortcuts
Actions can be performed on the scrcpy window using keyboard and mouse shortcuts. In the following l ...
- 存储数据库的传输效率提升-ETLCloud结合HBASE
一.大数据存储数据库--HBASE HBase,作为一个开源的分布式列存储数据库,基于Google的Bigtable设计而成,专为处理大规模结构化数据而优化.使用HBase打造大数据解决方案的好处主要 ...
- @DS注解的使用,动态数据源,事务 -九五小庞
有时,在一个项目中会用到多数据源,此时可以使用苞米豆的dynamic-datasource-spring-boot-starter:首先,引入jar包: <dependency> < ...
- Sysbench安装与使用
Sysbench安装与使用 Sysbench安装 curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/scri ...
- 锚框 anchor box
博客地址:https://www.cnblogs.com/zylyehuo/ 代码总览 代码解释 从头到尾用"快递站管理系统"的比喻方式,完整解释每一行代码的功能和意义. 1. 导 ...
- 敏捷测试如何应用 BDD(行为驱动开发)?
随着敏捷开发的普及,传统测试方法因响应速度慢.沟通成本高而逐渐暴露出局限.行为驱动开发(Behavior Driven Development,简称BDD)作为敏捷测试的重要实践,强调" ...