我想做一些记录,在动作类的执行方法之前和之后。我正在使用 struts 1.3 。这更像是方面编程。
我通过覆盖它尝试了 RequestProcessor 的 processPreprocess() ,但这仅在 execute() 之前调用。另外,我想在两个地方(之前和之后)访问 ActionMapping。
我怎样才能做到这一点?
我想你应该尝试过滤来满足你的要求。创建一个过滤器做映射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
,通过扩展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 ;
}