天天看點

Struts1.x系列教程(17):使用IncludeAction和ForwardAction類包含和轉入Web資源

本文為原創,如需轉載,請注明作者和出處,謝謝!

一、使用IncludeAction類包含Web資源

    雖然在JSP頁面中可以使用<jsp:include>标簽包含另一個Web資源,但Struts架構提倡在包含Web資源時應先經過Struts控制器處理後,再由Struts控制器負責包含Web資源。org.apache.struts.actions.IncludeAction類提供了包含其他Web資源的功能。使用IncludeAction類要在struts-config.xml中配置<action>元素。配置IncludeAction類的代碼如下:

<action path="/include" type="org.apache.struts.actions.IncludeAction"

            input="/firstValidator.jsp" validate="false"

            name="firstValidatorForm" parameter="/firstValidator.jsp" />

在配置上面代碼時應注意兩點:

1. firstValidator.jsp頁面使用了firstValidatorForm進行資料驗證,所有應将<action>元素的validate屬性設為“false”。否則在運作include動作時就會進行驗證。在這時firstValidatorForm中的所有屬性都沒有被指派。是以每個屬性都無法通過驗證。讀者可以将validate屬性設為“true”,看看會發生什麼情況。

    2. IncludeAction類的功能和效果與<jsp:include>标簽完全一樣。這就意味着在IncludeAction包含的其他Web資源中無法改變響應資訊頭。這樣就無法改變Content-Type字段的值。是以,按着上面的設定來運作程式,所有的中文資訊會顯示亂碼。解決的方法有很多,如可以自己實作一個IncludeAction類的子類,在子類的execute方法中設定Content-Type的值。或都更簡單的方法是在過濾器(EncodingFilter)中加入如下的代碼:   

response.setCharacterEncoding("GBK");

在IE中輸入http://localhost:8080/samples/include.do可通路include動作。

   雖然在JSP頁面中可以使用<jsp:forward>标簽把請求轉發給另一個Web資源,但Struts架構提倡在轉發Web資源時應先經過Struts控制器處理後,再由Struts控制器轉發Web資源。org.apache.struts.actions.ForwardAction類提供了轉發其他Web資源的功能。使用ForwardAction類要在struts-config.xml檔案中配置<action>元素。下面的代碼示範了如何在<action>元素中使用ForwardAction類來包含其他的Web資源:

<action path="/forward" type="org.apache.struts.actions.ForwardAction"

    由于經過轉發的Web資源可以改變Content-Type字段的值,是以,使用ForwardAction類進行轉發時,無需再另外改變Content-Type字段的值(因為在firstValidator.jsp頁面中已經設定了Content-Type的值)。

    在IE中輸入http://localhost:8080/samples/forward.do可通路forward動作。

<a href="http://www.eoeandroid.com/forumdisplay.php?fid=4">國内最棒的Google Android技術社群(eoeandroid),歡迎通路!</a>

繼續閱讀