我想在动作类的execute方法之前和之后做一些事情。我正在使用struts 1.3。这更像是方面编程。
我通过覆盖它来尝试RequestProcessor的processPreprocess(),但是只在execute()之前调用它。另外,我想在两个地方(之前和之后)访问ActionMapping。
我怎样才能做到这一点?
答案 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
。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 ;
}