自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JSP中Action屬性的功能淺析

開發(fā) 后端
本文向您詳細介紹JSP中action屬性的功能,并通過實例演示了使用JSP中的action的好處:不必保留輸入form中的值,降低了兩個action之間的耦合度,同時也避免了不必要的重復(fù)提交。

1. 完整的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接收到一個請求,然后根據(jù)struts-config.XML的配置定位到相應(yīng)的mapping(映射);接下來假如form的范圍是request或在定義的范圍中很難找到這個form,創(chuàng)建一個新的form實例;取得form實例以后,調(diào)用其reset ()方法,然后將表單中的參數(shù)放入form,假如validate屬性不為false,調(diào)用validate()方法;假如validate()返回非空的ActionErrors,將會被轉(zhuǎn)到input屬性指定的URI,假如返回空的ActionErrors,那么執(zhí)行Action的execute() 方法,根據(jù)返回的ActionForward確定目標URI。

這樣做的效果是:execute()僅當validate()成功以后才執(zhí)行;input屬性指定的是個URI。

2. 僅有Form的action

﹤action path="/aFormOnlyAction"
type="org.apache.struts.actions.ForwardAction"
name="someForm"
input="someJSP.jsp"
parameter="someOtherJSP.jsp"
/>

首先,Struts會在定義的scope搜尋someForm,假如找到則重用,假如很難找到則新建一個實例;取得form實例以后,調(diào)用其reset()方法,然后將表單中的參數(shù)放入form,假如validate屬性不為false,調(diào)用validate()方法;假如validate()返回非空的 ActionErrors,將會被轉(zhuǎn)到input屬性指定的URI,假如返回空的ActionErrors,那么轉(zhuǎn)到parameter屬性指定的目標 URI。

這樣做的效果是:沒有action類能夠存放我們的業(yè)務(wù)邏輯,所以任何需要寫入的邏輯都只能寫到form的reset()或 validate()方法中。validate()的作用是驗證和訪問業(yè)務(wù)層。因為這里的action映射不包括forward(也沒有意義),所以不能重定向,只能用默認的那個forward。這種僅有form的action能夠用來處理數(shù)據(jù)獲取并forward到另一個JSP來顯示。

3. 僅有Action的action

﹤action path="/anActionOnlyAction"
type="somePackage.someActionClass"﹥
input="someJSP.jsp"
﹤forward name="successful" path="someJSP.jsp"/﹥
﹤forward name="failed" path="someOtherJSP.jsp"/﹥
﹤/action﹥

首先,ActionServlet接收到請求后,取得action類實例,調(diào)用execute()方法;然后根據(jù)返回的ActionForward在配置中找forward,forward到指定的URI或action。

這樣做的效果是:沒有form實例被傳入execute()方法,于是execute()必須自己從請求中獲取參數(shù)。Action能夠被forward或重定向。這種action不能處理通過HTML FORM提交的請求,只能處理鏈接式的請求。

4. 僅有JSP的action

﹤action path="/aJSPOnlyAction"
type="org.apache.struts.actions.ForwardAction"
parameter="someOtherJSP.jsp"
/﹥

首先,ActionServlet接到請求后調(diào)用ForwardAction的execute()方法,execute()根據(jù)配置的parameter屬性值來forward到那個URI。

這樣做的效果是:沒有任何form被實例化,比較現(xiàn)實的情形可能是form在request更高級別的范圍中定義;或這個action被用作在應(yīng)用程式編譯好后充當系統(tǒng)參數(shù),只需要更改這個配置文檔而無需重新編譯系統(tǒng)。

5. 兩個action對應(yīng)一個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有什么實質(zhì)的區(qū)分。這個組合模式能夠被用來傳遞命令對象(form)。需要注意的是在后一個action中同樣會調(diào)用form的reset()和validate()方法,因此我們必須確保form中的信息不被重寫。

處理的方式大致分為兩種:

a) 在request中放入一個指示器表明前一個action有意向后一個action傳遞form,從而在后一個action能夠保留那個form中的值,這一方式只能在使用forward時使用。b) 當使用redirect而不是forward時,能夠把指示器放在session或更高的級別,在命令鏈的***一環(huán)將這個指示器清除。

﹤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﹥

這個組合方式跟前一種在流程上沒有太大區(qū)分,只是我們現(xiàn)在對于兩個action分別提供了form,于是代碼看上去更加清楚。于是我們能夠分別處理Web應(yīng)用程式的輸入和輸出。值得注意的是,后一個action同樣會嘗試往form中寫入那些參數(shù),但是我們能夠這樣處理:

a) 在后一個form中使用另一套屬性名;

b) 只提供getter而不提供setter。

大致的處理是這樣:

前一個action接收輸入、驗證、然后將數(shù)據(jù)寫入業(yè)務(wù)層或持久層,重定向到后一個action,后一個action手動的從業(yè)務(wù)層/持久層取出數(shù)據(jù),寫入form(通過其他方式),交給前臺JSP顯示。

這樣做的好處是不必保留輸入form中的值,因此能夠使用redirect而不是forward。這樣就降低了兩個action之間的耦合度,同時也避免了不必要的重復(fù)提交。

【編輯推薦】

  1. JSP***實踐 使用JSTL來更新JSP頁面
  2. 對比JSP和ASP.NET的存儲過程
  3. JSP和IIS的***解決方案實例分析
責任編輯:book05 來源: 天新網(wǎng)
相關(guān)推薦

2011-07-08 11:19:51

jspaction

2009-06-06 18:43:34

JSP Action

2009-07-06 15:31:42

JSP Action

2009-07-02 10:51:21

腳本編程JSP開發(fā)

2009-06-30 16:58:09

requestJSP

2009-07-14 10:47:47

MyEclipse J

2009-06-16 15:20:48

ApplicationJSP程序

2010-08-24 13:14:36

CSSmargin

2009-07-02 17:06:36

JSP中的PageEn

2009-06-29 17:39:31

JSP設(shè)計模式

2009-07-06 13:52:56

編寫JSP Tag

2009-07-01 18:20:29

JSP的優(yōu)勢

2009-03-02 09:45:45

2009-07-03 17:48:34

JSP頁面翻譯

2009-07-02 13:51:05

對象和范圍屬性

2009-07-16 16:08:30

WebWork Act

2009-07-02 11:34:42

JSP指令JSP開發(fā)

2009-07-06 17:11:38

Servlet文件上傳

2009-07-03 09:08:23

JSP標記學習筆記

2009-07-06 14:05:11

JSP服務(wù)器
點贊
收藏

51CTO技術(shù)棧公眾號