saveActionBean(request);
    protected void doPost(final HttpServletRequest request, final HttpServletResponse response)        throws ServletException {        // It sucks that we have to do this here (in the request cycle), but there doesn't        // seem to be a good way to get at the Configuration from the Filter in init()        doOneTimeConfiguration();        ///////////////////////////////////////////////////////////////////////        // Here beings the reall processing of the request!        ///////////////////////////////////////////////////////////////////////        log.trace("Dispatching request to URL: ", request.getRequestURI());        PageContext pageContext = null;        try {            final Configuration config = StripesFilter.getConfiguration();            // First manufacture an ActionBeanContext            final ActionBeanContext context =                    config.getActionBeanContextFactory().getContextInstance(request, response);            context.setServletContext(getServletContext());            // Then setup the ExecutionContext that we'll use to process this request            final ExecutionContext ctx = new ExecutionContext();            ctx.setInterceptors(config.getInterceptors(LifecycleStage.ActionBeanResolution));            ctx.setLifecycleStage(LifecycleStage.ActionBeanResolution);            ctx.setActionBeanContext(context);            // It's unclear whether this usage of the JspFactory will work in all containers. It looks            // like it should, but still, we should be careful not to screw up regular request            // processing if it should fail. Why do we do this?  So we can have a container-agnostic            // way of getting an ExpressionEvaluator to do expression based validation            try {                ActionBeanContext abc = ctx.getActionBeanContext();                pageContext = JspFactory.getDefaultFactory().getPageContext(this, // the servlet inst                                                                            abc.getRequest(), // req                                                                            abc.getResponse(), // res                                                                            null,   // error page url                                                                            true,   // need session                                                                            abc.getResponse().getBufferSize(),                                                                            true); // autoflush                DispatcherHelper.setPageContext(pageContext);            }            catch (Exception e) {                // Don't even log this, this failure gets reported if action beans actually                // try and make use of expression validation, otherwise this is just noise            }            // Resolve the ActionBean, and if an interceptor returns a resolution, bail now            Resolution resolution = resolveActionBean(ctx);            saveActionBean(request);            if (resolution == null) {                resolution = resolveHandler(ctx);                if (resolution == null) {                    // Then run binding and validation                    resolution = doBindingAndValidation(ctx);                    if (resolution == null) {                        // Then continue on to custom validation                        resolution = doCustomValidation(ctx);                        if (resolution == null) {                            // And then validation error handling                            resolution = handleValidationErrors(ctx);                            if (resolution == null) {                                // And finally(ish) invoking of the event handler                                resolution = invokeEventHandler(ctx);                                // If the event produced errors, fill them in                                DispatcherHelper.fillInValidationErrors(ctx);                            }                        }                    }                }            }            // Whatever stage it came from, execute the resolution            if (resolution != null) {                executeResolution(ctx, resolution);            }        }        catch (ServletException se) { throw se; }        catch (RuntimeException re) { throw re; }        catch (InvocationTargetException ite) {            if (ite.getTargetException() instanceof ServletException) {                throw (ServletException) ite.getTargetException();            }            else if (ite.getTargetException() instanceof RuntimeException) {                throw (RuntimeException) ite.getTargetException();            }            else {                throw new StripesServletException                    ("ActionBean execution threw an exception.", ite.getTargetException());            }        }        catch (Exception e) {            throw new StripesServletException("Exception encountered processing request.", e);        }        finally {            // Make sure to release the page context            if (pageContext != null) {                JspFactory.getDefaultFactory().releasePageContext(pageContext);                DispatcherHelper.setPageContext(null);            }            restoreActionBean(request);        }    }