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. cgal 的初步学习

    简介 cgal 其实说白了就是一个封装好的图形学计算库.因为有很多函数我们经常用到为什么不把他们封装好呢? https://www.cgal.org/ 官网 https://blog.csdn.net ...

  2. 日事清OGSM模式正式上线:目标管理+战略执行双模式支持,提升企业效率

    OGSM模式正式发布 为进一步提升目标管理的执行力和系统性,日事清对目标模块进行了重要升级: 原"规划视图"已统一升级为"行动"模块,全面引入了时下最主流的战略 ...

  3. SciTech-EECS-Computer Network:OSI: 链路:mac地址+集线器/交换机⇒子网⇒网络层:ip地址+路由器+

    SciTech-EECS-Computer Network:OSI: 链路:mac地址+集线器/交换机⇒子网⇒网络层:ip地址+路由器+ OSI: 链路:mac地址+集线器/交换机⇒子网⇒网络层:ip ...

  4. 使用django-simple-history实现简单审计功能

    前言 本文依然是中台项目延伸的笔记 这个系列的文章太小众了,看的人都不多 我争取尽快把这系列完结了,然后进入新的项目 关于审计 之前我在 dotnet 的项目里已经自己实现了审计功能了,还是用切面思想 ...

  5. 电脑安装Win11专业版出现卡住不动的问题

    有很多深度官网的用户都想安装体验win11系统,但是因为win11专业版对系统配置有挺高的要求!这不有一位用户在安装win11系统的时候,就遇到了电脑安装时出现卡死不动的问题,接下来,深度技术系统小编 ...

  6. 使用fnm安装node,并自定义安装路径

    作者:咕魂 时间:2024年6月23日 本教程使用winget对fnm进行安装,主要分两部分,第一步安装fnm,第二步安装nodejs 其中nodejs配置成功后只在powershell中生效 1. ...

  7. magic-dash及各Dash组件库正式版全线支持Dash 3.x新版本

    更多Dash应用开发干货知识.案例,欢迎关注"玩转Dash"微信公众号 大家好我是费老师,Dash作为Python生态中功能强大,且相关生态丰富的开源全栈应用开发框架,在今年上半年 ...

  8. 微服务Token鉴权的7种方案

    前言 最近有球友问我:微服务中Token鉴权除了使用JWT之外,还有什么其他的方案? 今天这篇文章跟大家一起聊聊微服务Token鉴权的7种方案,希望对会有所帮助. 1. 为什么必须做Token鉴权? ...

  9. ZBrush和3D-Coat各自的优缺点是什么?

    zbrush支持的模型面数高英文界面,3d coat支持的模型面数比zbrsh低有中文界 ZBrush优缺点   1.ZBrush优点: zbrush是高精度建模poser制作的首选.可搭配雕刻版使用 ...

  10. WPF优秀项目推荐:Stylet 一个非常轻量但强大的 ViewModel-First MVVM 框架

    Stylet介绍 Stylet 是一个小型但功能强大的 ViewModel 优先的 MVVM 框架,适用于 WPF (.NET 4.5.2+ 和 .NET Core 3.0+),它允许您编写易于测试的 ...