Jfinal学习笔记-项目配置

2022-04-26  本文已影响0人  MJ镜中人

Jfinal学习笔记

Jfinal 项目配置:

public class DemoConfig extends JFinalConfig {  
    public void configConstant(Constants me) {}  //配置项目使用常量值
    public void configRoute(Routes me) {}  //配置项目路由
    public void configEngine(Engine me) {}  //配置模板引擎
    public void configPlugin(Plugins me) {}  //配置项目插件,项目扩展的重要途径
    public void configInterceptor(Interceptors me) {}  //配置全局拦截器
    public void configHandler(Handlers me) {}  //配置全局处理器
}

一、configConstant 配置加载常量

Constants 类中的常量值部分时通过创建初始化,部分是默认初始化,只是初始化时机不同,项目使用中并无区别。

    //默认初始化值
    private boolean devMode = false;  //项目是否为开发模式
    private String baseUploadPath = "upload";  //文件上传根目录
    private String baseDownloadPath = "download";  //文件下载根目录
    private String encoding = "UTF-8";  //项目编码
    private String urlParaSeparator = "-";  //URL段分隔符
    //通过创建初始化值
    private ViewType viewType;  //视图类型,通过此类型设置项目视图渲染工厂,默认JFINAL_TEMPLATE
    private String viewExtension;  //视图后缀,默认 .heml
   private int maxPostSize;  //最多请求数,默认 10485760
   private int freeMarkerTemplateUpdateDelay;  //非开发模式下模板更新延迟,单位秒,默认3600
   private ControllerFactory controllerFactory;  //控制器工厂,用于创建 Controller 对象
   private int configPluginOrder;  //configPlugin(Plugins me) 在 JFinalConfig 中被调用的次序,默认 3
   private ITokenCache tokenCache;  //设置缓存,默认 HttpSesion
   private Map<Integer, String> errorViewMapping;  //错误视图映射组

已上是 Constants 中所有的参数,所有参数都有默认值,并且提供 set get 方法。大多数为常规设置,部分为项目间接设置。
viewType 目的为设置视图渲染工厂,用于渲染视图。而这里的参数为枚举类:JFINAL_TEMPLATE, JSP, FREE_MARKER, VELOCITY; 在抽象工厂 RenderFactory 中在根据枚举值设置具体的工厂实现类。
controllerFactory 控制器工厂,通过常量 DEFAULT_CONTROLLER_FACTORY 设置默认的 ControllerFactory 的实现类 FastControllerFactory。用于接管 Controller 的生命周期。对此可以自己实现 ControllerFactory 并设置新的控制器工厂。
errorViewMapping 错误视图映射Map,并不是直接设置 map 值,而是通过 setError404View、setError500View、setErrorView 等方法将配置 put 进 map 中。具体错误页面映射可以具体设置。

2、除了以上 Constants 中出现的参数值,还可以通过此类设置一些其他的项目属性以及一些处理工厂。

//设置国际化基本名称
public void setI18nDefaultBaseName(String defaultBaseName) {
    I18n.setDefaultBaseName(defaultBaseName);
}
//设置国际化语言地区
public void setI18nDefaultLocale(String defaultLocale) {
    I18n.setDefaultLocale(defaultLocale);
}
//设置 devMode 之下的 action report 是否在 invocation 之后,默认值为 true
public void setReportAfterInvocation(boolean reportAfterInvocation) {
    ActionReporter.setReportAfterInvocation(reportAfterInvocation);
}
//设置 Json 转换工厂实现类,目前支持:JFinalJsonFactory(默认)、JacksonFactory、FastJsonFactory
//分别支持 JFinalJson、Jackson、FastJson
public void setJsonFactory(IJsonFactory jsonFactory) {
    if (jsonFactory == null) {
        throw new IllegalArgumentException("jsonFactory can not be null.");
    } else {
        JsonManager.me().setDefaultJsonFactory(jsonFactory);
    }
}
//设置验证码缓存
public void setCaptchaCache(ICaptchaCache captchaCache) {
    CaptchaManager.me().setCaptchaCache(captchaCache);
}
//设置默认日志工厂
public void setLogFactory(ILogFactory logFactory) {
    if (logFactory == null) {
        throw new IllegalArgumentException("logFactory can not be null.");
    } else {
        LogManager.me().setDefaultLogFactory(logFactory);
    }
}
//设置代理工厂
public void setProxyFactory(ProxyFactory proxyFactory) {
    ProxyManager.me().setProxyFactory(proxyFactory);
}
//设置对 Controller、Interceptor、Validator 进行依赖注入,默认为 false;
public void setInjectDependency(boolean injectDependency) {
    AopManager.me().setInjectDependency(injectDependency);
}
//设置对父类进行注入,默认为false;
public void setInjectSuperClass(boolean injectSuperClass) {
    AopManager.me().setInjectSuperClass(injectSuperClass);
}

二、configRoute 配置项目路由

路由的配置主要是配置三个方面:请求映射、拦截器和基本路径。
而复杂业务中的路由配置也相应复杂多样,jfinal 的路由配置提供多种方式。

1、最简单的请求地址映射接收方法,添加拦截处理。

me.add("/hello", HelloController.class) 
me.addInterceptor(new FrontInterceptor()) 

2、添加继承 Routes 的类,此子类封装了请求地址映射和拦截处理。

me.add(new IndexRoutes()) 

3、当多个路由封装类的拦截处理有重叠部分时,可以通过匿名内部类统一添加路由并统一天机拦截处理。重写 Routes 类的 add 方法,返回添加过拦截处理的 routes。

me.add(new Routes() {
    public Routes add(Routes routes) {
        routes.addInterceptor(apiHandle);
        return super.add(routes);
    }
    public void config() {
        add(new AgreementRoutes());
    }
});

4、路由配置展示,注意:当 view 以 “/” 字符打头时表示绝对路径,baseViewPath 与 viewPath 将被忽略。

public void configRoute(Routes me) {
    me.setBaseViewPath("/view");  
    me.addInterceptor(new FrontInterceptor());  
    me.add("/hello", HelloController.class);
    //封装形式配置
    me.add(new IndexRoutes());
    me.add(new LoginRoutes().addInterceptor(apiHandle));
    me.add(new WxUserRoutes().addInterceptor(apiHandle).addInterceptor(openId));
    me.add(new Routes() {
        @Override
        public Routes add(Routes routes) {
            routes.addInterceptor(apiHandle);
            return super.add(routes);
        }
        @Override
        public void config() {
            add(new AgreementRoutes());
        }
    });
}

三、configEngine 配置模板引擎

模板引擎,Jfinal 中重要且非常常用的模块,页面渲染处理中需要扩展的方法需要用到,在诸多扩展插件中渲染器处理也用到。是 Enjoy 模板引擎的渲染显示的基础。
通过 addSharedObject、addSharedFunction、addSharedFunction 此三个方法共享 java 类,java 方法,engine 模板方法。丰富页面逻辑处理方式,用于页面文件的业务逻辑渲染。

//向系统添加公众类,公众方法,公众模板文件。方法扩展
me.addSharedObject("StrKit", new com.jfinal.kit.StrKit());
me.addSharedMethod("com.jfinal.kit.StrKit().firstCharToLowerCase())");
me.addSharedFunction("/_view/common/_layui.html");

//插件文件模本渲染器使用 engine 类,向插件设置
FileTemplateRender.setEngine(me);

//插件菜单标签使用 engine 类,向插件设置
MenuTag.setEngine(me);

四、configInterceptor 配置全局拦截器

这里添加的拦截器为全局拦截器,全局拦截处理,通常用户登录、国际化等一切全局基本功能。
如果要对具体的请求进行拦截差异化处理,可以使用 configRoute 中的路由配置对具体路由添加拦截器,具体请看第二节内容。

//方法 add 和 addGlobalActionInterceptor 相同,add 为兼容早起版本
me.add(new SessionInViewInterceptor());
me.add(new LoginInterceptor());
me.addGlobalActionInterceptor(new EnhanceI18nInterceptor());

五、configHandler 配置处理器

可以通过处理器的配置对项目惊喜更高层的功能扩展,也可以对 web 请求完全接管,对此可以对 web 请求的处理方式进行切换。

// 全局配置处理器,主要是记录日志和request域值处理
me.add(new GlobalHandler());

// 全局配置处理器,代替Session处理权限依赖的过度方法
me.add(new QxHandler());

一般情况不对 web 请求的进行接管的处理器的扩展,写法如下在完成具体处理逻辑后传递下一个处理器 next.handle(target, request, response, isHandled);

public class QxHandler extends Handler {
   @Override
   public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
      /**
      * 处理内容
      */
      next.handle(target, request, response, isHandled);
   }
}

六、configPlugin 配置插件

用于添加第三方插件或者自己编写的工具类插件,通过实框架提供的 IPlugin 接口即可。可以方便的模块化的使用常用的功能,例如 Druid 数据库连接插件,EhCache 内存缓存插件。

public void configPlugin(Plugins me) {
   DruidPlugin dp = new DruidPlugin(jdbcUrl, userName, password);
   me.add(dp);

   ActiveRecordPlugin arp = new ActiveRecordPlugin(dp);
   arp.addMapping("user", User.class);
   me.add(arp);
}

七、启动关闭回调配置

onStart() 在系统启动时调用,onStop() 在系统停止时调用。这两个方法给予了开发者在系统启动和关闭时的其他操作空间。

/**
 * 系统启动完成时回调
 */
@Override
public void onStart() {
   // 加载短信、邮件配置
   MessagePropertiesPlugin.loading();
}
/**
 * 系统关闭时回调
 */
@Override
public void onStop() {
   // 日志停止
   ThreadSysLog.stopSaveDBThread();
}
上一篇下一篇

猜你喜欢

热点阅读