struts2對action的搜索規則

        跟java代碼編程類似,struts2對Action類的配置也採用包(package)結構進行管理,如此當然清晰了配置文件的層次結構,提升了配置文件的可讀性,然而因爲各action分佈於不一樣的包(package)下,當struts2接到來自客戶端的請求,當尋找使用哪個action進行處理時,務必要進行一個較爲複雜的搜索過程。
       其實,struts2對於action的搜索,採用的是「查找最精確路徑所在包(package)」的原則進行的。無需多言,一例說明:
        對於來自客戶端的請求url是: http://localhost:8088/p1/p2/p3/list.action,struts2的搜索順序是:
       1.首先搜索namespace爲/p1/p2/p3的package,如若這個package不存在則轉至步驟2;如若這個package存在,則在這個package中尋找name爲list的action,當在該package下找不到此action時就會到默認namespace的package裏面去搜索此action,所謂默認namespace的package,就是沒有 namespace或者namespace爲空字符串("")的package,如若在默認namespace的package裏面仍是找不到該action,則報404提示找不到此命名空間和action。
       2.搜索namespace爲/p1/p2的package,如若這個package不存在,則轉至步驟3;如若這個package存在,則在這個package中尋找name爲list的action,當在該package中找不到此action時就會到默認namaspace的package中去搜索此action,如若在默認namespace中仍是找不到該action, 則報404提示找不到此命名空間和action。
      3.搜索namespace爲/p1的包,如若這個package存在,則在這個package中尋找name爲list的action,當在此package種找不到此action或者不存在這個package時,都會去默認namespace的package裏面去搜索此action,如若仍是找不到,則報404提示找不到此命名空間和action。
   
    另:1.網上大量資料都寫到:當/p1下的package不存在或者找不到/p1下的package找不到此action時,會到namespace爲/的package中搜索。而根據個人經驗,這種狀況下並無到namespace爲/的package中搜索,但願之後在使用的時候當心爲是。
    2.若是同一個包下,配置有多個name相同的action,則後一個會把前一個覆蓋掉。
相關文章
相關標籤/搜索