首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

应用DispatchAction类,为你的系统减肥

2012-10-30 
使用DispatchAction类,为你的系统减肥!发表:2005-5-26 2:22:41 出处:你的博客网(yourblog.org) ?在Struts

使用DispatchAction类,为你的系统减肥!

发表:2005-5-26 2:22:41 出处:你的博客网(yourblog.org)

?

在Struts中你要尽可能的不用Action类,因为他们让你的项目变得臃肿,你可以使用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定义:

path="/account"??????????
type="onlyfun.caterpillar.AccountAction"????????????
parameter="method"????????????
name="userForm">??????????????????????????
name="greeting"??????????????
path="/login/greeting.jsp"/>??????

主要就是在parameter的属性上,我们指定以method请求参数来指定我们所要使用的方法,例如下面的网址将会执行AccountAction的login()方法:http://localhost:8080/HelloStruts/account.do?method=login&name=caterpillar&password=1234注意在请求参数中,我们包括了method=login来指定执行login()方法,同样的,如果你要执行logout()方法


? 1 楼 myworkfirst 2007-11-29       用过,是很方便,在参数后面带方法名,就可以直接调用该 action的方法. 不过在程序设计上需待考虑,还有性能上,虽然代码量减少,但性能上不知道是否有所改观(本人没做测试). 2 楼 hantsy 2007-11-29   这只是Action的一个扩展而已,初衷是减少action的配置。。。
如果使用validation框架的话,它不能省事,如在user的crud中,它会对所有操作应用验证,而你只需要对c,u 操作进行验证,一种解决方法是,你不得不重新为一个action重新设置几个不同的path(不需要验证的path禁用验证),或针对path进行验证(extends ValidatorActionForm) ,另一种方法是默认不启用validation(action中validate="false"),在要使用难验证的方法中直接调用actionform的validate方法,你不得不手动写验证方法。 3 楼 coder1982 2007-11-29   楼主在时空隧道中遨游。。。

两年前的话题了。。 4 楼 loky 2007-11-29   用DispatchAction 并不能真正做到为系统减肥的目的。但是可以参考实现一些同一类型功能的实现。

热点排行