框架執行流程介紹
這樣的乙個get請求http://hostname/index.php?route=common/home 發生了什麼?
1. 開始執行入口檔案index.php。
2. require_once(dir_system . 'startup.php');
做一些php的配置和載入一些類宣告,包括系統主框架檔案(system/engine下的檔案)、一些必用到的helper和library。
系統主框架檔案包括:
registry:儲存全域性變數,使用了註冊者模式,controller的基類、model的基類,loader等均儲存此物件的引用。沒有寫成單例模式,可能是想讓這個類更通用,可以額外new乙個registry例項,在幾個物件內做共享用;
loader:動態載入其他檔案用,提供載入model、library、helper、database、config和language能力,其中載入model和database會new出乙個例項將其儲存到registry物件內, 對於資料類,只需乙個例項;
controller,model:控制器的基類和資料模型類的基類,功能很簡單;
action:使用者的乙個請求,對應乙個動作,用請求的query引數route初始化action;
front:請求分發器,派發action;
下面的框架流程,會介紹這幾個類具體都幹了些什麼。
3. 初始化 registry、loader、db、錯誤處理函式和一些後續用到的library,並將這些library例項的引用儲存到registry物件內,進而供給controller和model物件直接使用。
4. 初始化 front,action物件,此時action由url中query引數route的值"common/home"構造,action解析出對應controller檔名,類名和要執行的方法及引數。
5. front派發action,根據action的類名屬性,new出controller物件controllercommonhome(catalog/controller/common/home.php),並用registry初始化,然後根據action的方法index(如果沒傳方法,預設為index)和引數屬性(無),執行controllercommonhome->index(),index方法內,處理業務邏輯,載入模板等,最後將要輸出到瀏覽器的內容儲存到response內。注意controller的魔術方法 __get和__set,均從registry物件取值和賦值,所以可以像使用自己的屬性一樣,使用儲存在registry的物件。例如:$this->load->model('catalog/category'), 呼叫loader物件的model方法。
6. index.php 內最後一行$response->output() 將內容輸返回給使用者。
至此框架處理完使用者該請求。
zendframework 框架執行流程
1 通過url重寫請求都定位到入口檔案,預設是index.php 2 入口檔案載入系統的配置,單例生成前端控制器。老版本的框架需要在入口檔案中新增部分配置和外掛程式註冊,後來由專門負責程式引導的bootstrap類控制 3 前端控制器初始化請求和返回物件,獲取路由分發到具體控制器的動作 4 控制器根...
SSH框架執行流程
程式入口web.xml 伺服器識別web.xml,解析標籤查詢 login.jsp 3.接下來解析主頁面,伺服器查詢login.jsp,解析主頁面,如果有問題會報錯。到這一步後台業務處理 還沒執行。4.程式將根據action的值去struts.xml配置檔案中查詢對應的action。5.可以看到cl...
springMVC框架的執行流程
第一步 發起請求到前端控制器 dispatcherservlet 可以根據xml配置 註解進行查詢 第四步 前端控制器呼叫處理器介面卡去執行handler 第五步 處理器介面卡去執行handler 第六步 handler執行完成給介面卡返回modelandview 第七步 處理器介面卡向前端控制器返...