Java tutorial
package org.apache.http.impl; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; import org.apache.http.HttpEntity; import org.apache.http.HttpEntityEnclosingRequest; import org.apache.http.HttpException; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.apache.http.HttpServerConnection; import org.apache.http.HttpStatus; import org.apache.http.annotation.NotThreadSafe; import org.apache.http.config.MessageConstraints; import org.apache.http.entity.ContentLengthStrategy; import org.apache.http.impl.entity.DisallowIdentityContentLengthStrategy; import org.apache.http.impl.io.DefaultHttpRequestParserFactory; import org.apache.http.impl.io.DefaultHttpResponseWriterFactory; import org.apache.http.io.HttpMessageParser; import org.apache.http.io.HttpMessageParserFactory; import org.apache.http.io.HttpMessageWriter; import org.apache.http.io.HttpMessageWriterFactory; import org.apache.http.util.Args; @NotThreadSafe public class DefaultBHttpServerConnection extends BHttpConnectionBase implements HttpServerConnection { private final HttpMessageParser<HttpRequest> requestParser; private final HttpMessageWriter<HttpResponse> responseWriter; public DefaultBHttpServerConnection(int i, int i2, CharsetDecoder charsetDecoder, CharsetEncoder charsetEncoder, MessageConstraints messageConstraints, ContentLengthStrategy contentLengthStrategy, ContentLengthStrategy contentLengthStrategy2, HttpMessageParserFactory<HttpRequest> httpMessageParserFactory, HttpMessageWriterFactory<HttpResponse> httpMessageWriterFactory) { super(i, i2, charsetDecoder, charsetEncoder, messageConstraints, contentLengthStrategy != null ? contentLengthStrategy : DisallowIdentityContentLengthStrategy.INSTANCE, contentLengthStrategy2); if (httpMessageParserFactory == null) { httpMessageParserFactory = DefaultHttpRequestParserFactory.INSTANCE; } this.requestParser = httpMessageParserFactory.create(getSessionInputBuffer(), messageConstraints); if (httpMessageWriterFactory == null) { httpMessageWriterFactory = DefaultHttpResponseWriterFactory.INSTANCE; } this.responseWriter = httpMessageWriterFactory.create(getSessionOutputBuffer()); } public DefaultBHttpServerConnection(int i, CharsetDecoder charsetDecoder, CharsetEncoder charsetEncoder, MessageConstraints messageConstraints) { this(i, i, charsetDecoder, charsetEncoder, messageConstraints, null, null, null, null); } public DefaultBHttpServerConnection(int i) { this(i, i, null, null, null, null, null, null, null); } protected void onRequestReceived(HttpRequest httpRequest) { } protected void onResponseSubmitted(HttpResponse httpResponse) { } public void bind(Socket socket) throws IOException { super.bind(socket); } public HttpRequest receiveRequestHeader() throws HttpException, IOException { ensureOpen(); HttpRequest httpRequest = (HttpRequest) this.requestParser.parse(); onRequestReceived(httpRequest); incrementRequestCount(); return httpRequest; } public void receiveRequestEntity(HttpEntityEnclosingRequest httpEntityEnclosingRequest) throws HttpException, IOException { Args.notNull(httpEntityEnclosingRequest, "HTTP request"); ensureOpen(); httpEntityEnclosingRequest.setEntity(prepareInput(httpEntityEnclosingRequest)); } public void sendResponseHeader(HttpResponse httpResponse) throws HttpException, IOException { Args.notNull(httpResponse, "HTTP response"); ensureOpen(); this.responseWriter.write(httpResponse); onResponseSubmitted(httpResponse); if (httpResponse.getStatusLine().getStatusCode() >= HttpStatus.SC_OK) { incrementResponseCount(); } } public void sendResponseEntity(HttpResponse httpResponse) throws HttpException, IOException { Args.notNull(httpResponse, "HTTP response"); ensureOpen(); HttpEntity entity = httpResponse.getEntity(); if (entity != null) { OutputStream prepareOutput = prepareOutput(httpResponse); entity.writeTo(prepareOutput); prepareOutput.close(); } } public void flush() throws IOException { ensureOpen(); doFlush(); } }