JFinal初识

本文介绍了JFinal,一个基于Java的快速Web开发框架,详细讲解了其系统架构、配置类中的configConstant和configRoute方法,以及JFinal的应用场景和入门案例,包括Maven集成和配置类的插件、拦截器等配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JFinal

了解JFinal

JFinal是什么?

    JFinal 是基于Java 语言的极速web 开发框架,其核心设计目标是开 发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、 Restful。
    JFinal 项目开发始于2011年初,作者詹波(James Zhan)开发。项 目开源于2012年3月18日,采用对商业应用友好的Apache Licence 2.0协议。
    基于微内核+全方位扩展型架构,打造功能极度全面WEB+ORM开发 框架。彻底解放开发者的生产力,彻底改善开发者的开发体验,让 软件开发成为一件轻松愉快的事情。

JFinal的系统架构

JFinal 采用微内核全方位扩展架构,全方位是指其扩展方式在空间上的表现形式。 JFinal由Handler、Interceptor、Controller、Render、Plugin五大部分组成。

  1. 遵循COC原则,零配置,无xml
  2. ActiveRecord支持,使数据库开发极致快速
  3. 自动加载修改后的java文件,开发过程中无需重启web server
  4. AOP支持,拦截器配置灵活,功能强大
  5. Plugin体系结构,扩展性强
  6. 多视图支持,支持FreeMarker、JSP、Velocity
  7. 强大的Validator后端校验功能
  8. 功能齐全,拥有struts2的绝大部分功能
  9. 体积小仅218K,且无第三方依赖
JFinal可以做什么

    目前学习和使用JFinal极速web开发框架的个人开发者或者公司团队已经 非常多了,项目类型范围涵盖也比较多. 常见的:后台管理系统, 电商网站, 金融系统, 校务管理, 进销存系统, ERP系统, 游戏后台维护支撑系统, 微信小程序社区俱乐部等。

JFinal入门案例

开发 jfinal 项目建议使用 maven,而不是使用传统手工的方式去管理 jar 包和构建项目。
1.创建maven项目
在这里插入图片描述
在这里插入图片描述
选择需要的web模板,创建maven项目
在这里插入图片描述
在这里插入图片描述
创建一个Maven项目
在项目src --> main --> 创建 java 、resources、 webapp 目录
在这里插入图片描述
pom.xml 文件中导入Jfinall的依赖包

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

创建一个带main的JFinal配置类
案例: DemoConfig的一个配置类
要继承 JFinalConfig 类

在main方法中启动UndertowServer服务
start方法参数: 加载的类 端口号 是否支持热加载

public class My_Config extends JFinalConfig{
 	@Override
 	public void configConstant(Constants me) {
 		me.setInjectDependency(true);
 		me.setDevMode(true);
 	}
 	@Override
 	public void configRoute(Routes me) {
 		me.scan("com.ape.view.");
 
	}
 	@Override
 	public void configEngine(Engine me) {
 	// TODO Auto-generated method stub
 
	}
 	@Override
 	public void configPlugin(Plugins me) {
 	// TODO Auto-generated method stub
 
	}
 	@Override
 	public void configInterceptor(Interceptors me) {
 		me.add(new SessionInViewInterceptor());
 	}
 	@Override
 	public void configHandler(Handlers me) {
 	// TODO Auto-generated method stub
 
	}
}

创建一个控制器类
HelloController
要继承 Controller
定义一个index方法
renderText()
方法响应用户内容
定义@Path 用户的访问路径
在这里插入图片描述
创建带main的java类,启动并通过浏览器访问

public class Run {
	public static void main(String[] args) {
 
	UndertowServer.start(My_Config.class,80,true);
	}
}

配置类 JFinalConfig

基于JFinal的web项目需要创建一个继承自JFinalConfig类的子类,该类用于对整个web项 目进行配置。
JFinalConfig子类需要实现六个抽象方法:
在这里插入图片描述

配置类中configConstant方法
此方法用来配置JFinal常量值:
// 配置开发模式,true 值为开发模式
me.setDevMode(true); 
// 配置 aop 代理使用 cglib,否则将使用 jfinal 默认的动态编译代理方案 me.setToCglibProxyFactory();
 // 配置依赖注入 
me.setInjectDependency(true); 
// 配置依赖注入时,是否对被注入类的超类进行注入 
me.setInjectSuperClass(false); 
// 配置基础下载路径,默认为 webapp 下的 download 
me.setBaseDownloadPath(...);
 // 配置基础上传路径,默认为 webapp 下的 upload 
me.setBaseUploadPath(...); 
// 配置 404、500 页面 me.setError404View("/common/404.html"); me.setError500View("/common/500.html");
 // 配置 encoding,默认为 UTF8 
me.setEncoding("UTF8"); 
// 配置上传文件最大数据量,默认 10M 
me.setMaxPostSize(10 * 1024 * 1024); 
 
此方法用来配置访问路由 我们的入门案例中 http://localhost/hello 这个URL 访问了HelloController控制器中的index() 
// 配置 baseViewPath,可以让 render(...) 参数省去 baseViewPath 这部分前缀 me.setBaseViewPath("/view");
// 配置作用于该 Routes 对象内配置的所有 Controller 的拦截器 me.addInterceptor(new FrontInterceptor());
// 路由扫描,jfinal 4.9.03 新增功能。参数 "com.xxx." 表示扫描被限定的包名, // 扫描仅会在该包以及该包的子包下进行 me.scan("com.xxx.");
// 手工添加路由。注意:使用了路由扫描就不要再使用手工添加路由,两者选其一 me.add("/hello", HelloController.class);
finalView = baseViewPath + viewPath + view

==注意:当view以 “/” 字符打头时表示绝对路径,baseViewPath 与 viewPath 将被忽略 ==

路由的使用

(1)手动添加路由

@Override
public void configRoute(Routes me) {
	// 参数1 demo:是访问控制器的url 
	// 参数2 DemoController.class :是控制器类
	// 参数3 html:是该控制器访问视图的路径 
	me.add("demo",DemoController.class,"html");
}

在这里插入图片描述
在这里插入图片描述
设置具体的view文件将访问该视图
在这里插入图片描述
如果没有写具体的view文件将访问跟方法名同名的html
(2)路由自动扫描

@Override 
public void configRoute(Routes me) { 
	// 参数 指定controller所在的包 
	me.scan("com.ape.web.");
}
使用了路由自动扫描就需要@Path 注解来修饰 Controller// 参数是访问Controller的url @Path("active")
public class DemoController extends Controller {
	public void index() {
	// 这里需要注意:要明确指向view的路径
	// 否则它访问/webapp/active/show.htmlrender("/html/show.html"); } 注意: 路由的路径以 /字符打头时表示绝对路径。 baseViewPath 与 	viewPath 将被忽略
	}
} 

注意: 路由的路径以 /字符打头时表示绝对路径。 baseViewPath 与 viewPath 将被忽略

配置类中configEngine方法

该方法用来配置Template Engine。

public void configEngine(Engine me) { 
	me.addSharedFunction("/view/common/layout.html"); 
	me.addSharedFunction("/view/common/paginate.html"); 
	me.addSharedFunction("/view/admin/common/layout.html"); 
}

方法向模板引擎中添加了三个定义了 template function 的模板文件
注意:me.setToClassPathSourceFactory()、me.setBaseTemplatePath(…)、 me.setDevMode(…) 这三个配置要放在最前面,因为后续的 me.addSharedFunction(…) 等配置对前面三个配置有依赖。

其他方法

configPlugin(…) 该方法使用来配置插件
configInterceptor(…) 该方法使用来配置拦截器
configHandler(…) Handler可以接管所有web请求,并对应用拥有完全的控制权,可以很方便地实 现更高层的功能性扩展
onStart()、onStop() 方法 JFinal 会在系统启动完成之后以及系统关闭之前分别回调这两个方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值