2014-10-29 69 views
1

扩展Action(Struts 1.3.10)的类的生命周期是什么?LifeTime Action类Struts 1.3.10

public class AddProcessAction extends Action { 

    ProcBox procBox = new ProcBox(); 

    @Override 
    public ActionForward execute(ActionMapping mapping, 
           ActionForm form, 
           HttpServletRequest request, 
           HttpServletResponse response) throws Exception { 
     procBox.addToProcBox((ProcessForm)form); 
     return mapping.findForward("success"); 
    } 
} 

回答

2

Struts 1.x操作是单例并且持续应用程序的生命周期。

因此,它们必须是可重入的并且是线程安全的。

除非您只有一个用户,否则上述示例将无法正常工作。

需要创建ProcBox实例变量并将其存储在HttpSession中,该HttpSession对每个客户端都是唯一的。你可以使用类似的东西:

public class AddProcessAction extends Action { 

    private static final String PROC_BOX_SESSION_ATTR = "addProcessAction.procBox"; 

    @Override 
    public ActionForward execute(ActionMapping mapping, 
           ActionForm form, 
           HttpServletRequest request, 
           HttpServletResponse response) throws Exception { 
     final procBox = acquireProcBoxFrom(request); 
     procBox.addToProcBox((ProcessForm)form); 
     return mapping.findForward("success"); 
    } 

    private ProcBox acquireProcBoxFrom(HttpServletRequest request) { 
     final HttpSession httpSession = request.getSession(); 
     ProcBox procBox = (ProcBox)httpSession.getAttribute(PROC_BOX_SESSION_ATTR); 
     if (procBox == null) { 
      procBox = new ProcBox(); 
      httpSession.setAttribute(PROC_BOX_SESSION_ATTR, procBox); 
     } 
     return procBox; 
    } 

}