Package io.undertow.servlet.spec
Class ServletOutputStreamImpl
java.lang.Object
java.io.OutputStream
jakarta.servlet.ServletOutputStream
io.undertow.servlet.spec.ServletOutputStreamImpl
- All Implemented Interfaces:
Closeable,Flushable,AutoCloseable
public class ServletOutputStreamImpl
extends jakarta.servlet.ServletOutputStream
This stream essentially has two modes. When it is being used in standard blocking mode then
it will buffer in the pooled buffer. If the stream is closed before the buffer is full it will
set a content-length header if one has not been explicitly set.
If a content-length header was present when the stream was created then it will automatically close and flush itself once the appropriate amount of data has been written.
Once the listener has been set it goes into async mode, and writes become non blocking. Most methods have two different code paths, based on if the listener has been set or not
Once the write listener has been set operations must only be invoked on this stream from the write listener callback. Attempting to invoke from a different thread will result in an IllegalStateException.
Async listener tasks are queued in the AsyncContextImpl. At most one listener can be active at
one time, which simplifies the thread safety requirements.
- Author:
- Stuart Douglas
-
Constructor Summary
ConstructorsConstructorDescriptionServletOutputStreamImpl(HttpServerExchange exchange) Construct a new instance.ServletOutputStreamImpl(HttpServerExchange exchange, Integer bufferSize) -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()voidflush()io.netty.buffer.ByteBuflongbooleanisReady()voidvoidsetBufferSize(int bufferSize) voidsetWriteListener(jakarta.servlet.WriteListener writeListener) io.netty.buffer.ByteBufvoidupdateWritten(int len) voidwrite(byte[] b) voidwrite(byte[] b, int off, int len) voidwrite(int b) Methods inherited from class jakarta.servlet.ServletOutputStream
print, print, print, print, print, print, print, println, println, println, println, println, println, println, printlnMethods inherited from class java.io.OutputStream
nullOutputStream
-
Constructor Details
-
ServletOutputStreamImpl
Construct a new instance. No write timeout is configured.- Parameters:
exchange- The exchange
-
ServletOutputStreamImpl
-
-
Method Details
-
getBytesWritten
public long getBytesWritten() -
write
- Specified by:
writein classOutputStream- Throws:
IOException
-
write
- Overrides:
writein classOutputStream- Throws:
IOException
-
write
- Overrides:
writein classOutputStream- Throws:
IOException
-
flush
- Specified by:
flushin interfaceFlushable- Overrides:
flushin classOutputStream- Throws:
IOException
-
close
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classOutputStream- Throws:
IOException
-
resetBuffer
public void resetBuffer() -
setBufferSize
public void setBufferSize(int bufferSize) -
getServletRequestContext
-
underlyingBuffer
public io.netty.buffer.ByteBuf underlyingBuffer() -
flushInternal
- Throws:
IOException
-
updateWritten
public void updateWritten(int len) -
isReady
public boolean isReady()- Specified by:
isReadyin classjakarta.servlet.ServletOutputStream
-
setWriteListener
public void setWriteListener(jakarta.servlet.WriteListener writeListener) - Specified by:
setWriteListenerin classjakarta.servlet.ServletOutputStream
-