JFinal快速入门-核心概念-002

目录

  1. 引言
  2. 框架启动流程
  3. 核心配置机制
  4. URL请求映射
  5. 请求处理生命周期
  6. 自动热加载机制

引言

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 方法。该过程在框架启动时完成,通过扫描路由配置和控制器类的方法注解建立映射关系。

映射规则

  1. 默认映射:当方法名为 index 时,使用控制器路径作为 actionKey
  2. 命名约定:普通方法名直接作为 actionKey 的一部分
  3. 注解覆盖:使用 @ActionKey 注解可自定义 actionKey
  4. 路径参数:支持 /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在开发模式下支持类文件的自动热加载,极大提升了开发效率。

https://jfinal.com/doc/1-5

此机制要求 IDE 配置自动编译功能。


JFinal极速开发平台系列:

JFinal快速入门-核心概念-002的更多相关文章

  1. Mycat入门核心概念

      Mycat中的核心概念     Mycat中的核心概念 1.数据库中间件    Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有 存储引擎,所以并 ...

  2. Expression Blend实例中文教程(7) - 动画基础快速入门Animation

    通过前面文章学习,已经对Blend的开发界面,以及控件有了初步的认识.本文将讲述Blend的一个核心功能,动画设计.大家也许注意到,从开篇到现在,所有的文章都是属于快速入门,是因为这些文章,都是我曾经 ...

  3. Spring系列22:Spring AOP 概念与快速入门篇

    本文内容 Spring AOP含义和目标 AOP相关概念 声明式AOP快速入门 编程式创建代理对象 Spring AOP含义和目标 OOP: Object-oriented Programming 面 ...

  4. 快速入门系列--WCF--01基础概念

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

  5. Linux快速入门01-基础概念

    4年多前,刚到上海时报过一个关于Oracle的培训班,在那里接触到了Linux,不过一直都没真正去试着使用它.现在经过慢慢的成长,越来越觉得,Linux是每一个服务端工程师必须掌握的系统,即使是现在最 ...

  6. Html与CSS快速入门01-基础概念

    Web前端技术一直是自己的薄弱环节,经常为了调节一个简单的样式花费大量的时间.最近趁着在做前端部分的开发,果断把这部分知识成体系的恶补一下.内容相对都比较简单,很类似工具手册的学习,但目标是熟练掌握. ...

  7. JAVAEE——BOS物流项目13:Quartz入门案例、核心概念、cron 表达式的格式(了解)

    1.quartz入门案例 本入门案例基于spring和quartz整合完成. 第一步:创建maven工程,导入spring和quartz相关依赖 第二步:创建任务类 第三步:在spring配置文件中配 ...

  8. JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP、IOC)

    接上篇<JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构.调试.部署>,通过一个简单的JSP WEB网站了解了JAVA WEB相关的知识,比如:Ser ...

  9. lucene 核心概念及入门

    lucene Lucene介绍及核心概念 什么是Lucene Lucene是一套用于全文检索和搜索的开放源代码程序库,由Apache软件基金会支持和提供.Lucene提供了一个简单却强大的应用程序接口 ...

  10. Spring框架的IOC核心功能快速入门

    2. 步骤一:下载Spring框架的开发包 * 官网:http://spring.io/ * 下载地址:http://repo.springsource.org/libs-release-local/ ...

随机推荐

  1. 扩散模型(Diffusion Model)原理概述

    一.核心思想   扩散模型(Diffusion Model)是一种生成模型,受热力学中扩散过程的启发,通过模拟数据从噪声中逐步去噪的过程来生成样本.其核心思想是渐进式地添加噪声(正向过程)和逐步去噪( ...

  2. 在线文件大小(bit,bytes,KB,MB,GB,TB)转换换算

    https://www.bejson.com/convert/filesize/ 在线文件大小(bit,bytes,KB,MB,GB,TB)转换换算 在线文件大小转换,bit,bytes,KB,MB, ...

  3. linux 休眠

    命令 操作 systemctl reboot 重启机器 systemctl poweroff 关机 systemctl suspend 挂起-睡眠-保存在內存 systemctl hibernate ...

  4. java 实现自定义框架

    简介 实现LayoutManager 接口即可,只要实现5个接口杰克 分别是 void addLayoutComponent(String s, Component c); void removeLa ...

  5. Scrcpy Shortcuts

    Actions can be performed on the scrcpy window using keyboard and mouse shortcuts. In the following l ...

  6. 存储数据库的传输效率提升-ETLCloud结合HBASE

    一.大数据存储数据库--HBASE HBase,作为一个开源的分布式列存储数据库,基于Google的Bigtable设计而成,专为处理大规模结构化数据而优化.使用HBase打造大数据解决方案的好处主要 ...

  7. @DS注解的使用,动态数据源,事务 -九五小庞

    有时,在一个项目中会用到多数据源,此时可以使用苞米豆的dynamic-datasource-spring-boot-starter:首先,引入jar包: <dependency> < ...

  8. Sysbench安装与使用

    Sysbench安装与使用 Sysbench安装 curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/scri ...

  9. 锚框 anchor box

    博客地址:https://www.cnblogs.com/zylyehuo/ 代码总览 代码解释 从头到尾用"快递站管理系统"的比喻方式,完整解释每一行代码的功能和意义. 1. 导 ...

  10. 敏捷测试如何应用 BDD(行为驱动开发)?

    ​ 随着敏捷开发的普及,传统测试方法因响应速度慢.沟通成本高而逐渐暴露出局限.行为驱动开发(Behavior Driven Development,简称BDD)作为敏捷测试的重要实践,强调" ...