code: 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()
          }
      }
docs: 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.