Struts處理請求全過程

2021-08-29 12:37:40 字數 1611 閱讀 2847

在用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...