论坛首页 Java企业应用论坛

自定义的Action基类扩展struts框架

浏览 2449 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-16  
   
    在struts中,对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成的,其中Action扮演了真正的业务逻辑的实现者,ActionMapping与ActionForward则指定了不同业务逻辑或流程的运行方向。
    在struts应用中,每个Action类都需要从 org.apache.struts.action.Action 继承而来。但实际应用中,我们喜欢从Action类中总结出来了一些通用特性。因此,构造一个基类将这些通用特性的代码实现出来,让应用中所用到的所有Action类直接继承我们构造的基类,而不是继承org.apache.struts.action.Action.从总结出来的通用特性中,最常见的是用户是否登陆,判断session失效,用户权限认证,错误日志打印等.这些通用特性都在自己构造的基类中实现,而且不需要在其他Action类中去调用
思路:
我的struts版本是struts1.0
1.定义一个抽象的基类ComAction,该基类继承org.apache.struts.action.Action
2.在ComAction定义一个抽象方法execute,应用中的其他action类都要覆盖这个方法,在这个方法实现具体的业务逻辑.
3.在ComAction中定义一个方法perform,是用来覆盖Action的perform方法,在这个方法中,完成公用的特性
4.在perform调用抽象类execute.
具体实现,以判断session是否失效为例:
import javax.servlet.http.*;
import org.apache.struts.action.*;
public abstract class ComAction extends Action {
	public ComAction() {
	}
	public ActionForward perform(ActionMapping mapping,
				     ActionForm form,
				     HttpServletRequest request,
				     HttpServletResponse response
				    ) {
		try {
		   HttpSession   session=request.getSession();
                   //判断session是否失效
                   if(session.getAttribute("userId")!=null)
                      //否,执行业务逻辑
                      forwardTo = perform(mapping, form, request, response);
                   else
                      //是,跳转到错误页面
                      forwardTo ="syserr";
		} catch (Exception e) {
                        //有异常,也跳转到错误页面
			forwardTo = "syserr";
			System.out.println("Exception :" + e.getMessage());
		}

		return (mapping.findForward(forwardTo));
	}

	
    public abstract String execute(
        ActionMapping mapping,
        ActionForm form,
        HttpServletRequest request,
        HttpServletResponse response);
}




文章欢迎转载,但请注明出处和作者
   发表时间:2008-11-16  
这兄弟的forwardTo变量还没有定义哦,贴的代码被切过把,呵呵
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics