Minor refactoring in Tomcat/Jetty adapters

This commit is contained in:
Rossen Stoyanchev
2017-01-26 07:37:46 -05:00
parent a2aaa05592
commit 4aac7c2ee2
4 changed files with 17 additions and 17 deletions

View File

@@ -19,14 +19,12 @@ package org.springframework.http.server.reactive;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Map;
import javax.servlet.AsyncContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.HttpOutput;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferFactory;
@@ -68,12 +66,9 @@ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter {
@Override
protected int writeToOutputStream(DataBuffer dataBuffer) throws IOException {
ServletOutputStream outputStream = getServletResponse().getOutputStream();
ByteBuffer input = dataBuffer.asByteBuffer();
int len = input.remaining();
if (outputStream.isReady() && len > 0) {
((HttpOutput) outputStream).write(input);
}
((HttpOutput) getServletResponse().getOutputStream()).write(input);
return len;
}
}

View File

@@ -180,6 +180,10 @@ public class ServletServerHttpRequest extends AbstractServerHttpRequest {
return Flux.from(this.bodyPublisher);
}
/**
* Read from the request body InputStream and return a DataBuffer.
* Invoked only when {@link ServletInputStream#isReady()} returns "true".
*/
protected DataBuffer readFromInputStream() throws IOException {
int read = this.request.getInputStream().read(this.buffer);
if (logger.isTraceEnabled()) {

View File

@@ -132,6 +132,12 @@ public class ServletServerHttpResponse extends AbstractListenerServerHttpRespons
return processor;
}
/**
* Write the DataBuffer to the response body OutputStream.
* Invoked only when {@link ServletOutputStream#isReady()} returns "true"
* and the readable bytes in the DataBuffer is greater than 0.
* @return the number of bytes written
*/
protected int writeToOutputStream(DataBuffer dataBuffer) throws IOException {
ServletOutputStream outputStream = response.getOutputStream();
InputStream input = dataBuffer.asInputStream();
@@ -285,14 +291,13 @@ public class ServletServerHttpResponse extends AbstractListenerServerHttpRespons
if (this.logger.isTraceEnabled()) {
this.logger.trace("write: " + dataBuffer + " ready: " + ready);
}
if (ready) {
int total = dataBuffer.readableByteCount();
int remaining = dataBuffer.readableByteCount();
if (ready && remaining > 0) {
int written = writeToOutputStream(dataBuffer);
if (this.logger.isTraceEnabled()) {
this.logger.trace("written: " + written + " total: " + total);
this.logger.trace("written: " + written + " total: " + remaining);
}
return written == total;
return written == remaining;
}
else {
return false;

View File

@@ -20,7 +20,6 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Map;
import javax.servlet.AsyncContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -100,12 +99,9 @@ public class TomcatHttpHandlerAdapter extends ServletHttpHandlerAdapter {
@Override
protected int writeToOutputStream(DataBuffer dataBuffer) throws IOException {
ServletOutputStream outputStream = getServletResponse().getOutputStream();
ByteBuffer input = dataBuffer.asByteBuffer();
int len = input.remaining();
if (outputStream.isReady() && len > 0) {
((CoyoteOutputStream) outputStream).write(input);
}
((CoyoteOutputStream) getServletResponse().getOutputStream()).write(input);
return len;
}
}