SpringBoot整合JFinal框架(一)
JFinal 是基于 Java 语言的极速 WEB + ORM + AOP + Template Engine 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!
JFinal官网
一、JFinal优点有哪些?
- MVC架构,设计精巧,使用简单
- 遵循COC原则,支持零配置,无xml
- 独创Db + Record模式,灵活便利
- ActiveRecord支持,使数据库开发极致快速
- 自动加载修改后的java文件,开发过程中无需重启web server
- AOP支持,拦截器配置灵活,功能强大
- Plugin体系结构,扩展性强
- 多视图支持,支持FreeMarker、JSP、Velocity
- 强大的Validator后端校验功能
- 功能齐全,拥有struts2的绝大部分功能
- 体积小仅 723 KB,且无第三方依赖
二、使用idea开发工具进行整合
1.创建SpringBoot
创建项目就不多说什么了…
2.在pom.xml文件添加依赖
添加JFinal依赖:
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal-undertow</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>4.9.16</version>
</dependency>
<!-- 如果需要 WebSocket 支持,再添加一个依赖,不开发 WebSocket 无需理会 -->
<dependency>
<groupId>io.undertow</groupId>
<artifactId>undertow-websockets-jsr</artifactId>
<version>2.2.9.Final</version>
</dependency>
2.配置JFinalConfig
在java包下的com.jfinal.demo_jfinal.config中创建config文件,然后创建DemoConfig.java文件,
然后集成JFinalConfig;
DemoConfig类是基于JFinal的web项目需要创建一个继承自JFinalConfig类的子类,该类用于对整个web项目进行配置。
package com.jfinal.demo_jfinal.config;
import com.jfinal.config.*;
import com.jfinal.demo_jfinal.controller.HelloController;
import com.jfinal.json.MixedJsonFactory;
import com.jfinal.render.ViewType;
import com.jfinal.template.Engine;
import io.undertow.server.handlers.resource.ResourceHandler;
public class DemoConfig extends JFinalConfig {
/**
* 常用配置
* 用来配置JFinal常量值,如开发模式常量devMode的配置
* @param constants
*/
@Override
public void configConstant(Constants constants) {
// 配置开发模式,true 值为开发模式
constants.setDevMode(true);
// 配置 aop 代理使用 cglib,否则将使用 jfinal 默认的动态编译代理方案
constants.setToCglibProxyFactory();
// 配置依赖注入
constants.setInjectDependency(true);
// 配置依赖注入时,是否对被注入类的超类进行注入
constants.setInjectSuperClass(false);
// 配置为 slf4j 日志系统,否则默认将使用 log4j
// 还可以通过 me.setLogFactory(...) 配置为自行扩展的日志系统实现类
constants.setToSlf4jLogFactory();
// 设置 Json 转换工厂实现类,更多说明见第 12 章
constants.setJsonFactory(new MixedJsonFactory());
// 配置视图类型,默认使用 jfinal enjoy 模板引擎
constants.setViewType(ViewType.JFINAL_TEMPLATE);
// 配置基础下载路径,默认为 webapp 下的 download
constants.setBaseDownloadPath(...);
// 配置基础上传路径,默认为 webapp 下的 upload
constants.setBaseUploadPath(...);
// 配置 404、500 页面
constants.setError404View("/common/404.html");
constants.setError500View("/common/500.html");
//其他配置
// 配置 encoding,默认为 UTF8
constants.setEncoding("UTF8");
// 配置 json 转换 Date 类型时使用的 data parttern
constants.setJsonDatePattern("yyyy-MM-dd HH:mm");
// 配置是否拒绝访问 JSP,是指直接访问 .jsp 文件,与 renderJsp(xxx.jsp) 无关
constants.setDenyAccessJsp(true);
// 配置上传文件最大数据量,默认 10M
constants.setMaxPostSize(10 * 1024 * 1024);
// 配置验证码缓存 cache,配置成集中共享缓存可以支持分布式与集群
constants.setCaptchaCache(...);
// 配置 urlPara 参数分隔字符,默认为 "-"
constants.setUrlParaSeparator("-");
}
/**
* 路由
* @param routes
*/
@Override
public void configRoute(Routes routes) {
// jfinal 4.9.03 版新增了路由扫描功能,不必手动添加路由
routes.add("/hello", HelloController.class);
// 手工添加路由。注意:使用了路由扫描就不要再使用手工添加路由,两者选其一
//routes.add("/hello", HelloController.class);
// 使用路由扫描,参数 "demo_jfinal." 表示只扫描 demo 包及其子包下的路由
routes.scan("demo_jfinal.");
// 如果要将控制器超类中的 public 方法映射为 action 配置成 true,一般不用配置
routes.setMappingSuperClass(false);
// 配置 baseViewPath,可以让 render(...) 参数省去 baseViewPath 这部分前缀
routes.setBaseViewPath("/view");
// 配置作用于该 Routes 对象内配置的所有 Controller 的拦截器
routes.addInterceptor(new FrontInterceptor());
// 路由扫描,jfinal 4.9.03 新增功能。参数 "com.xxx." 表示扫描被限定的包名,
// 扫描仅会在该包以及该包的子包下进行
routes.scan("com.xxx.");
}
/**
* 配置Template Engine
* @param engine
*/
@Override
public void configEngine(Engine engine) {}
/**
* 配置JFinal的Plugin
* @param plugins
*/
@Override
public void configPlugin(Plugins plugins) {}
/**
*配置全局拦截器
* @param interceptors
*/
@Override
public void configInterceptor(Interceptors interceptors) {
// 以下两行代码配置作用于控制层的全局拦截器
interceptors.add(new AuthInterceptor());
interceptors.addGlobalActionInterceptor(new AaaInterceptor());
// 以下一行代码配置业务层全局拦截器
interceptors.addGlobalServiceInterceptor(new BbbInterceptor());
}
/**
* 配置JFinal的Handler
* @param handlers
*/
@Override
public void configHandler(Handlers handlers) {
handlers.add(new ResourceHandler());
}
}
3.编写Controller
package com.jfinal.demo_jfinal.controller;
import com.jfinal.core.Controller;
import com.jfinal.core.Path;
@Path("/hello")
public class HelloController extends Controller {
public void index() {
renderText("Hello JFinal World.");
}
}
4.启动项目
在DemoJfinalApplication启动类,main方法中添加
UndertowServer.start(DemoConfig.class, 80, true);
5.访问成功
打开浏览器:http://localhost/hello
到此整合JFina框架完毕!!!
感谢观看,相互学习!!!