JFinal快速入门-开始-001

JFinal快速入门-001

目录

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

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 的核心依赖:

<dependency>
    <groupId>com.jfinal</groupId>
    <artifactId>jfinal</artifactId>
    <version>5.2.7</version>
</dependency>

此依赖不包含任何第三方库的强制引入,所有附加功能(如数据库连接池、日志框架、JSON 处理等)均以 provided 范围声明,开发者可根据需要自行引入相关依赖。

例如,若需使用 Druid 数据库连接池和数据源监控,则应额外添加:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.27</version>
</dependency>

若需要JFinal-Undertow服务器作为web容器启动,则需要额外添加:

<dependency>
    <groupId>com.jfinal</groupId>
    <artifactId>jfinal-undertow</artifactId>
    <version>3.8</version>
</dependency>

创建第一个 JFinal 应用

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

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

实现 JFinalConfig 配置类

JFinalConfig 是整个应用的配置入口,必须继承该抽象类并重写其抽象方法。以下是各配置方法的作用说明:

方法 功能
configConstant(Constants me) 配置常量,如编码、开发模式等
configRoute(Routes me) 配置 URL 路由映射
configPlugin(Plugins me) 注册插件(如数据库、缓存等)
configInterceptor(Interceptors me) 配置全局拦截器
configHandler(Handlers me) 配置处理器链
configEngine(Engine me) 配置模版引擎
public class JBoltConfig extends JFinalConfig {
    public void configConstant(Constants me) {
        me.setDevMode(true); // 开启开发模式,便于调试
    }

    public void configRoute(Routes me) {
        me.add("/hello", HelloController.class);
    }

    public void configPlugin(Plugins me) {
        // 可在此注册数据库插件等
    }

    public void configInterceptor(Interceptors me) {
        // 可在此添加全局拦截器
    }

    public void configHandler(Handlers me) {
        // 可在此添加请求处理链
    }

    public void configEngine(Engine me) {
        // 可在此添加模版引擎相关配置
    }
}

Section sources

Hello World 示例详解

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

定义控制器

控制器需继承 Controller 类,并定义处理请求的方法:

public class HelloController extends Controller {
    public void index() {
        renderText("JBolt:Hello World!");
    }
}

其中:

  • renderText(content) 直接输出文本内容。

路由映射

configRoute 方法中将 /hello 映射到 HelloController

me.add("/hello", HelloController.class);

访问 http://localhost:8080/hello 将调用 HelloController.index() 方法并返回 “JBolt:Hello World!”。

启动应用与热加载机制

JFinal 提供了便捷的启动方式,可通过 main 方法直接运行 Web 应用。

使用 main 方法启动

public class Main {
    public static void main(String[] args) {
        UndertowServer.start(JBoltConfig.class, 8080, true);
    }
}

参数说明:

  • 第一个参数:配置类
  • 第二个参数:监听端口
  • 第三个参数:devMode 是否开发模式

注意:需在 IDE 中启用“自动编译”功能,否则无法触发热加载。

MVC 协作模式解析

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

控制器层(Controller)

负责接收 HTTP 请求,调用 Service 层处理业务逻辑,并决定视图渲染方式。

@Before(BlogInterceptor.class)
public class BlogController extends Controller {
    @Inject
    BlogService service;

    public void index() {
        set("blogPage", service.paginate(getInt(0, 1), 10));
        render("blog.html");
    }
}

服务层(Service)

封装核心业务逻辑,协调 DAO 操作,保持控制器轻量化。

public class BlogService {
    private Blog dao = new Blog().dao();
    
    public Page<Blog> paginate(int pageNumber, int pageSize) {
        return dao.paginate(pageNumber, pageSize, "select *", "from blog order by id asc");
    }
}

模型层(Model)

继承 Model<Blog> 即可获得完整的 CRUD 操作能力,无需注解或 XML 配置。

public class Blog extends Model<Blog> {}

校验器(Validator)

提供引导式 API 进行参数校验,避免 XML 配置带来的繁琐与错误。

public class BlogValidator extends Validator {
    protected void validate(Controller controller) {
        validateRequiredString("blog.title", "titleMsg", "请输入Blog标题!");
    }
}
sequenceDiagram participant Client as "客户端" participant Controller as "BlogController" participant Service as "BlogService" participant Model as "Blog(Model)" participant DB as "数据库" Client->>Controller : GET /blog Controller->>Service : service.paginate(page, size) Service->>Model : dao.paginate(...) Model->>DB : 执行SQL查询 DB-->>Model : 返回记录集 Model-->>Service : 封装为Page<Blog> Service-->>Controller : 返回分页结果 Controller->>Controller : set("blogPage", result) Controller-->>Client : 渲染 blog.html

项目结构说明

典型的 JFinal 项目结构如下:

src/
├── main/
│   ├── java/
│   │   └── cn/jbolt/
│   │       ├── controller/
│   │       ├── service/
│   │       ├── model/
│   │       └── config/
│   └── webapp/
│       ├── WEB-INF/
│       └── static/
└── test/
  • controller:存放所有控制器类
  • service:业务逻辑实现
  • model:数据模型类
  • config:JFinalConfig 配置类
  • webapp:Web 资源目录,含 JSP、HTML、CSS、JS 等
  • WEB-INF:受保护资源目录

建议按照功能模块划分包结构,如 user, article 等,每个模块包含各自的 controller、service、model 子包,便于维护。

JFinal极速开发平台系列:

posted on 2025-09-26 22:06  xiaomuedu  阅读(75)  评论(0)    收藏  举报

导航