自定义的Action基类扩展struts框架
在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);}