在用struts開發的web應用中,我們主要編寫action類來處理到來的請求,但請求到達action之前,struts為我們做了很多任務作。
struts使用actionservlet統一處理所有到來的請求,每到來乙個請求,它都要做很多事情,執行我們編寫的action只是其中之一,struts處理請求的過程如下:
1. 選擇模組
根據請求url和應用的所有模組名(這個模組名的集合在actionservlet的初始化時放到servletcontext裡),分析出請求對應的模組名。
根據這個模組名,從servletcontext裡拿到對應的模組(moduleconfig物件),放到request作用域裡。
根據這個模組裡的messageresources配置資訊,從servletcontext裡拿到對應的messageresources物件,放到request作用域裡。
2. 獲得模組對應的requestprocessor
從servletcontext裡拿模組對應的requestprocessor,如果沒拿到(說明模組第一次被訪問),根據模組裡controller的配置資訊建立乙個requestprocessor,放到servletcontext裡。
3. 處理multipart請求
4. 處理請求路徑
將請求的uri掐頭去尾,也就是將uri中的模組名和字尾名兩部分去掉。如果路徑為null,處理請求結束。
5. 處理locale
如果struts配置檔案裡controller元素的locale屬性沒有指定為false(預設為true),並且session裡沒有locale的話,就從request裡拿到locale,放到session裡。
6. 處理內容型別
獲得struts配置檔案裡controller元素的contenttype屬性值(預設為text/html),將response的內容型別設定為該值。
7. 處理no-cache headers
如果struts配置檔案裡controller元素的nocache屬性指定為true(預設為false),設定response的相關header屬性。
8. 預處理
預設的,struts在這一步沒做任何事情,如果需要,可以繼承requestprocessor,重寫這一步,實現條件性的確定是否繼續執行後面的步驟。
9. 處理快取資訊
在session裡找名字為globals.message_key和globals.error_key的actionmessages,如果有並且已經被訪問過,就從session裡刪除它們。
11. 處理角色許可權
12. 處理actionform
13. 填充actionform
用請求引數填充對應的actionform屬性。
14. 驗證actionform
15. 處理forward
16. 處理include
17. 獲得action物件
18. 執行action的execute()方法
這個execute()方法就是使用struts的程式設計師最熟悉的那個方法。
19. 處理actionforward
上面的execute()方法返回乙個actionforward物件,將請求**或重定向到actionforward的path屬性指定的路徑。
Struts處理請求全過程
在用struts開發的web應用中,我們主要編寫action類來處理到來的請求,但請求到達action之前,struts為我們做了很多任務作。struts使用actionservlet統一處理所有到來的請求,每到來乙個請求,它都要做很多事情,執行我們編寫的action只是其中之一,struts處理請...
Struts處理請求全過程
在用struts開發的web應用中,我們主要編寫action類來處理到來的請求,但請求到達action之前,struts為我們做了很多任務作。struts使用actionservlet統一處理所有到來的請求,每到來乙個請求,它都要做很多事情,執行我們編寫的action只是其中之一,struts處理請...
HTTP請求全過程
http通訊機制是在一次完整的http通訊過程中,web瀏覽器與web伺服器之間將完成下列7個步驟 1.建立tcp連線 在http工作開始之前,web瀏覽器首先要通過網路與web伺服器建立連線,該連線是通過tcp來完成的,該協議與ip協議共同構建internet,即著名的tcp ip協議族,因此in...