Java tutorial
package org.apache.http.impl; import java.io.IOException; import org.apache.http.HttpConnectionMetrics; import org.apache.http.HttpEntityEnclosingRequest; import org.apache.http.HttpException; import org.apache.http.HttpRequest; import org.apache.http.HttpRequestFactory; 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.impl.entity.DisallowIdentityContentLengthStrategy; import org.apache.http.impl.entity.EntityDeserializer; import org.apache.http.impl.entity.EntitySerializer; import org.apache.http.impl.entity.LaxContentLengthStrategy; import org.apache.http.impl.entity.StrictContentLengthStrategy; import org.apache.http.impl.io.DefaultHttpRequestParser; import org.apache.http.impl.io.HttpResponseWriter; import org.apache.http.io.EofSensor; import org.apache.http.io.HttpMessageParser; import org.apache.http.io.HttpMessageWriter; import org.apache.http.io.HttpTransportMetrics; import org.apache.http.io.SessionInputBuffer; import org.apache.http.io.SessionOutputBuffer; import org.apache.http.params.HttpParams; import org.apache.http.util.Args; @NotThreadSafe @Deprecated public abstract class AbstractHttpServerConnection implements HttpServerConnection { private final EntityDeserializer entitydeserializer; private final EntitySerializer entityserializer; private EofSensor eofSensor; private SessionInputBuffer inbuffer; private HttpConnectionMetricsImpl metrics; private SessionOutputBuffer outbuffer; private HttpMessageParser<HttpRequest> requestParser; private HttpMessageWriter<HttpResponse> responseWriter; protected abstract void assertOpen() throws IllegalStateException; public AbstractHttpServerConnection() { this.inbuffer = null; this.outbuffer = null; this.eofSensor = null; this.requestParser = null; this.responseWriter = null; this.metrics = null; this.entityserializer = createEntitySerializer(); this.entitydeserializer = createEntityDeserializer(); } protected EntityDeserializer createEntityDeserializer() { return new EntityDeserializer(new DisallowIdentityContentLengthStrategy(new LaxContentLengthStrategy(0))); } protected EntitySerializer createEntitySerializer() { return new EntitySerializer(new StrictContentLengthStrategy()); } protected HttpRequestFactory createHttpRequestFactory() { return DefaultHttpRequestFactory.INSTANCE; } protected HttpMessageParser<HttpRequest> createRequestParser(SessionInputBuffer sessionInputBuffer, HttpRequestFactory httpRequestFactory, HttpParams httpParams) { return new DefaultHttpRequestParser(sessionInputBuffer, null, httpRequestFactory, httpParams); } protected HttpMessageWriter<HttpResponse> createResponseWriter(SessionOutputBuffer sessionOutputBuffer, HttpParams httpParams) { return new HttpResponseWriter(sessionOutputBuffer, null, httpParams); } protected HttpConnectionMetricsImpl createConnectionMetrics(HttpTransportMetrics httpTransportMetrics, HttpTransportMetrics httpTransportMetrics2) { return new HttpConnectionMetricsImpl(httpTransportMetrics, httpTransportMetrics2); } protected void init(SessionInputBuffer sessionInputBuffer, SessionOutputBuffer sessionOutputBuffer, HttpParams httpParams) { this.inbuffer = (SessionInputBuffer) Args.notNull(sessionInputBuffer, "Input session buffer"); this.outbuffer = (SessionOutputBuffer) Args.notNull(sessionOutputBuffer, "Output session buffer"); if (sessionInputBuffer instanceof EofSensor) { this.eofSensor = (EofSensor) sessionInputBuffer; } this.requestParser = createRequestParser(sessionInputBuffer, createHttpRequestFactory(), httpParams); this.responseWriter = createResponseWriter(sessionOutputBuffer, httpParams); this.metrics = createConnectionMetrics(sessionInputBuffer.getMetrics(), sessionOutputBuffer.getMetrics()); } public HttpRequest receiveRequestHeader() throws HttpException, IOException { assertOpen(); HttpRequest httpRequest = (HttpRequest) this.requestParser.parse(); this.metrics.incrementRequestCount(); return httpRequest; } public void receiveRequestEntity(HttpEntityEnclosingRequest httpEntityEnclosingRequest) throws HttpException, IOException { Args.notNull(httpEntityEnclosingRequest, "HTTP request"); assertOpen(); httpEntityEnclosingRequest .setEntity(this.entitydeserializer.deserialize(this.inbuffer, httpEntityEnclosingRequest)); } protected void doFlush() throws IOException { this.outbuffer.flush(); } public void flush() throws IOException { assertOpen(); doFlush(); } public void sendResponseHeader(HttpResponse httpResponse) throws HttpException, IOException { Args.notNull(httpResponse, "HTTP response"); assertOpen(); this.responseWriter.write(httpResponse); if (httpResponse.getStatusLine().getStatusCode() >= HttpStatus.SC_OK) { this.metrics.incrementResponseCount(); } } public void sendResponseEntity(HttpResponse httpResponse) throws HttpException, IOException { if (httpResponse.getEntity() != null) { this.entityserializer.serialize(this.outbuffer, httpResponse, httpResponse.getEntity()); } } protected boolean isEof() { return this.eofSensor != null && this.eofSensor.isEof(); } public boolean isStale() { boolean z = true; if (isOpen() && !isEof()) { try { this.inbuffer.isDataAvailable(1); z = isEof(); } catch (IOException e) { } } return z; } public HttpConnectionMetrics getMetrics() { return this.metrics; } }