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极速开发平台系列:

JFinal快速入门-开始-001的更多相关文章

  1. Java转Ruby【快速入门】

    最近参加实习了,公司的技术栈中需要用到 Ruby 以及 Rails 框架,所以算是开始了踩坑之旅吧.. Ruby 简介 网上的简介要搜都能搜到,具体涉及的包括历史啦之类这里不再赘述,提几个关键词吧: ...

  2. Nutch 快速入门(Nutch 2.2.1+Hbase+Solr)

    http://www.tuicool.com/articles/VfEFjm Nutch 2.x 与 Nutch 1.x 相比,剥离出了存储层,放到了gora中,可以使用多种数据库,例如HBase, ...

  3. 十天快速入门Python

    课程导学 001 课程定位和目标 002 课程导学 第一部分 Python快速入门 第1天 Python基本语法元素 003 Python基本语法元素 004 程序设计基本方法 005 Python开 ...

  4. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  5. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  6. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  7. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  8. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  9. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  10. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

随机推荐

  1. 前端开发系列044-基础篇之TypeScript语言特性(四)

    本文主要对TypeScript中的函数进行展开介绍.主要包括以下内容 ❏ 函数的创建和类型 ❏ 函数参数情况说明 ❏ 泛型函数简单介绍 一.函数的创建和类型 函数的创建 函数的创建主要有两种方式:通过 ...

  2. vs 编译成库 有的时候会出现奇怪的问题 解决方案

    解决方案: 把相关库的代码全部加入到建立的vs项目中.

  3. docker 开启远程访问功能

    简介 部署了一个http服务在docker上,由于docker有自己的端口似乎无法访问 参考链接 https://blog.csdn.net/longzhanpeng/article/details/ ...

  4. BigdataAIML-ML-Models for machine learning Explore the ideas behind machine learning models and some key algorithms used for each

    最好的机器学习教程系列: https://developer.ibm.com/articles/cc-models-machine-learning/ By M. Tim Jones, Publish ...

  5. Win11系统电脑开机只显示鼠标的问题

    有的电脑基地的小伙伴在使用win1纯净版系统的时候,在电脑开机的时候屏幕只显示鼠标的问题,那么碰到这种情况应该怎么办呢?下面技术员小编就来分享具体的解决方法吧.Win11 纯净版系统电脑开机只显示鼠标 ...

  6. (译) 理解 Elixir 中的宏 Macro, 第五部分:组装 AST

    Elixir Macros 系列文章译文 [1] (译) Understanding Elixir Macros, Part 1 Basics [2] (译) Understanding Elixir ...

  7. bash 脚本中添加颜色输出

    echo -e "\e[31m红色文字\e[0m" echo -e "\e[1;32m粗体绿色文字\e[0m" echo -e "\e[4;34m带下 ...

  8. zuul 网关超时优化

    1. 概述 前段时间,线上的服务不知道为啥,突然全部的服务都超时,所有的请求经过网关都超时,后来进行链路追踪排查,发现有一个服务链接 RDS 数据库,一个查询花费了 20S 的查询时间,导致后续调用该 ...

  9. word从excel中获取数据

    '如 word开发工具不显示,文件 选项 自定义功能区 开发工具对钩选中 'Dim 字典 Dim SubArray(2, 200) As String Dim Row As Integer Dim I ...

  10. JavaSE-方法(java)

    方法的作用 在Java中,方法(Method)是一段具有特定功能的代码块,它允许你将一段逻辑封装起来,以便在程序的多个地方重复使用这段逻辑.方法可以接收输入(参数),执行一系列操作,并可能返回一个结果 ...