在struts.xml配置文件當中packet有一個屬性字段namespace,這里必須詳細了解一下,他的作用是可以讓不同的packet里面包含相同action名稱
一般情況,如果沒有namespace屬性字段的默認為"",會被最后才搜索
如果有兩個相同的package,他們里面有相同的方法,有namespace的action會優先被搜索,在下面的代碼當中,有兩個package,一個是default,另一個是test1,大家里面都有Hello的action,如果Hello的action被調用,test1會被執行優先於default,意思是,程序會先搜索test1里面的Hello的action,所以這里的結果是會返回Hello2.jsp而不是Hello.jsp
(注意:struts.xml配置文件中的package是由上往下讀取的,被繼承的package要先於繼承的package,意思就是編寫這個配置文件時父級別要優先於子級別的package)
另外要主要的是這個namespace所指的在這個web app的根目錄下的一個文件路徑,namespace="/test"代表在根目錄下的/test里面。所以以下的 代碼表示返回的Hello3.jsp在Web App下的/test/里面
最后還有一個要點就,如下面例子,請求http://localhost:8080/Strut2Namespace/test/Hello會出現404的結果,
如果修改一下,在Hello.jsp前加上"/"代表相對路徑的意思,則能顯示Hello3.jsp的頁面,我們來分析一下這個案例
按照規則,先讀取名為test2的package然后然后未能找到Hello的action,則開始讀取默認的package,發現有Hello的action,則返回成功頁面,Hello.jsp,因為這里默認的路徑是"",所以為根目錄,但在根目錄下根本不能找到這個頁面,則報404,如果改成/Hello.jsp,則返回的頁面路徑從test開始的Hello.jsp,這樣在test下能找到Hello.jsp的頁面,則能返回正確的頁面,所這里需要這一點