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

创建项目就不多说什么了…

spring boot支持jstl spring boot jfinal_java

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);

spring boot支持jstl spring boot jfinal_spring boot支持jstl_02

5.访问成功

打开浏览器:http://localhost/hello

spring boot支持jstl spring boot jfinal_ide_03

spring boot支持jstl spring boot jfinal_spring boot支持jstl_04

到此整合JFina框架完毕!!!
感谢观看,相互学习!!!