我使用Struts 1.1(不要让我开始),现在升级不是一个选择。不幸的是,整个单例动作方法让我疯狂并使动作变得相当复杂,因为我们不能使用实例变量等,这意味着所有必需的对象需要作为参数传递给所有方法。我更喜欢使用实例变量,因此我想为Action的执行方法中的每个请求创建一个Action的新实例,如下所示:
public ActionForward execute (ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
return (new SaveUserDataAction()).instanceExecute(mapping, form, request, response);
}
public ActionForward instanceExecute (ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
// all normal execute stuff goes here
}
这很好用,但我想知道你们是否能想到这种方法的任何问题。我知道由于额外的对象创建,这将需要一些额外的CPU周期,但是现在的智慧是每个请求都会有大量的对象创建,而另一个请求会被忽视;更不用说提高可读性和可维护性是值得的。还有其他更严重的缺点吗?
此外,还有一种比这种半克拉式方法更容易的方法吗?也许是Struts支持的方法?
答案 0 :(得分:1)
Struts 1.1 Actions无意执行业务逻辑:
在Struts应用程序中,大多数业务逻辑都可以使用JavaBeans表示。 Action可以在不知道JavaBean实际工作原理的情况下调用JavaBean的属性。这封装了业务逻辑,因此Action可以专注于错误处理以及转发控制的位置。
问题不是您正在创建额外实例,而是您正在创建一个额外的操作实例而不是一些帮助/ dao。< / p>