用了Convention插件來實現所謂的0配置,
例如:
在一個項目中有這樣一系列的Java 包,那麼當指定convention的這個屬性,Struts 框架就會在你訪問特定的URL時會自動的找到所要的請求的實現類。
當你在瀏覽器中輸入: http://localhost:8080/HelloWorld.action ,Struts會自動的找到並執行com.ZTest.web.action.HelloWorldAction.java類。
當你在瀏覽器中輸入: http://localhost:8080/test/aaa.action ,Struts會自動的找到並執行com.ZTest.web.action.test.aaaAction.java類。
例如:
當你在瀏覽器中輸入: http://localhost:8080/HelloWorld.action ,Struts會自動的找到並執行com.ZTest.web.action.HelloWorldAction.java類,並放回到WEB-INF/ruiri/HelloWorld.jsp。
當你在瀏覽器中輸入: http://localhost:8080/test/aaa.action ,Struts會自動的找到並執行com.ZTest.web.action.test.aaaAction.java類, ,並放回到WEB-INF/ruiri/test/HelloWorld.jsp 。
當一個類的類名是多個單詞組合起來的時候,例如 HelloWolrdAction,如果指定了這個屬性,則訪問的地址必須是: HelloWorld.action ,如果不是指定這個屬性則是: helloworld.action
如果不指定這個屬性,Struts默認的分隔符是 “-”,例如 HelloWorldAction 則訪問的URL 是Hello-World.action
如果指定這個屬性是上面的格式,則是沒有分隔符,會按照Java 類名直接映射,例如 HelloWorldAction 則訪問的URL 是HelloWorld.action
詳細講解一下這個屬性,因爲我剛開始的時候被這個屬性搞暈了,希望我的解釋能幫助和我有過同樣疑問的友人。
例如:我們有這樣一些類:
com.ZTest.web.action.AAAAAction
com.Ztest.web.action.BBBBAction
com.Ztest.web.action.test/CCCCAction
com.Ztest.web.action.test/DDDDAction
com.Ztest.web.action.test/first/EEEEAction
com.Ztest.web.action.test/first/FFFFAction
如果,我設置這個屬性的值爲 action 那麼 我們訪問這幾個類得URL就是
http://localhost:8080/ZTest/AAAA.action
http://localhost:8080/ZTest/BBBB.action
http://localhost:8080/ZTest/test/CCCC.action
http://localhost:8080/ZTest/test/DDDD.action
http://localhost:8080/ZTest/test/first/EEEE.action
http://localhost:8080/ZTest/test/first/FFFF.action
而每個URL對應的資源文件必須是下面的格式:(按照本文中的result.path配置的結果)
/WEB-INF/ruiri/AAAA.jsp
/WEB-INF/ruiri/BBBB.jsp
/WEB-INF/ruiri/test/CCCC.jsp
/WEB-INF/ruiri/test/DDDD.jsp
/WEB-INF/ruiri/test/first/EEEE.jsp
/WEB-INF/ruiri/test/first/FFFF.jsp
也就是說:
struts.convention.package.locators=action 就是相當於下面的解釋
類路徑 命名空間(struts.xml中配置的<package>節點)
com.ZTest.web.action.AAAAAction -> /
com.ZTest.web.action.test.CCCCAction -> /test
com.ZTest.web.action.test.first.EEEEAction -> /test/first
1. struts.convention.package.locators.basePackage=com.ZTest.web.action
這個屬性用於約定Action 類的根包(這個包是Java 類的包,而不是Struts.xml中配置的<package>節點)例如:
在一個項目中有這樣一系列的Java 包,那麼當指定convention的這個屬性,Struts 框架就會在你訪問特定的URL時會自動的找到所要的請求的實現類。
當你在瀏覽器中輸入: http://localhost:8080/HelloWorld.action ,Struts會自動的找到並執行com.ZTest.web.action.HelloWorldAction.java類。
當你在瀏覽器中輸入: http://localhost:8080/test/aaa.action ,Struts會自動的找到並執行com.ZTest.web.action.test.aaaAction.java類。
2. struts.convention.result.path=/WEB-INF/ruiri
這個屬性用於約定Action類執行完畢以後返回資源的結果路徑,###必須以 "/" 開頭,例如:
當你在瀏覽器中輸入: http://localhost:8080/HelloWorld.action ,Struts會自動的找到並執行com.ZTest.web.action.HelloWorldAction.java類,並放回到WEB-INF/ruiri/HelloWorld.jsp。
當你在瀏覽器中輸入: http://localhost:8080/test/aaa.action ,Struts會自動的找到並執行com.ZTest.web.action.test.aaaAction.java類, ,並放回到WEB-INF/ruiri/test/HelloWorld.jsp 。
3. struts.convention.action.name.lowercase=false
###是否將Action類轉換成小寫當一個類的類名是多個單詞組合起來的時候,例如 HelloWolrdAction,如果指定了這個屬性,則訪問的地址必須是: HelloWorld.action ,如果不是指定這個屬性則是: helloworld.action
4. struts.convention.action.name.separator=
這個屬性是約定當一個Java 類有多個單詞組合成的時候,映射的URL地址的時候訪問的格式的分隔符。如果不指定這個屬性,Struts默認的分隔符是 “-”,例如 HelloWorldAction 則訪問的URL 是Hello-World.action
如果指定這個屬性是上面的格式,則是沒有分隔符,會按照Java 類名直接映射,例如 HelloWorldAction 則訪問的URL 是HelloWorld.action
5 struts.convention.default.parent.package=default
這個屬性指定的是Strtus.xml中配置的 <package>節點的父節點。(有什麼用?可能就是用於定義全局的Result 吧,這個本人也沒深入的研究過)6 struts.convention.package.locators=action
確定搜索包的路徑。只要是結尾爲action的包都要搜索。詳細講解一下這個屬性,因爲我剛開始的時候被這個屬性搞暈了,希望我的解釋能幫助和我有過同樣疑問的友人。
例如:我們有這樣一些類:
com.ZTest.web.action.AAAAAction
com.Ztest.web.action.BBBBAction
com.Ztest.web.action.test/CCCCAction
com.Ztest.web.action.test/DDDDAction
com.Ztest.web.action.test/first/EEEEAction
com.Ztest.web.action.test/first/FFFFAction
如果,我設置這個屬性的值爲 action 那麼 我們訪問這幾個類得URL就是
http://localhost:8080/ZTest/AAAA.action
http://localhost:8080/ZTest/BBBB.action
http://localhost:8080/ZTest/test/CCCC.action
http://localhost:8080/ZTest/test/DDDD.action
http://localhost:8080/ZTest/test/first/EEEE.action
http://localhost:8080/ZTest/test/first/FFFF.action
而每個URL對應的資源文件必須是下面的格式:(按照本文中的result.path配置的結果)
/WEB-INF/ruiri/AAAA.jsp
/WEB-INF/ruiri/BBBB.jsp
/WEB-INF/ruiri/test/CCCC.jsp
/WEB-INF/ruiri/test/DDDD.jsp
/WEB-INF/ruiri/test/first/EEEE.jsp
/WEB-INF/ruiri/test/first/FFFF.jsp
也就是說:
struts.convention.package.locators=action 就是相當於下面的解釋
類路徑 命名空間(struts.xml中配置的<package>節點)
com.ZTest.web.action.AAAAAction -> /
com.ZTest.web.action.test.CCCCAction -> /test
com.ZTest.web.action.test.first.EEEEAction -> /test/first
當然對應的資源的文件路徑就是:
/WEB-INF/ruiri/AAAA.jsp
/WEB-INF/ruiri/test/CCCC.jsp
/WEB-INF/ruiri/test/first/EEEE.jsp
區別:
struts.convention.package.locators=action
確定搜索包的路徑。只要是結尾爲action的包都要搜索。
struts.convention.package.locators.disable=false
struts.convention.package.locators.basePackage=com.xxx.web.action
basePackage按照默認不用配置,如果配置,只會找以此配置開頭的包。
locators及locators.basePackage都是一組以逗號分割的字符串。