首頁  >  文章  >  Java  >  jsp中action是什麼

jsp中action是什麼

(*-*)浩
(*-*)浩原創
2019-05-15 11:18:0810496瀏覽

JSP中Action類別是使用者要求和業務邏輯之間的橋樑,其中每個Action充當客戶的一項業務代理,當「RequestProcessor」類別預處理請求時,並且在建立Action實例後,就可以呼叫自身「processActionPerform」方法。

jsp中action是什麼

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:什麼是jstl下一篇:什麼是jstl