Class HttpOutput

  • All Implemented Interfaces:
    java.io.Closeable, java.io.Flushable, java.lang.AutoCloseable, java.lang.Runnable

    public class HttpOutput
    extends javax.servlet.ServletOutputStream
    implements java.lang.Runnable

    HttpOutput implements ServletOutputStream as required by the Servlet specification.

    HttpOutput buffers content written by the application until a further write will overflow the buffer, at which point it triggers a commit of the response.

    HttpOutput can be closed and reopened, to allow requests included via RequestDispatcher.include(ServletRequest, ServletResponse) to close the stream, to be reopened after the inclusion ends.

    • Field Detail

      • lStrings

        private static java.util.ResourceBundle lStrings
      • LOG

        private static Logger LOG
      • _encoder

        private static final java.lang.ThreadLocal<java.nio.charset.CharsetEncoder> _encoder
      • _softClose

        private boolean _softClose
      • _written

        private long _written
      • _flushed

        private long _flushed
      • _firstByteTimeStamp

        private long _firstByteTimeStamp
      • _aggregate

        private java.nio.ByteBuffer _aggregate
      • _bufferSize

        private int _bufferSize
      • _commitSize

        private int _commitSize
      • _writeListener

        private javax.servlet.WriteListener _writeListener
      • _onError

        private volatile java.lang.Throwable _onError
      • _closedCallback

        private Callback _closedCallback
    • Constructor Detail

      • HttpOutput

        public HttpOutput​(HttpChannel channel)
    • Method Detail

      • isWritten

        public boolean isWritten()
      • getWritten

        public long getWritten()
      • reopen

        public void reopen()
      • acquireWriteBlockingCallback

        protected SharedBlockingCallback.Blocker acquireWriteBlockingCallback()
                                                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • channelWrite

        private void channelWrite​(java.nio.ByteBuffer content,
                                  boolean complete)
                           throws java.io.IOException
        Throws:
        java.io.IOException
      • channelWrite

        private void channelWrite​(java.nio.ByteBuffer content,
                                  boolean last,
                                  Callback callback)
      • onWriteComplete

        private void onWriteComplete​(boolean last,
                                     java.lang.Throwable failure)
      • updateApiState

        private boolean updateApiState​(java.lang.Throwable failure)
      • maximizeAggregateSpace

        private int maximizeAggregateSpace()
      • softClose

        public void softClose()
      • complete

        public void complete​(Callback callback)
      • completed

        public void completed​(java.lang.Throwable failure)
        Called to indicate that the request cycle has been completed.
      • close

        public void close()
                   throws java.io.IOException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Overrides:
        close in class java.io.OutputStream
        Throws:
        java.io.IOException
      • getBuffer

        public java.nio.ByteBuffer getBuffer()
      • acquireBuffer

        private java.nio.ByteBuffer acquireBuffer()
      • releaseBuffer

        private void releaseBuffer​(java.lang.Throwable failure)
      • isClosed

        public boolean isClosed()
      • isAsync

        public boolean isAsync()
      • flush

        public void flush()
                   throws java.io.IOException
        Specified by:
        flush in interface java.io.Flushable
        Overrides:
        flush in class java.io.OutputStream
        Throws:
        java.io.IOException
      • write

        public void write​(byte[] b,
                          int off,
                          int len)
                   throws java.io.IOException
        Overrides:
        write in class java.io.OutputStream
        Throws:
        java.io.IOException
      • write

        public void write​(java.nio.ByteBuffer buffer)
                   throws java.io.IOException
        Throws:
        java.io.IOException
      • write

        public void write​(int b)
                   throws java.io.IOException
        Specified by:
        write in class java.io.OutputStream
        Throws:
        java.io.IOException
      • print

        public void print​(java.lang.String s)
                   throws java.io.IOException
        Overrides:
        print in class javax.servlet.ServletOutputStream
        Throws:
        java.io.IOException
      • println

        public void println​(java.lang.String s)
                     throws java.io.IOException
        Overrides:
        println in class javax.servlet.ServletOutputStream
        Throws:
        java.io.IOException
      • print

        private void print​(java.lang.String s,
                           boolean eoln)
                    throws java.io.IOException
        Throws:
        java.io.IOException
      • println

        public void println​(boolean b)
                     throws java.io.IOException
        Overrides:
        println in class javax.servlet.ServletOutputStream
        Throws:
        java.io.IOException
      • println

        public void println​(char c)
                     throws java.io.IOException
        Overrides:
        println in class javax.servlet.ServletOutputStream
        Throws:
        java.io.IOException
      • println

        public void println​(int i)
                     throws java.io.IOException
        Overrides:
        println in class javax.servlet.ServletOutputStream
        Throws:
        java.io.IOException
      • println

        public void println​(long l)
                     throws java.io.IOException
        Overrides:
        println in class javax.servlet.ServletOutputStream
        Throws:
        java.io.IOException
      • println

        public void println​(float f)
                     throws java.io.IOException
        Overrides:
        println in class javax.servlet.ServletOutputStream
        Throws:
        java.io.IOException
      • println

        public void println​(double d)
                     throws java.io.IOException
        Overrides:
        println in class javax.servlet.ServletOutputStream
        Throws:
        java.io.IOException
      • sendContent

        public void sendContent​(java.nio.ByteBuffer content)
                         throws java.io.IOException
        Blocking send of whole content.
        Parameters:
        content - The whole content to send
        Throws:
        java.io.IOException - if the send fails
      • sendContent

        public void sendContent​(java.io.InputStream in)
                         throws java.io.IOException
        Blocking send of stream content.
        Parameters:
        in - The stream content to send
        Throws:
        java.io.IOException - if the send fails
      • sendContent

        public void sendContent​(java.nio.channels.ReadableByteChannel in)
                         throws java.io.IOException
        Blocking send of channel content.
        Parameters:
        in - The channel content to send
        Throws:
        java.io.IOException - if the send fails
      • sendContent

        public void sendContent​(HttpContent content)
                         throws java.io.IOException
        Blocking send of HTTP content.
        Parameters:
        content - The HTTP content to send
        Throws:
        java.io.IOException - if the send fails
      • sendContent

        public void sendContent​(java.nio.ByteBuffer content,
                                Callback callback)
        Asynchronous send of whole content.
        Parameters:
        content - The whole content to send
        callback - The callback to use to notify success or failure
      • sendContent

        public void sendContent​(java.io.InputStream in,
                                Callback callback)
        Asynchronous send of stream content. The stream will be closed after reading all content.
        Parameters:
        in - The stream content to send
        callback - The callback to use to notify success or failure
      • sendContent

        public void sendContent​(java.nio.channels.ReadableByteChannel in,
                                Callback callback)
        Asynchronous send of channel content. The channel will be closed after reading all content.
        Parameters:
        in - The channel content to send
        callback - The callback to use to notify success or failure
      • prepareSendContent

        private boolean prepareSendContent​(int len,
                                           Callback callback)
      • sendContent

        public void sendContent​(HttpContent httpContent,
                                Callback callback)
        Asynchronous send of HTTP content.
        Parameters:
        httpContent - The HTTP content to send
        callback - The callback to use to notify success or failure
      • getBufferSize

        public int getBufferSize()
      • setBufferSize

        public void setBufferSize​(int size)
      • onFlushed

        public void onFlushed​(long bytes)
                       throws java.io.IOException

        Invoked when bytes have been flushed to the network.

        The number of flushed bytes may be different from the bytes written by the application if an HttpOutput.Interceptor changed them, for example by compressing them.

        Parameters:
        bytes - the number of bytes flushed
        Throws:
        java.io.IOException - if the minimum data rate, when set, is not respected
        See Also:
        WriteFlusher.Listener
      • recycle

        public void recycle()
      • resetBuffer

        public void resetBuffer()
      • setWriteListener

        public void setWriteListener​(javax.servlet.WriteListener writeListener)
        Specified by:
        setWriteListener in class javax.servlet.ServletOutputStream
      • isReady

        public boolean isReady()
        Specified by:
        isReady in class javax.servlet.ServletOutputStream
      • run

        public void run()
        Specified by:
        run in interface java.lang.Runnable
      • stateString

        private java.lang.String stateString()
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object