Playing Play!系列之二:再見Servlet,Play框架的啓動

Play框架的啓動有兩種方式:

1、  原生啓動方式:使用自己的Server直接啓動

2、  包裝啓動方式:通過ServletWrapperServlet容器中。

 

值得說明的是,Play框架採用了Mina來實現嵌入的HTTP服務(更準確的講,是異步地HTTP請求IO處理),相當於完全拋棄了Servlet,只這一點,我就爲Play框架的魄力所折服,不知道目前有多少應用是直接用它來作爲生產模式的。

 

不管用哪種方式,都是通過調用核心類Play.init()方法,來先初始化整個Play框架的。

Play.init()方法有兩個參數,一個是File類型,用於指定應用程序根目錄的;另一個是String類型,用於指定Play框架的id

 

Play.init()裏,主要乾了三件事:

1、 初始框架配置:

a)         初始化靜態資源:InitStaticStuff()

b)         讀取版本信息

c)         初始化日誌系統

d)         初始化目錄位置,包括應用程序根目錄、Play框架目錄、臨時文件目錄等

e)         初始化運行模式,分dev開發模式和prod產品模式

2、 加載應用資源:

a)         加載應用Java源文件

b)         加載應用模板文件

c)         加載請求路由配置

d)         加載聲明的外部模塊,主要包括模塊的Java源文件、模板文件和路由配置

e)         創建應用類加載器(ApplicationClassloader

f)          加載聲明的內置插件

3、 預編譯代碼和模板:

a)         最後如果是產品環境或指定“precomiler”環境變量,則對應用的Java源文件和頁面模板進行預編譯

 

在加載應用資源時,Play框架沒有直接使用JavaIO裏的File,而定義了一個宣稱模擬VFS的虛擬文件類(VirtualFile),這在後面介紹動態編譯和加載類時,將會介紹到。

 

另外,在調用Play.init()之前,Play框架其實還通過靜態代碼塊,先初始化了一個重要組件,線程池對象:play.Invoker.executor。這個線程池的作用,後續文章也將進行詳細說明。

 

      [email protected]

      liuu.iteye.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章