public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request,
                                  HttpServletResponse response )
            throws Exception
    {
        //
        // Don't actually run the action (and perform the associated synchronization) if there are too many
        // concurrent requests to this instance.
        //
        if ( incrementRequestCount( request, response, getServletContext() ) )
        {
            try
            {
                // netui:sync-point
                synchronized ( this )
                {
                    ActionForward ret = null;

                    // establish the control context for running the beginAction, Action, afterAction code
                    PageFlowControlContainer pfcc = null;
                    try {
                        pfcc = PageFlowControlContainerFactory.getControlContainer(request,getServletContext());
                        pfcc.beginContextOnPageFlow(this,request,response, getServletContext());
                    }
                    catch (Exception e) {
                        return handleException(e, mapping, form, request, response);
                    }

                    try {
                        // execute the beginAction, Action, afterAction code
                        ret = internalExecute( mapping, form, request, response );
                    }
                    finally {
                        try {
                            pfcc.endContextOnPageFlow(this);
                        }
                        catch (Exception e) {
                            // if already handling an exception during execute, then just log
                            PageFlowRequestWrapper rw = PageFlowRequestWrapper.get(request);
                            Throwable alreadyBeingHandled = rw.getExceptionBeingHandled();
                            if (alreadyBeingHandled != null) {
                                _log.error( "Exception thrown while ending context on page flow in execute()", e );
                            }
                            else {
                                return handleException(e, mapping, form, request, response);
                            }
                        }
                    }
                    return ret;
                }
            }
            finally
            {
                decrementRequestCount( request );
            }
        }
        else
        {
            return null;    // error was written to the response by incrementRequestCount()
        }
    }
public ActionForward execute ( ActionMapping mapping , ActionForm form , HttpServletRequest request , HttpServletResponse response ) throws Exception { if ( incrementRequestCount ( request , response , getServletContext ( ) ) ) { try { synchronized ( this ) { ActionForward ret = null ; PageFlowControlContainer pfcc = null ; try { pfcc = PageFlowControlContainerFactory . getControlContainer ( request , getServletContext ( ) ) ; pfcc . beginContextOnPageFlow ( this , request , response , getServletContext ( ) ) ; } catch ( Exception e ) { return handleException ( e , mapping , form , request , response ) ; } try { ret = internalExecute ( mapping , form , request , response ) ; } finally { try { pfcc . endContextOnPageFlow ( this ) ; } catch ( Exception e ) { PageFlowRequestWrapper rw = PageFlowRequestWrapper . get ( request ) ; Throwable alreadyBeingHandled = rw . getExceptionBeingHandled ( ) ; if ( alreadyBeingHandled != null ) { _log . error ( "Exception thrown while ending context on page flow in execute()" , e ) ; } else { return handleException ( e , mapping , form , request , response ) ; } } } return ret ; } } finally { decrementRequestCount ( request ) ; } } else { return null ; } }
Perform decision logic to determine the next URI to be displayed.

@param mapping the Struts ActionMapping for the current action being processed.
@param form the form-bean (if any) associated with the Struts action being processed.  May be null.
@param request the current HttpServletRequest.
@param response the current HttpServletResponse.
@return a Struts ActionForward object that specifies the next URI to be displayed.
@throws Exception if an Exception was thrown during user action-handling code.