[Struts 2] 如何快速找出所訪問頁面的真實路徑(轉向哪個.jsp檔案)?
問題
一個遺留的Java EE專案,使用Struts 2框架。專案檔案數量眾多,且架構略有點混亂。
現需要對專案中的部分JSP頁面進行修改。問題在於:點選某個連結後,瀏覽器位址列只顯示“包名”和action的名稱,例如:/StrutsDemo/math/toInput.do,無法快速得知到底跳轉到了哪個JSP檔案(/jsps/input.jsp)。
換句話說:Struts 2框架使用的是MVC架構,JSP檔案的路徑對於瀏覽器是不可見的。
嘗試2種方法:
(1)由於專案中存在大量內容相似的JSP頁面,無法通過查詢頁面內字串的方法來定位對應頁面。
(2)直接對Struts配置檔案進行搜尋:只能定位到對應的action,無法快速得知跳轉到了哪個result。
而且對於使用萬用字元(*)作為名稱的action,集成了多個result,就更加難以定位了。
<action name="*" class="test.HotelAction" method="{1}">
<result name="inputpage">/jsps/hotel/input_hotel.jsp</result>
...
</action>
思考
Struts 2遵循MVC架構。在MVC架構中,Model(JSP)對於View(客戶端瀏覽器)不可見。但是Model(JSP)對於Controller (Struts 2)是可見的。因此,讓Controller (Struts 2)輸出除錯日誌即可。
解決方法
解法1:(最佳方案)
在log4j的配置檔案中,把Struts的日誌輸出級別改為debug,並重新部署專案。
然後,當點選某個連結時,Struts 2就會在控制檯輸出所訪問URI對應的真實JSP路徑了。
解法2:
(破壞MVC架構,且需改動多處程式碼,非最佳方案)
在<result>中加入type="redirect":
<action name="toLogin"class="loginAction"
method="toLogin">
<resultname="success" type="redirect"
</action>