如何在Struts 1.3中的action的execute方法之前和之后做一些事情?

时间:2013-03-07 08:27:45

标签: request struts struts-1

我想在动作类的execute方法之前和之后做一些事情。我正在使用struts 1.3。这更像是方面编程。

我通过覆盖它来尝试RequestProcessor的processPreprocess(),但是只在execute()之前调用它。另外,我想在两个地方(之前和之后)访问ActionMapping。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

我猜你应该尝试过滤以达到你的要求。在web.xml中创建一个过滤器执行映射,并在下面的代码中覆盖doFilter方法。

 public void doFilter(ServletRequest request, ServletResponse response,

       FilterChain chain) throws IOException, ServletException {

        beforeMethod(request,response);

        chain.doFilter(request, response);

        afterMethod(request,response);


    }

如果过滤器不适用或符合您的要求,请尝试以下逻辑。

  • 通过扩展MyAction来创建一个Action类,比如org.apache.struts.action.Action
  • 通过扩展Action classes
  • 在您的Web应用程序中创建所有其他MyAction

MyAction中,创建方法operate(),如

public abstract ActionForward operate(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException;
  • 在MyAction中,向应用程序添加一个或多个通用方法,例如before()after()

  • 如果所有Action类都必须实现此方法,请将其设为abstract

  • 如果某些Action类将提供特定于案例的实现,请声明受保护的方法并为其提供默认实现。

在MyAction中覆盖执行方法,如下面的代码

public ActionForward execute (ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
 {

           before();

           ActionForward forward = operate(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)

           after();

           return forward ;

}