Struts2中redirectAction使用不當引起的生產環境異常

原始需求:編輯頁面-保存按鈕-保存成功-編輯頁面並且提示成功信息

<action name="editContract" class="contractAction" method="editContract">
<result name="success">/WEB-INF/jsp/contract/editContract.jsp</result>
</action>
<action name="saveContract" class="contractAction" method="saveContract">
<result name="success" type="redirectAction">
<param name="actionName">editContract</param>
<param name="campaignId">${campaignId}</param>
</result>
</action>


以上配置在開發環境,測試環境均沒有任何問題。

但是到生產環境,保存能夠成功,但是跳轉的時候出錯,提示該頁無法顯示。
生產環境配置如下:
Apache的80端口接受外部請求。
Jboss的8080端口處理所有java服務。

Apache接受外部請求後把請求轉發到Jboss:
比如用戶訪問http://www.aaa.com/contract/saveContract.action
apache接受到請求,轉發到Jboss:http://127.0.0.1:8080/contract/saveContract.action
處理完成後,跳轉到http://127.0.0.1:8080/contract/editContract.action。
此時用戶瀏覽器收到的跳轉地址是http://127.0.0.1:8080/contract/editContract.action
從而導致找不到該頁面問題的產生。

redirectAction是外部重定向,服務器端把重定向地址傳遞給瀏覽器,瀏覽器再進行跳轉。之前參數全部丟失,如果要保留參數,需要手工在xml中指定。
chain是服務器端的跳轉,能夠保存前一個action的所有參數。

最終修改成如下:
<action name="editContract" class="contractAction" method="editContract">
<result name="success">/WEB-INF/jsp/contract/editContract.jsp</result>
</action>
<action name="saveContract" class="contractAction" method="saveContract">
<result name="success" type="chain">
<param name="actionName">editContract</param>
</result>
</action>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章