jstorm命令?首先要從 UndertowServer 說起,UndertowServer 有多個創建方法,不管使用哪個創建方法最終創建時創建時都需要先創建 Undertowconfig,并将這個作為參數用于創建 UndertowServer源碼摘取如下:,下面我們就來說一說關于jstorm命令?我們一起去了解并探讨一下這個問題吧!
首先要從 UndertowServer 說起,UndertowServer 有多個創建方法,不管使用哪個創建方法最終創建時創建時都需要先創建 Undertowconfig,并将這個作為參數用于創建 UndertowServer。源碼摘取如下:
/**
* 創建 UndertowServer
*
* 嘗試使用 "undertow.txt" 以及 "undertow-pro.txt" 初始化 undertow
* 當配置文件不存在時不抛出異常而是使用默認值進行初始化
*/
public static UndertowServer create(Class<? extends JFinalConfig> jfinalConfigClass) {
return new UndertowServer(new UndertowConfig(jfinalConfigClass));
}
同樣的 UndertowConfig 也有多個創建方法,不管使用哪個創建方法最終創建時都是需要進行配置文件的加載和配置項的初始化,當指定配置文件名根據指定的配置文件進行加載,未指定配置文件名時将加載默認的配置文件 undertow.txt,并進行參數賦值。源碼摘取如下:
public UndertowConfig(String jfinalConfigClass) {
this.jfinalConfig = jfinalConfigClass;
//這裡未指定參數文件使用默認的undertow.txt
p = createPropExt(UNDERTOW_CONFIG);
if (p.notEmpty()) {
init();
}
}
JFinal-Undertow 将會自動嘗試加載生産版本的配置文件,可以根據默認配置文件或者指定的配置文件自動獲取生産版本的配置文件,源碼摘取如下:
/**
* 假定用戶創建 UndertowServer 時指定 undertow 的配置文件為 abc.txt
* 或者 abc-dev.txt 或者 abc_dev.txt,例如:
* UndertowServer.create(AppConfig.class, "abc.txt").start();
*
* 嘗試加載 abc-pro.txt 便于在 fatjar 模式下以 config 目錄中通過創建
* abc-pro.txt 配置文件覆蓋打包在 jar 包中的 abc-dev.txt 配置
*/
protected String buildUndertowConfigPro(String undertowConfig) {
int index = undertowConfig.lastIndexOf('.');
if (index > 0) {
String main = undertowConfig.substring(0, index);
main = removeDevEnds(main);
String ext = undertowConfig.substring(index);
return main "-pro" ext;
} else {
return removeDevEnds(undertowConfig) "-pro";
}
}
配置文件中的所有項在 UndertowConfig 中都是有默認值得,當沒有任何一個配置文件時也就是使用這些默認值了,多數默認值都是 null,有效的幾個如下:
// 開發模式才支持熱加載,此配置與 jfinal 中的是不同的用途
protected volatile static boolean devMode = false;
protected int port = 80;
protected String host = "0.0.0.0";
protected String contextPath = "/";
// web 資源路徑
protected String resourcePath = "src/main/webapp, WebRoot, WebContent";
protected int gzipMinLength = 1024;
jfinal undertow 可以十分方便地從文件系統的目錄以及 class path 或 jar 包中加載 web 靜态資源,以下是配置示例:
undertow.resourcePath = src/main/webapp, classpath:static
如上所示 "src/main/webapp" 表示從項目根目錄下的 "src/main/webapp" 下去加載 web 靜态資源。 "classpath:static" 表示從 class path 以及 jar 包中的 static 路徑下去加載 web 靜态資源。
undertow.resourcePath 配置的另一個重點是,以 "classpath:" 為前綴的配置需要自行注意路徑是否存在,盡可能隻配置存在的路徑。而不以 "classpath:" 打頭的配置可以将開發與部署時的路徑一起配置進來(逗号分隔開),jfinal undertow 會在運行時檢測路徑是否存在,存在才真正讓其生效,從而很方便一次配置同時适用于開發、生産兩種環境。
重要:PathKit.getWebRootPath() 将指向 undertow.resourcePath 配置中的第一個有效目錄,而 configEngine(Engine engine) 方法中的 engine 對象已被默認配置了 engine.setBaseTemplatePath(PathKit.getWebRootPath())。所以該配置與 engine 的 baseTemplatePath 有關聯。
實際測試信息記錄如下:1、JFinal.initPathKit() 中的 servletContext.getRealPath("/"); 獲取到的值,取決于 undertow.resourcePath,使用的是第一個有效目錄;
2、根據代碼觀察應該是在 UndertowServer.configUndertow 中使用 di.setResourceManager(config.getResourceManager()); 邏輯将 undertow.resourcePath 和 servletContext 做了關聯;
3、分别在 UndertowServer.start、UndertowServer.doStart、MyConfig.onStart方法中輸出了多次 PathKit.getWebRootPath,控制台顯示的輸出順序是在 onStart 方法前後都有輸出,但是僅有 onStart 方法中輸出的信息是在 undertow.txt 中配置的,UndertowServer.start、UndertowServer.doStart 都不是配置中的,這應該就是波總說的時機不對吧,但是能力有限不能很好地理解這個時機。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!