in server/src/main/java/org/apache/asyncweb/server/context/AbstractHttpServiceContext.java [109:168]
public boolean commitResponse( HttpResponse response )
{
synchronized ( this )
{
if ( isResponseCommitted() )
{
log.info( "Request already comitted to a response. Disposing response" );
return false;
}
committedResponse = response;
}
// Add the session identifier if the session was newly created.
if ( createdSession )
{
container.getSessionAccessor().addSessionIdentifier( this, ( MutableHttpResponse ) response );
}
// Only parsed requests can be formatted.
if ( getRequest().getMethod() != null )
{
container.getErrorResponseFormatter().formatResponse( getRequest(), ( MutableHttpResponse ) response );
}
if ( container.isSendServerHeader() )
{
( ( MutableHttpResponse ) response ).setHeader( HttpHeaderConstants.KEY_SERVER, "AsyncWeb" );
}
// Normalize the response.
( ( MutableHttpResponse ) response ).normalize( getRequest() );
// Override connection header if needed.
if ( ! container.getKeepAliveStrategy().keepAlive( this, response ) )
{
( ( MutableHttpResponse ) response ).setHeader( HttpHeaderConstants.KEY_CONNECTION,
HttpHeaderConstants.VALUE_CLOSE );
}
boolean requiresClosure = ! HttpHeaderConstants.VALUE_KEEP_ALIVE
.equalsIgnoreCase( response.getHeader(HttpHeaderConstants.KEY_CONNECTION ) );
if ( requiresClosure && log.isDebugEnabled() )
{
log.debug("Response status: " + response.getStatus());
log.debug("Keep-alive strategy requires closure of "
+ getRemoteAddress());
}
if ( log.isDebugEnabled() )
{
log.debug( "Committing a response:" );
log.debug( "Status: " + response.getStatus() + ' ' + response.getStatusReasonPhrase() );
log.debug( "Headers: " + response.getHeaders() );
}
doWrite( requiresClosure );
return true;
}