1. 完整的action
name="someform"
input="somejsp.jsp"
首先,actionservlet接收到請求後,取得action類例項,呼叫execute()方法;然後根據返回的actionforward在配置中找forward,forward到指定的uri或action。
這樣做的效果是:沒有form例項被傳入execute()方法,於是execute()必須自己從請求中獲取引數。action可以被forward或者重定向。這種action不能處理通過html form提交的請求,只能處理鏈結式的請求。
4. 僅有jsp的action
首先,actionservlet接到請求後呼叫forwardaction的execute()方法,execute()根據配置的parameter屬性值來forward到那個uri。
這樣做的效果是:沒有任何form被例項化,比較現實的情形可能是form在request更高階別的範圍中定義;或者這個action被用作在應用程式編譯好後充當系統引數,只需要更改這個配置檔案而不需要重新編譯系統。
5. 兩個action對應乙個form
name="someform"
input="somejsp.jsp"
name="someform"
input="someotherjsp.jsp"
就每個單獨的action來講,處理上並沒有和完整的action有什麼實質的區別。這個組合模式可以被用來傳遞命令物件(form)。需要注意的是在後乙個action中同樣會呼叫form的reset()和validate()方法,因此我們必須確保form中的資訊不被重寫。
處理的方式大致分為兩種:
a) 在request中放入乙個指示器表明前乙個action有意向後乙個action傳遞form,從而在後乙個action可以保留那個form中的值,這一方式只能在使用forward時使用。b) 當使用redirect而不是forward時,可以把指示器放在session或更高的級別,在命令鏈的最後一環將這個指示器清除。
name="someform"
input="somejsp.jsp"
" name="someotherform"
input="someotherjsp.jsp"
這個組合方式跟前一種在流程上沒有太大區別,只是我們現在對於兩個action分別提供了form,於是**看上去更加清晰。於是我們可以分別處理 web應用程式的輸入和輸出。值得注意的是,後乙個action同樣會嘗試往form中寫入那些引數,不過我們可以這樣處理:a) 在後乙個form中使用另一套屬性名;
b) 只提供getter而不提供setter。
大致的處理是這樣:
前乙個action接收輸入、驗證、然後將資料寫入業務層或持久層,重定向到後乙個action,後乙個action手動的從業務層/持久層取出資料,寫入form(通過其他方式),交給前台jsp顯示。
這樣做的好處是不必保留輸入form中的值,因此可以使用redirect而不是forward。這樣就降低了兩個action之間的耦合度,同時也避免了不必要的重複提交。
struts1學習筆記1
1.struts是mvc模式的經典應用。它主要是提供乙個好的控制器和一套定製的標籤庫 優點 結構層次分明,高重用性。2.開發環境搭建 建立乙個struts1的工程,匯入struts1的jar包 在web inf目錄中新增乙個struts config.xml,配置web.xml檔案中新增處理stru...
struts1學習筆記一
使用者註冊案例 1.寫乙個register.jsp頁面 2 匯入struts開發包,在web.xml中配置struts寫的 actionservlet,讓它處理所有的.do請求。actionservlet org.apache.struts.action.actionservlet config w...
struts1學習筆記二
action和actionform的重用 1 actionform的重用 a 使用dynaactionform減少actionform原始檔數量,便於 維護 b 多個請求使用同乙個actionform 2 action的重用 a dispachaction 通過引數值識別不同的請求 1 action...