Jfinal學(xué)習(xí)筆記-項目配置

Jfinal學(xué)習(xí)筆記

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) {}  //配置全局?jǐn)r截器
    public void configHandler(Handlers me) {}  //配置全局處理器
}

一、configConstant 配置加載常量

Constants 類中的常量值部分時通過創(chuàng)建初始化,部分是默認(rèn)初始化,只是初始化時機不同,項目使用中并無區(qū)別。

    //默認(rèn)初始化值
    private boolean devMode = false;  //項目是否為開發(fā)模式
    private String baseUploadPath = "upload";  //文件上傳根目錄
    private String baseDownloadPath = "download";  //文件下載根目錄
    private String encoding = "UTF-8";  //項目編碼
    private String urlParaSeparator = "-";  //URL段分隔符
    //通過創(chuàng)建初始化值
    private ViewType viewType;  //視圖類型,通過此類型設(shè)置項目視圖渲染工廠,默認(rèn)JFINAL_TEMPLATE
    private String viewExtension;  //視圖后綴,默認(rèn) .heml
   private int maxPostSize;  //最多請求數(shù),默認(rèn) 10485760
   private int freeMarkerTemplateUpdateDelay;  //非開發(fā)模式下模板更新延遲,單位秒,默認(rèn)3600
   private ControllerFactory controllerFactory;  //控制器工廠,用于創(chuàng)建 Controller 對象
   private int configPluginOrder;  //configPlugin(Plugins me) 在 JFinalConfig 中被調(diào)用的次序,默認(rèn) 3
   private ITokenCache tokenCache;  //設(shè)置緩存,默認(rèn) HttpSesion
   private Map<Integer, String> errorViewMapping;  //錯誤視圖映射組

已上是 Constants 中所有的參數(shù),所有參數(shù)都有默認(rèn)值,并且提供 set get 方法。大多數(shù)為常規(guī)設(shè)置,部分為項目間接設(shè)置。
viewType 目的為設(shè)置視圖渲染工廠,用于渲染視圖。而這里的參數(shù)為枚舉類:JFINAL_TEMPLATE, JSP, FREE_MARKER, VELOCITY; 在抽象工廠 RenderFactory 中在根據(jù)枚舉值設(shè)置具體的工廠實現(xiàn)類。
controllerFactory 控制器工廠,通過常量 DEFAULT_CONTROLLER_FACTORY 設(shè)置默認(rèn)的 ControllerFactory 的實現(xiàn)類 FastControllerFactory。用于接管 Controller 的生命周期。對此可以自己實現(xiàn) ControllerFactory 并設(shè)置新的控制器工廠。
errorViewMapping 錯誤視圖映射Map,并不是直接設(shè)置 map 值,而是通過 setError404View、setError500View、setErrorView 等方法將配置 put 進 map 中。具體錯誤頁面映射可以具體設(shè)置。

2、除了以上 Constants 中出現(xiàn)的參數(shù)值,還可以通過此類設(shè)置一些其他的項目屬性以及一些處理工廠。

//設(shè)置國際化基本名稱
public void setI18nDefaultBaseName(String defaultBaseName) {
    I18n.setDefaultBaseName(defaultBaseName);
}
//設(shè)置國際化語言地區(qū)
public void setI18nDefaultLocale(String defaultLocale) {
    I18n.setDefaultLocale(defaultLocale);
}
//設(shè)置 devMode 之下的 action report 是否在 invocation 之后,默認(rèn)值為 true
public void setReportAfterInvocation(boolean reportAfterInvocation) {
    ActionReporter.setReportAfterInvocation(reportAfterInvocation);
}
//設(shè)置 Json 轉(zhuǎn)換工廠實現(xiàn)類,目前支持:JFinalJsonFactory(默認(rèn))、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);
    }
}
//設(shè)置驗證碼緩存
public void setCaptchaCache(ICaptchaCache captchaCache) {
    CaptchaManager.me().setCaptchaCache(captchaCache);
}
//設(shè)置默認(rèn)日志工廠
public void setLogFactory(ILogFactory logFactory) {
    if (logFactory == null) {
        throw new IllegalArgumentException("logFactory can not be null.");
    } else {
        LogManager.me().setDefaultLogFactory(logFactory);
    }
}
//設(shè)置代理工廠
public void setProxyFactory(ProxyFactory proxyFactory) {
    ProxyManager.me().setProxyFactory(proxyFactory);
}
//設(shè)置對 Controller、Interceptor、Validator 進行依賴注入,默認(rèn)為 false;
public void setInjectDependency(boolean injectDependency) {
    AopManager.me().setInjectDependency(injectDependency);
}
//設(shè)置對父類進行注入,默認(rèn)為false;
public void setInjectSuperClass(boolean injectSuperClass) {
    AopManager.me().setInjectSuperClass(injectSuperClass);
}

二、configRoute 配置項目路由

路由的配置主要是配置三個方面:請求映射、攔截器和基本路徑。
而復(fù)雜業(yè)務(wù)中的路由配置也相應(yīng)復(fù)雜多樣,jfinal 的路由配置提供多種方式。

1、最簡單的請求地址映射接收方法,添加攔截處理。

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

2、添加繼承 Routes 的類,此子類封裝了請求地址映射和攔截處理。

me.add(new IndexRoutes()) 

3、當(dāng)多個路由封裝類的攔截處理有重疊部分時,可以通過匿名內(nèi)部類統(tǒng)一添加路由并統(tǒng)一天機攔截處理。重寫 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、路由配置展示,注意:當(dāng) 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 模板引擎的渲染顯示的基礎(chǔ)。
通過 addSharedObject、addSharedFunction、addSharedFunction 此三個方法共享 java 類,java 方法,engine 模板方法。豐富頁面邏輯處理方式,用于頁面文件的業(yè)務(wù)邏輯渲染。

//向系統(tǒng)添加公眾類,公眾方法,公眾模板文件。方法擴展
me.addSharedObject("StrKit", new com.jfinal.kit.StrKit());
me.addSharedMethod("com.jfinal.kit.StrKit().firstCharToLowerCase())");
me.addSharedFunction("/_view/common/_layui.html");

//插件文件模本渲染器使用 engine 類,向插件設(shè)置
FileTemplateRender.setEngine(me);

//插件菜單標(biāo)簽使用 engine 類,向插件設(shè)置
MenuTag.setEngine(me);

四、configInterceptor 配置全局?jǐn)r截器

這里添加的攔截器為全局?jǐn)r截器,全局?jǐn)r截處理,通常用戶登錄、國際化等一切全局基本功能。
如果要對具體的請求進行攔截差異化處理,可以使用 configRoute 中的路由配置對具體路由添加攔截器,具體請看第二節(jié)內(nèi)容。

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

五、configHandler 配置處理器

可以通過處理器的配置對項目驚喜更高層的功能擴展,也可以對 web 請求完全接管,對此可以對 web 請求的處理方式進行切換。

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

// 全局配置處理器,代替Session處理權(quán)限依賴的過度方法
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) {
      /**
      * 處理內(nèi)容
      */
      next.handle(target, request, response, isHandled);
   }
}

六、configPlugin 配置插件

用于添加第三方插件或者自己編寫的工具類插件,通過實框架提供的 IPlugin 接口即可??梢苑奖愕哪K化的使用常用的功能,例如 Druid 數(shù)據(jù)庫連接插件,EhCache 內(nèi)存緩存插件。

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

七、啟動關(guān)閉回調(diào)配置

onStart() 在系統(tǒng)啟動時調(diào)用,onStop() 在系統(tǒng)停止時調(diào)用。這兩個方法給予了開發(fā)者在系統(tǒng)啟動和關(guān)閉時的其他操作空間。

/**
 * 系統(tǒng)啟動完成時回調(diào)
 */
@Override
public void onStart() {
   // 加載短信、郵件配置
   MessagePropertiesPlugin.loading();
}
/**
 * 系統(tǒng)關(guān)閉時回調(diào)
 */
@Override
public void onStop() {
   // 日志停止
   ThreadSysLog.stopSaveDBThread();
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容