美文网首页
Jfinal学习笔记-项目配置

Jfinal学习笔记-项目配置

作者: MJ镜中人 | 来源:发表于2022-04-26 18:14 被阅读0次

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

    相关文章

      网友评论

          本文标题:Jfinal学习笔记-项目配置

          本文链接:https://www.haomeiwen.com/subject/fnlhyrtx.html