問題
一個遺留的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>