Java Code Examples for org.apache.catalina.connector.Request.isAsyncCompleting()

The following are Jave code examples for showing how to use isAsyncCompleting() of the org.apache.catalina.connector.Request class. You can vote up the examples you like. Your votes will be used in our system to get more good examples.
Example 1
Project: tomcat7   File: ErrorReportValve.java   Source Code and License Vote up 5 votes
/**
 * Invoke the next Valve in the sequence. When the invoke returns, check
 * the response state. If the status code is greater than or equal to 400
 * or an uncaught exception was thrown then the error handling will be
 * triggered.
 *
 * @param request The servlet request to be processed
 * @param response The servlet response to be created
 *
 * @exception IOException if an input/output error occurs
 * @exception ServletException if a servlet error occurs
 */
@Override
public void invoke(Request request, Response response) throws IOException, ServletException {

    // Perform the request
    getNext().invoke(request, response);

    if (response.isCommitted()) {
        if (response.setErrorReported()) {
            // Error wasn't previously reported but we can't write an error
            // page because the response has already been committed. Attempt
            // to flush any data that is still to be written to the client.
            try {
                response.flushBuffer();
            } catch (Throwable t) {
                ExceptionUtils.handleThrowable(t);
            }
            // Close immediately to signal to the client that something went
            // wrong
            response.getCoyoteResponse().action(ActionCode.CLOSE_NOW, null);
        }
        return;
    }

    Throwable throwable = (Throwable) request.getAttribute(RequestDispatcher.ERROR_EXCEPTION);

    // If an async request is in progress and is not going to end once this
    // container thread finishes, do not process any error page here.
    if (request.isAsync() && !request.isAsyncCompleting()) {
        return;
    }

    if (throwable != null && !response.isError()) {
        // Make sure that the necessary methods have been called on the
        // response. (It is possible a component may just have set the
        // Throwable. Tomcat won't do that but other components might.)
        // These are safe to call at this point as we know that the response
        // has not been committed.
        response.reset();
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    }

    // One way or another, response.sendError() will have been called before
    // execution reaches this point and suspended the response. Need to
    // reverse that so this valve can write to the response.
    response.setSuspended(false);

    try {
        report(request, response, throwable);
    } catch (Throwable tt) {
        ExceptionUtils.handleThrowable(tt);
    }
}
 
Example 2
Project: apache-tomcat-7.0.73-with-comment   File: ErrorReportValve.java   Source Code and License Vote up 5 votes
/**
 * Invoke the next Valve in the sequence. When the invoke returns, check
 * the response state. If the status code is greater than or equal to 400
 * or an uncaught exception was thrown then the error handling will be
 * triggered.
 *
 * @param request The servlet request to be processed
 * @param response The servlet response to be created
 *
 * @exception IOException if an input/output error occurs
 * @exception ServletException if a servlet error occurs
 */
@Override
public void invoke(Request request, Response response) throws IOException, ServletException {

    // Perform the request
    getNext().invoke(request, response);

    if (response.isCommitted()) {
        if (response.setErrorReported()) {
            // Error wasn't previously reported but we can't write an error
            // page because the response has already been committed. Attempt
            // to flush any data that is still to be written to the client.
            try {
                response.flushBuffer();
            } catch (Throwable t) {
                ExceptionUtils.handleThrowable(t);
            }
            // Close immediately to signal to the client that something went
            // wrong
            response.getCoyoteResponse().action(ActionCode.CLOSE_NOW, null);
        }
        return;
    }

    Throwable throwable = (Throwable) request.getAttribute(RequestDispatcher.ERROR_EXCEPTION);

    // If an async request is in progress and is not going to end once this
    // container thread finishes, do not process any error page here.
    if (request.isAsync() && !request.isAsyncCompleting()) {
        return;
    }

    if (throwable != null && !response.isError()) {
        // Make sure that the necessary methods have been called on the
        // response. (It is possible a component may just have set the
        // Throwable. Tomcat won't do that but other components might.)
        // These are safe to call at this point as we know that the response
        // has not been committed.
        response.reset();
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    }

    // One way or another, response.sendError() will have been called before
    // execution reaches this point and suspended the response. Need to
    // reverse that so this valve can write to the response.
    response.setSuspended(false);

    try {
        report(request, response, throwable);
    } catch (Throwable tt) {
        ExceptionUtils.handleThrowable(tt);
    }
}
 
Example 3
Project: lazycat   File: ErrorReportValve.java   Source Code and License Vote up 5 votes
/**
 * Invoke the next Valve in the sequence. When the invoke returns, check the
 * response state. If the status code is greater than or equal to 400 or an
 * uncaught exception was thrown then the error handling will be triggered.
 *
 * @param request
 *            The servlet request to be processed
 * @param response
 *            The servlet response to be created
 *
 * @exception IOException
 *                if an input/output error occurs
 * @exception ServletException
 *                if a servlet error occurs
 */
@Override
public void invoke(Request request, Response response) throws IOException, ServletException {

	// Perform the request
	getNext().invoke(request, response);

	if (response.isCommitted()) {
		if (response.setErrorReported()) {
			// Error wasn't previously reported but we can't write an error
			// page because the response has already been committed. Attempt
			// to flush any data that is still to be written to the client.
			try {
				response.flushBuffer();
			} catch (Throwable t) {
				ExceptionUtils.handleThrowable(t);
			}
			// Close immediately to signal to the client that something went
			// wrong
			response.getCoyoteResponse().action(ActionCode.CLOSE_NOW, null);
		}
		return;
	}

	Throwable throwable = (Throwable) request.getAttribute(RequestDispatcher.ERROR_EXCEPTION);

	// If an async request is in progress and is not going to end once this
	// container thread finishes, do not process any error page here.
	if (request.isAsync() && !request.isAsyncCompleting()) {
		return;
	}

	if (throwable != null && !response.isError()) {
		// Make sure that the necessary methods have been called on the
		// response. (It is possible a component may just have set the
		// Throwable. Tomcat won't do that but other components might.)
		// These are safe to call at this point as we know that the response
		// has not been committed.
		response.reset();
		response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
	}

	// One way or another, response.sendError() will have been called before
	// execution reaches this point and suspended the response. Need to
	// reverse that so this valve can write to the response.
	response.setSuspended(false);

	try {
		report(request, response, throwable);
	} catch (Throwable tt) {
		ExceptionUtils.handleThrowable(tt);
	}
}