找回密码
 立即注册
首页 业界区 安全 JFinal快速入门-开始-001

JFinal快速入门-开始-001

笃扇 2025-9-27 00:37:10
JFinal快速入门-001

目录


  • JFinal 框架简介
  • 核心特性与优势
  • 环境准备与 Maven 配置
  • 创建第一个 JFinal 应用
  • Hello World 示例详解
  • 启动应用与热加载机制
  • MVC 协作模式解析
  • 项目结构说明
JFinal 框架简介

JFinal 是一个基于 Java 语言的极速 WEB + ORM 框架,其设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级且易于扩展。它融合了 Ruby 和 Python 等动态语言的开发效率,同时保留了 Java 的类型安全和性能优势。JFinal 支持零配置、无 XML,遵循约定优于配置(COC)原则,极大提升了开发效率。
该框架采用 MVC 架构,内置 ActiveRecord 模式,支持 Db + Record 数据操作方式,并提供高性能模板引擎 Enjoy。JFinal 还具备自动热加载功能,在开发过程中无需重启服务即可看到代码修改效果,显著提升开发体验。
核心特性与优势

JFinal 具备以下主要特点:

  • MVC 架构精巧:控制器、模型、视图职责清晰,使用简单。
  • 零配置理念:无需 XML 配置文件,通过 Java 代码进行配置,提升可读性和维护性。
  • Db + Record 模式:灵活的数据访问方式,适用于快速原型开发或复杂查询场景。
  • ActiveRecord 支持:实体类继承 Model 即可拥有完整的数据库操作能力。
  • Enjoy 模板引擎:极简、高性能,十分钟掌握 90% 用法。
  • 自动热加载:开发期间修改 Java 文件后自动重新加载,无需重启服务器。
  • AOP 与拦截器:支持方法级别的拦截,便于实现日志、权限控制等功能。
  • 插件体系(Plugin):高度可扩展,支持数据源、缓存、定时任务等插件集成。
  • 多视图支持:兼容 Enjoy、FreeMarker、JSP 等多种模板技术。
  • 强大的校验机制:通过 Validator 类实现 API 引导式参数校验,比 XML 更直观且有编译检查保障。
这些特性使得 JFinal 成为构建中小型 Web 应用的理想选择,尤其适合追求开发速度和简洁架构的团队。
环境准备与 Maven 配置

在开始使用 JFinal 前,请确保已安装以下基础环境:

  • JDK 8 或更高版本
  • Maven 3.x
  • IDE(推荐 IntelliJ IDEA 或 Eclipse)
添加 Maven 依赖

在项目的 pom.xml 文件中添加 JFinal 的核心依赖:
  1. <dependency>
  2.     <groupId>com.jfinal</groupId>
  3.     jfinal</artifactId>
  4.     <version>5.2.7</version>
  5. </dependency>
复制代码
此依赖不包含任何第三方库的强制引入,所有附加功能(如数据库连接池、日志框架、JSON 处理等)均以 provided 范围声明,开发者可根据需要自行引入相关依赖。
例如,若需使用 Druid 数据库连接池和数据源监控,则应额外添加:
  1. <dependency>
  2.     <groupId>com.alibaba</groupId>
  3.     druid</artifactId>
  4.     <version>1.2.27</version>
  5. </dependency>
复制代码
若需要JFinal-Undertow服务器作为web容器启动,则需要额外添加:
  1. <dependency>
  2.     <groupId>com.jfinal</groupId>
  3.     jfinal-undertow</artifactId>
  4.     <version>3.8</version>
  5. </dependency>
复制代码
创建第一个 JFinal 应用

要创建一个 JFinal 应用,需完成以下几个关键步骤:

  • 继承 JFinalConfig 类并实现配置方法
  • 配置常量、路由、插件、Interceptor拦截器、Handler处理器、模版引擎等
  • 定义控制器(Controller)
  • 启动JFinal-Undertow服务器
实现 JFinalConfig 配置类

JFinalConfig 是整个应用的配置入口,必须继承该抽象类并重写其抽象方法。以下是各配置方法的作用说明:
方法功能configConstant(Constants me)配置常量,如编码、开发模式等configRoute(Routes me)配置 URL 路由映射configPlugin(Plugins me)注册插件(如数据库、缓存等)configInterceptor(Interceptors me)配置全局拦截器configHandler(Handlers me)配置处理器链configEngine(Engine me)配置模版引擎
  1. public class JBoltConfig extends JFinalConfig {
  2.     public void configConstant(Constants me) {
  3.         me.setDevMode(true); // 开启开发模式,便于调试
  4.     }
  5.     public void configRoute(Routes me) {
  6.         me.add("/hello", HelloController.class);
  7.     }
  8.     public void configPlugin(Plugins me) {
  9.         // 可在此注册数据库插件等
  10.     }
  11.     public void configInterceptor(Interceptors me) {
  12.         // 可在此添加全局拦截器
  13.     }
  14.     public void configHandler(Handlers me) {
  15.         // 可在此添加请求处理链
  16.     }
  17.     public void configEngine(Engine me) {
  18.         // 可在此添加模版引擎相关配置
  19.     }
  20. }
复制代码
Section sources

  • JFinalConfig.java
Hello World 示例详解

下面是一个完整的 "Hello World" 示例,涵盖控制器定义、路由映射和响应渲染。
定义控制器

控制器需继承 Controller 类,并定义处理请求的方法:
  1. public class HelloController extends Controller {
  2.     public void index() {
  3.         renderText("JBolt:Hello World!");
  4.     }
  5. }
复制代码
其中:

  • renderText(content) 直接输出文本内容。
路由映射

在 configRoute 方法中将 /hello 映射到 HelloController:
  1. me.add("/hello", HelloController.class);
复制代码
访问 http://localhost:8080/hello 将调用 HelloController.index() 方法并返回 “JBolt:Hello World!”。
启动应用与热加载机制

JFinal 提供了便捷的启动方式,可通过 main 方法直接运行 Web 应用。
使用 main 方法启动
  1. public class Main {
  2.     public static void main(String[] args) {
  3.         UndertowServer.start(JBoltConfig.class, 8080, true);
  4.     }
  5. }
复制代码
参数说明:

  • 第一个参数:配置类
  • 第二个参数:监听端口
  • 第三个参数:devMode 是否开发模式
注意:需在 IDE 中启用“自动编译”功能,否则无法触发热加载。
MVC 协作模式解析

结合 JFinal 源码的 README 中提供的 Blog 示例,可以清晰地理解 JFinal 的 MVC 各层协作流程。
控制器层(Controller)

负责接收 HTTP 请求,调用 Service 层处理业务逻辑,并决定视图渲染方式。
  1. @Before(BlogInterceptor.class)
  2. public class BlogController extends Controller {
  3.     @Inject
  4.     BlogService service;
  5.     public void index() {
  6.         set("blogPage", service.paginate(getInt(0, 1), 10));
  7.         render("blog.html");
  8.     }
  9. }
复制代码
服务层(Service)

封装核心业务逻辑,协调 DAO 操作,保持控制器轻量化。
  1. public class BlogService {
  2.     private Blog dao = new Blog().dao();
  3.    
  4.     public Page<Blog> paginate(int pageNumber, int pageSize) {
  5.         return dao.paginate(pageNumber, pageSize, "select *", "from blog order by id asc");
  6.     }
  7. }
复制代码
模型层(Model)

继承 Model 即可获得完整的 CRUD 操作能力,无需注解或 XML 配置。
  1. public class Blog extends Model<Blog> {}
复制代码
校验器(Validator)

提供引导式 API 进行参数校验,避免 XML 配置带来的繁琐与错误。
  1. public class BlogValidator extends Validator {
  2.     protected void validate(Controller controller) {
  3.         validateRequiredString("blog.title", "titleMsg", "请输入Blog标题!");
  4.     }
  5. }
复制代码
sequenceDiagramparticipant Client as "客户端"participant Controller as "BlogController"participant Service as "BlogService"participant Model as "Blog(Model)"participant DB as "数据库"Client->>Controller : GET /blogController->>Service : service.paginate(page, size)Service->>Model : dao.paginate(...)Model->>DB : 执行SQL查询DB-->>Model : 返回记录集Model-->>Service : 封装为PageService-->>Controller : 返回分页结果Controller->>Controller : set("blogPage", result)Controller-->>Client : 渲染 blog.html项目结构说明

典型的 JFinal 项目结构如下:
  1. src/
  2. ├── main/
  3. │   ├── java/
  4. │   │   └── cn/jbolt/
  5. │   │       ├── controller/
  6. │   │       ├── service/
  7. │   │       ├── model/
  8. │   │       └── config/
  9. │   └── webapp/
  10. │       ├── WEB-INF/
  11. │       └── static/
  12. └── test/
复制代码

  • controller:存放所有控制器类
  • service:业务逻辑实现
  • model:数据模型类
  • config:JFinalConfig 配置类
  • webapp:Web 资源目录,含 JSP、HTML、CSS、JS 等
  • WEB-INF:受保护资源目录
建议按照功能模块划分包结构,如 user, article 等,每个模块包含各自的 controller、service、model 子包,便于维护。
JFinal极速开发平台系列:


  • JBolt极速开发平台(全栈版)
  • JBolt极速开发平台(分离版-VUE)
  • JBoltAI-Java AI应用开发平台

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册