2

我想做一些记录,在动作类的执行方法之前和之后。我正在使用 struts 1.3 。这更像是方面编程。

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

我怎样才能做到这一点?

4

1 回答 1

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);


    }

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

  • 创建一个 Action 类,比如说MyAction,通过扩展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;
  • before()在 MyAction 中,向应用程序添加一个或多个通用方法,例如after().

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

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

在 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 ;

}
于 2013-03-07T08:43:26.080 回答