1. 程式人生 > >[Struts 2] 如何快速找出所訪問頁面的真實路徑(轉向哪個.jsp檔案)?

[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"

>/loginBefore.jsp</result>  
</action>