# Class ExpiresFilter.XServletOutputStream

java.lang.Object
java.io.OutputStream
jakarta.servlet.ServletOutputStream
org.apache.catalina.filters.ExpiresFilter.XServletOutputStream

All Implemented Interfaces:
  `Closeable, Flushable, AutoCloseable`

Enclosing class:
  `ExpiresFilter`

public class ExpiresFilter.XServletOutputStream extends ServletOutputStream
Wrapping extension of `ServletOutputStream` to trap the "Start Write Response Body" event.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `XServletOutputStream(ServletOutputStream servletOutputStream, HttpServletRequest request, ExpiresFilter.XHttpServletResponse response)`
  Creates a new XServletOutputStream wrapping the given stream.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `close()`
  `void`
  `flush()`
  `boolean`
  `isReady()`
  Returns `true` if it is allowable to call any method that may write data (e.g.
  `void`
  `print(boolean b)`
  Writes a `boolean` value to the client, with no carriage return-line feed (CRLF) character at the end.
  `void`
  `print(char c)`
  Writes a character to the client, with no carriage return-line feed (CRLF) at the end.
  `void`
  `print(double d)`
  Writes a `double` value to the client, with no carriage return-line feed (CRLF) at the end.
  `void`
  `print(float f)`
  Writes a `float` value to the client, with no carriage return-line feed (CRLF) at the end.
  `void`
  `print(int i)`
  Writes an int to the client, with no carriage return-line feed (CRLF) at the end.
  `void`
  `print(long l)`
  Writes a `long` value to the client, with no carriage return-line feed (CRLF) at the end.
  `void`
  `print(String s)`
  Writes a `String` to the client, without a carriage return-line feed (CRLF) character at the end.
  `void`
  `println()`
  Writes a carriage return-line feed (CRLF) to the client.
  `void`
  `println(boolean b)`
  Writes a `boolean` value to the client, followed by a carriage return-line feed (CRLF).
  `void`
  `println(char c)`
  Writes a character to the client, followed by a carriage return-line feed (CRLF).
  `void`
  `println(double d)`
  Writes a `double` value to the client, followed by a carriage return-line feed (CRLF).
  `void`
  `println(float f)`
  Writes a `float` value to the client, followed by a carriage return-line feed (CRLF).
  `void`
  `println(int i)`
  Writes an int to the client, followed by a carriage return-line feed (CRLF) character.
  `void`
  `println(long l)`
  Writes a `long` value to the client, followed by a carriage return-line feed (CRLF).
  `void`
  `println(String s)`
  Writes a `String` to the client, followed by a carriage return-line feed (CRLF).
  `void`
  `setWriteListener(WriteListener listener)`
  Sets the `WriteListener` for this `ServletOutputStream` and thereby switches to non-blocking IO.
  `void`
  `write(byte[] b)`
  `void`
  `write(byte[] b, int off, int len)`
  `void`
  `write(int b)`

  ### Methods inherited from class ServletOutputStream

  `write`

  ### Methods inherited from class OutputStream

  `nullOutputStream`

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### XServletOutputStream

    public XServletOutputStream(ServletOutputStream servletOutputStream, HttpServletRequest request, ExpiresFilter.XHttpServletResponse response)
    Creates a new XServletOutputStream wrapping the given stream.
    Parameters:
      `servletOutputStream` - the ServletOutputStream to wrap
      `request` - the HTTP servlet request
      `response` - the wrapped HTTP servlet response

- ## Method Details

  - ### close

    public void close() throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`

    If this method is called when the output stream is in non-blocking mode, it will immediately return with the stream effectively closed, even if the stream contains buffered data that is yet to be written to client. The container will write this data out in the background. If this process fails the `WriteListener.onError(Throwable)` method will be invoked as normal.

    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `Closeable`
    Overrides:
      `close` in class `ServletOutputStream`
    Throws:
      `IOException`

  - ### flush

    public void flush() throws IOException
    Specified by:
      `flush` in interface `Flushable`
    Overrides:
      `flush` in class `OutputStream`
    Throws:
      `IOException`

  - ### print

    public void print(boolean b) throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Writes a `boolean` value to the client, with no carriage return-line feed (CRLF) character at the end.
    Overrides:
      `print` in class `ServletOutputStream`
    Parameters:
      `b` - the `boolean` value to send to the client
    Throws:
      `IOException` - if an input or output exception occurred

  - ### print

    public void print(char c) throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Writes a character to the client, with no carriage return-line feed (CRLF) at the end.
    Overrides:
      `print` in class `ServletOutputStream`
    Parameters:
      `c` - the character to send to the client
    Throws:
      `IOException` - if an input or output exception occurred

  - ### print

    public void print(double d) throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Writes a `double` value to the client, with no carriage return-line feed (CRLF) at the end.
    Overrides:
      `print` in class `ServletOutputStream`
    Parameters:
      `d` - the `double` value to send to the client
    Throws:
      `IOException` - if an input or output exception occurred

  - ### print

    public void print(float f) throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Writes a `float` value to the client, with no carriage return-line feed (CRLF) at the end.
    Overrides:
      `print` in class `ServletOutputStream`
    Parameters:
      `f` - the `float` value to send to the client
    Throws:
      `IOException` - if an input or output exception occurred

  - ### print

    public void print(int i) throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Writes an int to the client, with no carriage return-line feed (CRLF) at the end.
    Overrides:
      `print` in class `ServletOutputStream`
    Parameters:
      `i` - the int to send to the client
    Throws:
      `IOException` - if an input or output exception occurred

  - ### print

    public void print(long l) throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Writes a `long` value to the client, with no carriage return-line feed (CRLF) at the end.
    Overrides:
      `print` in class `ServletOutputStream`
    Parameters:
      `l` - the `long` value to send to the client
    Throws:
      `IOException` - if an input or output exception occurred

  - ### print

    public void print(String s) throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Writes a `String` to the client, without a carriage return-line feed (CRLF) character at the end.
    Overrides:
      `print` in class `ServletOutputStream`
    Parameters:
      `s` - the `String` to send to the client
    Throws:
      `IOException` - if an input or output exception occurred

  - ### println

    public void println() throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Writes a carriage return-line feed (CRLF) to the client.
    Overrides:
      `println` in class `ServletOutputStream`
    Throws:
      `IOException` - if an input or output exception occurred

  - ### println

    public void println(boolean b) throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Writes a `boolean` value to the client, followed by a carriage return-line feed (CRLF).
    Overrides:
      `println` in class `ServletOutputStream`
    Parameters:
      `b` - the `boolean` value to write to the client
    Throws:
      `IOException` - if an input or output exception occurred

  - ### println

    public void println(char c) throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Writes a character to the client, followed by a carriage return-line feed (CRLF).
    Overrides:
      `println` in class `ServletOutputStream`
    Parameters:
      `c` - the character to write to the client
    Throws:
      `IOException` - if an input or output exception occurred

  - ### println

    public void println(double d) throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Writes a `double` value to the client, followed by a carriage return-line feed (CRLF).
    Overrides:
      `println` in class `ServletOutputStream`
    Parameters:
      `d` - the `double` value to write to the client
    Throws:
      `IOException` - if an input or output exception occurred

  - ### println

    public void println(float f) throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Writes a `float` value to the client, followed by a carriage return-line feed (CRLF).
    Overrides:
      `println` in class `ServletOutputStream`
    Parameters:
      `f` - the `float` value to write to the client
    Throws:
      `IOException` - if an input or output exception occurred

  - ### println

    public void println(int i) throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Writes an int to the client, followed by a carriage return-line feed (CRLF) character.
    Overrides:
      `println` in class `ServletOutputStream`
    Parameters:
      `i` - the int to write to the client
    Throws:
      `IOException` - if an input or output exception occurred

  - ### println

    public void println(long l) throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Writes a `long` value to the client, followed by a carriage return-line feed (CRLF).
    Overrides:
      `println` in class `ServletOutputStream`
    Parameters:
      `l` - the `long` value to write to the client
    Throws:
      `IOException` - if an input or output exception occurred

  - ### println

    public void println(String s) throws IOException
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Writes a `String` to the client, followed by a carriage return-line feed (CRLF).
    Overrides:
      `println` in class `ServletOutputStream`
    Parameters:
      `s` - the `String` to write to the client
    Throws:
      `IOException` - if an input or output exception occurred

  - ### write

    public void write(byte[] b) throws IOException
    Overrides:
      `write` in class `OutputStream`
    Throws:
      `IOException`

  - ### write

    public void write(byte[] b, int off, int len) throws IOException
    Overrides:
      `write` in class `OutputStream`
    Throws:
      `IOException`

  - ### write

    public void write(int b) throws IOException
    Specified by:
      `write` in class `OutputStream`
    Throws:
      `IOException`

  - ### isReady

    public boolean isReady()
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Returns `true` if it is allowable to call any method that may write data (e.g. `write()`, `print()` or `flush`). In blocking mode, this method will always return `true`, but a subsequent call to a method that writes data may block. In non-blocking mode this method may return `false`, in which case it is illegal to call a method that writes data and an `IllegalStateException` MUST be thrown. When `WriteListener.onWritePossible()` is called, a call to this method that returned `true` is implicit.

    If this method returns `false` and a `WriteListener` has been set via `ServletOutputStream.setWriteListener(WriteListener)`, then container will subsequently invoke `WriteListener.onWritePossible()` once a write operation becomes possible without blocking. Other than the initial call, `WriteListener.onWritePossible()` will only be called if and only if this method is called and returns false.

    Specified by:
      `isReady` in class `ServletOutputStream`
    Returns:
      `true` if data can be written without blocking, otherwise returns `false`.

  - ### setWriteListener

    public void setWriteListener(WriteListener listener)
    Description copied from class: `jakarta.servlet.ServletOutputStream`
    Sets the `WriteListener` for this `ServletOutputStream` and thereby switches to non-blocking IO. It is only valid to switch to non-blocking IO within async processing or HTTP upgrade processing.
    Specified by:
      `setWriteListener` in class `ServletOutputStream`
    Parameters:
      `listener` - The non-blocking IO write listener