您為每一個動作撰寫一個Action類,隨著網站的增大,維護Action的成本也就隨著增大,您可以使用 模組化程式
來管理,而另一方面,在檢視一些Action時,您會發現某些Action所執行的,其實是完成一個業務邏輯所需要的連續動作或相關動作,例如帳號的登
入、登出等動作。
在Struts中,您可以使用org.apache.struts.actions.DispatchAction類別將完成一個業務邏輯所需要的連續動
作或相關動作集中於一個Action類中,在繼承DispatchAction後,您不再是重新定義execute()方法,而是撰寫自己的動作,
execute()方法已在DispatchAction抽象類中定義。
例如可以繼承DispatchAction來定義一個AccountAction,在當中集中管理一些與帳號相關的操作,一個例子如下:
package onlyfun.caterpillar;
import javax.servlet.http.*; import org.apache.struts.action.*; import org.apache.struts.actions.*;
public class AccountAction extends DispatchAction { public ActionForward login(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // 進行一些Login的邏輯 ...... }
public ActionForward logout(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // 進行一些Logout的邏輯 ...... }
public ActionForward method1(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // 進行一些method1的邏輯 ...... }
..... }
程式中不再重新定義execute()方法,而是定義我們自己的login()、logout()等方法,這些方法接收與execute()相同的參數,並且也傳回ActionForward物件。
使用DispatchAction時,要在struts-config.xml定義:
... <action path="/account" type="onlyfun.caterpillar.AccountAction" parameter="method" name="userForm"> <forward name="greeting" path="/WEB-INF/pages/greeting.jsp"/> </action> ...
主要就是在parameter的屬性上,我們指定依method請求參數來指定所要執行的方法,例如下面的網址將會執行AccountAction的 login()方法:
http://localhost:8080/strutsapp/account.do?method=login
注意在請求參數中,包括了method=login來指定執行login()方法,同樣的,如果您要執行logout()方法,則如下:
http://localhost:8080/strutsapp/account.do?method=logout
|
|