程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> Struts中不同的Action和ActionForm組合

Struts中不同的Action和ActionForm組合

編輯:關於JSP

在TSS.com上看到一篇好文,有關Struts使用中各種不同的Action和ActionForm組合的利弊。我先消化一下,整理好,供大家參考。原文標題:Struts action mappings: Divide Et Impera,作者:Michael Juravlev。在TSS上的URL:http://www.theserverside.com/articles/article.tss?l=StrutsActionMapping
說明:閱讀本文需要一定的Struts基礎。
注:文中小寫的action不一定代表具體的Struts Action類,有時也指作為一個整體的action mapping。
[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接收到一個請求,然後根據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。
[2] 僅有Form的action
<action path="/aFormOnlyAction"
type="org.apache.struts.actions.ForwardAction"
name="someForm"
input="someJSP.jsp"
parameter="someOtherJSP.jsp"
/>
首先,Struts會在定義的scope搜尋someForm,如果找到則重用,如果找不到則新建一個實例;取得form實例以後,調用其reset()方法,然後將表單中的參數放入form,如果validate屬性不為false,調用validate()方法;如果validate()返回非空的ActionErrors,將會被轉到input屬性指定的URI,如果返回空的ActionErrors,那麼轉到parameter屬性指定的目標URI。
這樣做的效果是:沒有action類可以存放我們的業務邏輯,所以所有需要寫入的邏輯都只能寫到form的reset()或者validate()方法中。validate()的作用是驗證和訪問業務層。因為這裡的action映射不包括forward(也沒有意義),所以不能重定向,只能用默認的那個forward。這種僅有form的action可以用來處理數據獲取並forward到另一個JSP來顯示。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved