struts2攔截器返回值問題


  攔截器中以invocation.invoke()為分界線,一般默認攔截器:都 先執行攔截器中的invocation.invoke();方法  即會進入遞歸  到下一個攔截器,最后一個攔截器時  就會檢測到后面沒有攔截器可以遞歸啦  就調用action而Action(繼承ActionSupport類)的入口是execute()方法,execute方法中會返回一個字符串,通過fliter以及xml配置文件  找到重定向的url。

   第一種情況:Action繼承了ActionSupport父類,就會執行execute()方法,這是入口。即使你的Action類(必須是繼承了ActioSupport父類)中不重寫execute()方法,也會自動調用父類的execute()方法,父類的execute默認返回的是字符串是SUCCESS. 

   另一種情況:就是Action沒有繼承ActionSupport父類,這是不值得提倡的。 里面可以自己寫很多方法函數。通過通配的方法調用  Action中指定的方法。通過指定路徑訪問(通配符實現) 一般寫法如下:<package name="" namespace="/" extends="strutsdefault" > <action name="test_*" class="cn.itcast.Action.TestAction" method="{1}">   訪問路徑http://localhost:8080/intecepter/test_save 其中intecepter項目名稱,test_save指定save()方法。 

         不管是哪一種情況,一旦經過攔截器到達Action 后,個人認為其實他也就說明了前面的攔截器都通過啦,攔截器的作用已經達到(沒有錯誤,所以沒攔截,才到達Action)此時返回的jsp頁面是action 決定的。經過action后又逆向經過攔截器棧,此時都一定會在執行各自攔截器中invocation.invoke()方法后的其他后續操作,但其后的return 返回字符串其實不在起作用,也絕不會定向到字符串所指的頁面。(可能會起到最后結束這個攔截器的作用吧  這一點不清楚 無法改變源碼中接口 不能把intercept()變成void類型??所以還未證實)。

        攔截器的作用顧名思義,就是對指定Action起攔截作用。所以一旦攔截到錯誤,就會定向到指定頁面,這時 return 返回字符串就起到了 關鍵作用,可能這就是攔截器public String intercept() 為什么要求是string類型   攔截器中發現不符合要求就會返回字符串中斷攔截器從而定向到指定頁面,這時其后也就不會在執行什么invocation.invoke();所以不存在return 返回字符串語句寫在invocation.invoke()方法之前,默認攔截器中return result;返回的都是invocation.invoke(),實際上就是最后變成execute()返回的字符串。   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM