Minor refactoring in Tomcat/Jetty adapters
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user