JFinal快速入门-开始-001
JFinal快速入门-001
目录
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 应用,需完成以下几个关键步骤:
- 继承
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) |
配置模版引擎 |
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标题!");
}
}
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的更多相关文章
- Java转Ruby【快速入门】
最近参加实习了,公司的技术栈中需要用到 Ruby 以及 Rails 框架,所以算是开始了踩坑之旅吧.. Ruby 简介 网上的简介要搜都能搜到,具体涉及的包括历史啦之类这里不再赘述,提几个关键词吧: ...
- Nutch 快速入门(Nutch 2.2.1+Hbase+Solr)
http://www.tuicool.com/articles/VfEFjm Nutch 2.x 与 Nutch 1.x 相比,剥离出了存储层,放到了gora中,可以使用多种数据库,例如HBase, ...
- 十天快速入门Python
课程导学 001 课程定位和目标 002 课程导学 第一部分 Python快速入门 第1天 Python基本语法元素 003 Python基本语法元素 004 程序设计基本方法 005 Python开 ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Mybatis框架 的快速入门
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
- grunt快速入门
快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...
随机推荐
- cgal 的初步学习
简介 cgal 其实说白了就是一个封装好的图形学计算库.因为有很多函数我们经常用到为什么不把他们封装好呢? https://www.cgal.org/ 官网 https://blog.csdn.net ...
- 日事清OGSM模式正式上线:目标管理+战略执行双模式支持,提升企业效率
OGSM模式正式发布 为进一步提升目标管理的执行力和系统性,日事清对目标模块进行了重要升级: 原"规划视图"已统一升级为"行动"模块,全面引入了时下最主流的战略 ...
- SciTech-EECS-Computer Network:OSI: 链路:mac地址+集线器/交换机⇒子网⇒网络层:ip地址+路由器+
SciTech-EECS-Computer Network:OSI: 链路:mac地址+集线器/交换机⇒子网⇒网络层:ip地址+路由器+ OSI: 链路:mac地址+集线器/交换机⇒子网⇒网络层:ip ...
- 使用django-simple-history实现简单审计功能
前言 本文依然是中台项目延伸的笔记 这个系列的文章太小众了,看的人都不多 我争取尽快把这系列完结了,然后进入新的项目 关于审计 之前我在 dotnet 的项目里已经自己实现了审计功能了,还是用切面思想 ...
- 电脑安装Win11专业版出现卡住不动的问题
有很多深度官网的用户都想安装体验win11系统,但是因为win11专业版对系统配置有挺高的要求!这不有一位用户在安装win11系统的时候,就遇到了电脑安装时出现卡死不动的问题,接下来,深度技术系统小编 ...
- 使用fnm安装node,并自定义安装路径
作者:咕魂 时间:2024年6月23日 本教程使用winget对fnm进行安装,主要分两部分,第一步安装fnm,第二步安装nodejs 其中nodejs配置成功后只在powershell中生效 1. ...
- magic-dash及各Dash组件库正式版全线支持Dash 3.x新版本
更多Dash应用开发干货知识.案例,欢迎关注"玩转Dash"微信公众号 大家好我是费老师,Dash作为Python生态中功能强大,且相关生态丰富的开源全栈应用开发框架,在今年上半年 ...
- 微服务Token鉴权的7种方案
前言 最近有球友问我:微服务中Token鉴权除了使用JWT之外,还有什么其他的方案? 今天这篇文章跟大家一起聊聊微服务Token鉴权的7种方案,希望对会有所帮助. 1. 为什么必须做Token鉴权? ...
- ZBrush和3D-Coat各自的优缺点是什么?
zbrush支持的模型面数高英文界面,3d coat支持的模型面数比zbrsh低有中文界 ZBrush优缺点 1.ZBrush优点: zbrush是高精度建模poser制作的首选.可搭配雕刻版使用 ...
- WPF优秀项目推荐:Stylet 一个非常轻量但强大的 ViewModel-First MVVM 框架
Stylet介绍 Stylet 是一个小型但功能强大的 ViewModel 优先的 MVVM 框架,适用于 WPF (.NET 4.5.2+ 和 .NET Core 3.0+),它允许您编写易于测试的 ...