看到上面的表格是不是了解了呢?Struts2總是以action、actions、struts、struts2包為根包,來映射成對應的URL訪問路徑。
而訪問Action的名字,也應遵循兩個規則,第一:如果類名包含Action後綴,那麼把Action後綴去掉;第二:將以駱駝命名法的類名轉成中畫線寫法,所有的字母都小寫,單詞之間用中畫線分割。比如:
類名 映射 LoginAction /login.action GetBooks /get-books.action AddEmployeeAction /add-employee.action以上按照這些約定,Strtus2就會自動識別Action類,並正常訪問它們了。編寫Action則於從前未使用零配置插件一樣,沒有任何不同。
說完了Action,那麼Result如何映射呢?因為很少有Action不返回邏輯視圖的,零配置插件也提供了映射Result的約定。默認情況下,Result使用:action的URL + Result返回值 + 後綴 來做約定。例如當一個UserAction返回success時,Strus2就會查找user-success.jsp作為視圖資源。而Struts2默認查找的地方在/WEB-INF/content目錄下,那當然了,如果視圖資源不是jsp文件,那也是一樣的。比如LoginAction返回error,並且結果類型為FreeMarker,結果視圖為login-error.ftl。
而JSP等視圖資源也沒有什麼特別之處,到此為止,配置全部由約定完成,無需配置struts.xml文件。
但上面曾說過,如果要改變默認搜索包的名字,要怎樣呢?只需在struts.xml文件中寫入如下配置即可:
<constant name="struts.convention.action.suffix" value="Controller" />
查找以“Controller”結尾的類為Action類
<constant name="struts.convention.package.locators" value="org.demo" />
指定哪些包為搜索Action的根包
<constant name="struts.convention.exclude.packages" value="test" />
排除掉不搜索的包
還有很多可以改變Struts2的默認規則,其他可參閱文檔。
而REST插件可以讓Struts2實現RESTful風格的URL訪問資源方式,具體REST風格是什麼,可以參閱《RESTful Webservice》這本書。
其實Struts2本質上是一個MVC框架,而REST插件是將原本的URL轉換成RESTful風格的URL而已, REST插件中RestActionMapper負責接收參數,把HTTP的請求方式分別用7個方法來做出處理:
HTTP方法 URI 調用Action的方法 請求參數 GET /book index POST /book create PUT /book/2 update id=2 DELETE /book/2 destory id=2 GET /book/2 show id=2 GET /book/2/edit edit id=2 GET /book/new editNew而使用了REST插件之後,Action類就不使用execute()方法來處理用戶請求了,而是上面的7個方法來實現。