JSP中Action類別是使用者要求和業務邏輯之間的橋樑,其中每個Action充當客戶的一項業務代理,當「RequestProcessor」類別預處理請求時,並且在建立Action實例後,就可以呼叫自身「processActionPerform」方法。
Action類別是使用者請求和業務邏輯之間的橋樑,每個Action充當客戶的一項業務代理。當RequestProcessor類別預處理請求時,在建立了Action的實例後,就呼叫自身的processActionPerform()方法,該方法在呼叫Action類別的execute()。
推薦課程:Java教學。
下面介紹jsp中action的功能:
完整的action
<action path="/aFullAction" type="somePackage.someActionClass"> name="someForm" input="someJSP.jsp" <forward name="successful" path="someJSP.jsp"/> <forward name="failed" path="someOtherJSP.jsp"/> </action>
首先,Struts的ActionServlet接收到一個請求,然後根據struts- config.xml的設定定位到對應的mapping(映射);接下來假如form的範圍是request或在定義的範圍中很難找到這個form,建立一個新的form實例;取得form實例以後,呼叫其reset ( )方法,然後將表單中的參數放入form,假如validate屬性不為false,呼叫validate()方法;假如validate()傳回非空的ActionErrors,將會被轉到input屬性指定的URI,假如返回空的ActionErrors,那麼執行Action的execute() 方法,根據傳回的ActionForward決定目標URI。
這樣做的效果是:execute()只有當validate()成功以後才執行;input屬性指定的是個URI。
只有JSP的action
<action path="/aJSPOnlyAction" type="org.apache.struts.actions.ForwardAction" parameter="someOtherJSP.jsp" />
首先,ActionServlet接到請求後呼叫ForwardAction的execute()方法,execute()根據設定的parameter屬性值來forward到那個URI。
這樣做的效果是:沒有任何form被實例化,比較現實的情形可能是form在request更高層級的範圍中定義;或這個action被用作在應用程式編譯好後充當系統參數,只需要更改這個配置文件而無需重新編譯系統。
兩個action對應一個form
<action path="/anAction" type="somePackage.someActionClass"> name="someForm" input="someJSP.jsp" <forward name="successful" path="/anotherAction.do"/> </action> <action path="/anotherAction" type="somePackage.someOtherActionClass"> name="someForm" input="someOtherJSP.jsp" <forward name="successful" path="someResultJSP.jsp"/> </action>
就每個單獨的action來講,處理上並沒有和完整的action有什麼實質的區分。這個組合模式能夠被用來傳遞命令物件(form)。要注意的是在後一個action中同樣會呼叫form的reset()和validate()方法,因此我們必須確保form中的資訊不會被重寫。
處理的方式大致分為兩種:
a) 在request中放入一個指示器表示前一個action有意後一個action傳遞form,從而在後一個action能夠保留那個form中的值,這個方式只能在使用forward時使用。
b) 當使用redirect而不是forward時,能夠把指示器放在session或更高的級別,在命令鏈的最後一環將這個指示器清除。
<action path="/anAction" type="somePackage.someActionClass"> name="someForm" input="someJSP.jsp" <forward name="successful" path="/anotherAction.do" redirect="true"/> </action> <action path="/anotherAction" type="somePackage.someOtherActionClass">" name="someOtherForm" input="someOtherJSP.jsp" <forward name="successful" path="someResultJSP.jsp"/> </action>
這個組合方式跟前一種在流程上沒有太大區分,只是我們現在對於兩個action分別提供了form,於是程式碼看起來更清楚。於是我們能夠分別處理WEB應用程式的輸入和輸出。
值得注意的是,後一個action同樣會嘗試往form中寫入那些參數,但是我們能夠這樣處理:
a) 在後一個form中使用另一套屬性名;
b) 只提供getter而不提供setter。
大致的處理是這樣:
前一個action接收輸入、驗證、然後將資料寫入業務層或持久層,重定向到後一個action,後一個action手動的從業務層/持久層取出數據,寫入form(透過其他方式),交給前台JSP顯示。
這樣做的好處是不必保留輸入form中的值,因此能夠使用redirect而不是forward。這樣就降低了兩個action之間的耦合度,同時也避免了不必要的重複提交。
以上是jsp中action是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!