歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Struts2的零配置和REST插件

Struts2的零配置和REST插件

日期:2017/3/1 10:37:10   编辑:Linux編程
開發一個小項目中用到了RESTful風格,在這裡總結一下。

首先在Struts2工程中導入所需的jar包

ezmorph-1.0.3.jar
json-lib-2.1-jdk15.jar
struts2-convention-plugin-2.2.1.1.jar
struts2-rest-plugin-2.2.1.1.jar
xstream-1.2.2.jar

以上這些包是實現零配置和REST所必須的jar,缺一不可。

Struts2的Convention插件的主要特點是“約定優於配置”,可能是受到了Ruby on rails框架的啟發,Struts2也借鑒了這個創意,看文字中的意思就可以明白,只要我們按照“約定”來開發,就可以摒棄繁瑣的XML文件,也就是說,action等類配置完全不必寫在struts.xml文件中了。

那麼,“約定”又是什麼呢?

其實,只要把零配置的jar文件拷貝到工程中WEB-INF/lib文件夾下,就自動實現了零配置。對於Struts2而言,它會自動在你創建的action、actions、struts、struts2這四個包下自動搜索,只要滿足2個條件,Struts2就會認為包裡的類是Action類,哪2個條件呢?一是:實現了com.opensymphony.xwork2.Action接口的類;二是:類名以“Action”結尾的類。

當然,以上這兩個條件是Struts2的默實現,你也可以按自己的想法來做出改變,比如可以搜索以“Controller”結尾的類,怎麼改呢?後面會說到。

當Struts2按約定找到了這些符合條件的類以後,就會自動部署這些Action,但在不同的包結構下,訪問這些Action的URL也是不同的,請看下面的表格舉例: 包 訪問URL org.crazyit.actions.LoginAction 映射到/ com.test.action.abc.UserAction 映射到/abc org.crazyit.struts2.wage.hr.AddEmployeeAction 映射到/wage/hr org.crazyit.struts.auction.bid.BidAction 映射到/auction/bid

看到上面的表格是不是了解了呢?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個方法來實現。

Copyright © Linux教程網 All Rights Reserved