Class Request


  • public final class Request
    extends java.lang.Object
    This is a low-level, efficient representation of a server request. Most fields are GC-free, expensive operations are delayed until the user code needs the information. Processing is delegated to modules, using a hook mechanism. This class is not intended for user code - it is used internally by tomcat for processing the request in the most efficient way. Users ( servlets ) can access the information using a facade, which provides the high-level view of the request. Tomcat defines a number of attributes:
    • "org.apache.tomcat.request" - allows access to the low-level request object in trusted applications
    • Field Detail

      • NOTE_BAD_REQUEST

        public static final int NOTE_BAD_REQUEST
        Note key for bad request.
        See Also:
        Constant Field Values
    • Constructor Detail

      • Request

        public Request()
        Default constructor.
    • Method Detail

      • getReadListener

        public ReadListener getReadListener()
        Return the read listener.
        Returns:
        the read listener
      • setReadListener

        public void setReadListener​(ReadListener listener)
        Set the read listener for non-blocking reads.
        Parameters:
        listener - the read listener
      • isReady

        public boolean isReady()
        Check if the request is ready for reading.
        Returns:
        true if ready for reading
      • onDataAvailable

        public void onDataAvailable()
                             throws java.io.IOException
        Called when data is available for reading.
        Throws:
        java.io.IOException - if an I/O error occurs
      • sendAllDataReadEvent

        public boolean sendAllDataReadEvent()
        Send the all-data-read event.
        Returns:
        true if the event was sent
      • getMimeHeaders

        public MimeHeaders getMimeHeaders()
        Return the MIME headers.
        Returns:
        the MIME headers
      • isTrailerFieldsReady

        public boolean isTrailerFieldsReady()
        Check if trailer fields are ready.
        Returns:
        true if trailer fields are ready
      • getTrailerFields

        public java.util.Map<java.lang.String,​java.lang.String> getTrailerFields()
        Return the trailer fields as a map.
        Returns:
        the trailer fields
      • getMimeTrailerFields

        public MimeHeaders getMimeTrailerFields()
        Return the MIME trailer fields.
        Returns:
        the MIME trailer fields
      • getURLDecoder

        public UDecoder getURLDecoder()
        Return the URL decoder.
        Returns:
        the URL decoder
      • scheme

        public MessageBytes scheme()
        Return the scheme (e.g. "http" or "https").
        Returns:
        the scheme
      • setMethod

        public void setMethod​(java.lang.String method)
        Set the HTTP method.
        Parameters:
        method - the HTTP method
      • setMethod

        public void setMethod​(byte[] buf,
                              int start,
                              int len)
        Set the HTTP method from a byte buffer.
        Parameters:
        buf - the byte buffer
        start - the start offset
        len - the length
      • getMethod

        public java.lang.String getMethod()
        Return the HTTP method.
        Returns:
        the HTTP method
      • requestURI

        public MessageBytes requestURI()
        Return the request URI.
        Returns:
        the request URI
      • decodedURI

        public MessageBytes decodedURI()
        Return the decoded request URI.
        Returns:
        the decoded URI
      • queryString

        public MessageBytes queryString()
        Return the query string.
        Returns:
        the query string
      • protocol

        public MessageBytes protocol()
        Return the protocol.
        Returns:
        the protocol
      • serverName

        public MessageBytes serverName()
        Get the "virtual host", derived from the Host: header associated with this request.
        Returns:
        The buffer holding the server name, if any. Use isNull() to check if there is no value set.
      • getServerPort

        public int getServerPort()
        Return the server port.
        Returns:
        the server port
      • setServerPort

        public void setServerPort​(int serverPort)
        Set the server port.
        Parameters:
        serverPort - the server port
      • remoteAddr

        public MessageBytes remoteAddr()
        Return the remote address.
        Returns:
        the remote address
      • peerAddr

        public MessageBytes peerAddr()
        Return the peer address.
        Returns:
        the peer address
      • remoteHost

        public MessageBytes remoteHost()
        Return the remote host.
        Returns:
        the remote host
      • localName

        public MessageBytes localName()
        Return the local name.
        Returns:
        the local name
      • localAddr

        public MessageBytes localAddr()
        Return the local address.
        Returns:
        the local address
      • getRemotePort

        public int getRemotePort()
        Return the remote port.
        Returns:
        the remote port
      • setRemotePort

        public void setRemotePort​(int port)
        Set the remote port.
        Parameters:
        port - the remote port
      • getLocalPort

        public int getLocalPort()
        Return the local port.
        Returns:
        the local port
      • setLocalPort

        public void setLocalPort​(int port)
        Set the local port.
        Parameters:
        port - the local port
      • getCharacterEncoding

        public java.lang.String getCharacterEncoding()
        Get the character encoding used for this request.
        Returns:
        The value set via setCharset(Charset) or if no call has been made to that method try to obtain if from the content type.
      • getCharset

        public java.nio.charset.Charset getCharset()
                                            throws java.io.UnsupportedEncodingException
        Get the character encoding used for this request.
        Returns:
        The value set via setCharset(Charset) or if no call has been made to that method try to obtain if from the content type.
        Throws:
        java.io.UnsupportedEncodingException - If the user agent has specified an invalid character encoding
      • setCharset

        public void setCharset​(java.nio.charset.Charset charset)
      • setContentLength

        public void setContentLength​(long len)
        Set the content length.
        Parameters:
        len - the content length
      • getContentLength

        public int getContentLength()
        Return the content length.
        Returns:
        the content length
      • getContentLengthLong

        public long getContentLengthLong()
        Return the content length as a long.
        Returns:
        the content length
      • getContentType

        public java.lang.String getContentType()
        Return the content type as a string.
        Returns:
        the content type
      • setContentType

        public void setContentType​(java.lang.String type)
        Set the content type.
        Parameters:
        type - the content type
      • contentType

        public MessageBytes contentType()
        Return the content type.
        Returns:
        the content type
      • setContentType

        public void setContentType​(MessageBytes mb)
        Set the content type.
        Parameters:
        mb - the content type
      • getHeader

        public java.lang.String getHeader​(java.lang.String name)
        Return the value of the specified header.
        Parameters:
        name - the header name
        Returns:
        the header value
      • setExpectation

        public void setExpectation​(boolean expectation)
        Set the expectation flag.
        Parameters:
        expectation - the expectation flag
      • hasExpectation

        public boolean hasExpectation()
        Check if there is an expectation.
        Returns:
        true if there is an expectation
      • getResponse

        public Response getResponse()
        Return the associated response.
        Returns:
        the response
      • setResponse

        public void setResponse​(Response response)
        Set the associated response.
        Parameters:
        response - the response
      • action

        public void action​(ActionCode actionCode,
                           java.lang.Object param)
        Perform an action on this request.
        Parameters:
        actionCode - the action code
        param - the action parameter
      • getCookies

        public ServerCookies getCookies()
        Return the server cookies.
        Returns:
        the server cookies
      • getParameters

        public Parameters getParameters()
        Return the request parameters.
        Returns:
        the parameters
      • addPathParameter

        public void addPathParameter​(java.lang.String name,
                                     java.lang.String value)
        Add a path parameter.
        Parameters:
        name - the parameter name
        value - the parameter value
      • getPathParameter

        public java.lang.String getPathParameter​(java.lang.String name)
        Return the value of the specified path parameter.
        Parameters:
        name - the parameter name
        Returns:
        the parameter value
      • setAttribute

        public void setAttribute​(java.lang.String name,
                                 java.lang.Object o)
        Set an attribute.
        Parameters:
        name - the attribute name
        o - the attribute value
      • getAttributes

        public java.util.HashMap<java.lang.String,​java.lang.Object> getAttributes()
        Return the request attributes map.
        Returns:
        the attributes map
      • getAttribute

        public java.lang.Object getAttribute​(java.lang.String name)
        Return the value of the specified attribute.
        Parameters:
        name - the attribute name
        Returns:
        the attribute value
      • getRemoteUser

        public MessageBytes getRemoteUser()
        Return the remote user.
        Returns:
        the remote user
      • getRemoteUserNeedsAuthorization

        public boolean getRemoteUserNeedsAuthorization()
        Check if the remote user needs authorization.
        Returns:
        true if the remote user needs authorization
      • setRemoteUserNeedsAuthorization

        public void setRemoteUserNeedsAuthorization​(boolean remoteUserNeedsAuthorization)
        Set whether the remote user needs authorization.
        Parameters:
        remoteUserNeedsAuthorization - true if authorization is needed
      • getAuthType

        public MessageBytes getAuthType()
        Return the authentication type.
        Returns:
        the authentication type
      • getAvailable

        public int getAvailable()
        Return the number of available bytes.
        Returns:
        the available bytes
      • setAvailable

        public void setAvailable​(int available)
        Set the number of available bytes.
        Parameters:
        available - the available bytes
      • getSendfile

        public boolean getSendfile()
        Check if sendfile is enabled.
        Returns:
        true if sendfile is enabled
      • setSendfile

        public void setSendfile​(boolean sendfile)
        Set whether sendfile is enabled.
        Parameters:
        sendfile - true to enable sendfile
      • isFinished

        public boolean isFinished()
        Check if the request body has been fully read.
        Returns:
        true if finished
      • getSupportsRelativeRedirects

        public boolean getSupportsRelativeRedirects()
        Check if relative redirects are supported.
        Returns:
        true if relative redirects are supported
      • getInputBuffer

        public InputBuffer getInputBuffer()
        Return the input buffer.
        Returns:
        the input buffer
      • setInputBuffer

        public void setInputBuffer​(InputBuffer inputBuffer)
        Set the input buffer.
        Parameters:
        inputBuffer - the input buffer
      • doRead

        public int doRead​(ApplicationBufferHandler handler)
                   throws java.io.IOException
        Read data from the input buffer and put it into ApplicationBufferHandler. The buffer is owned by the protocol implementation - it will be reused on the next read. The Adapter must either process the data in place or copy it to a separate buffer if it needs to hold it. In most cases this is done during byte->char conversions or via InputStream. Unlike InputStream, this interface allows the app to process data in place, without copy.
        Parameters:
        handler - The destination to which to copy the data
        Returns:
        The number of bytes copied
        Throws:
        java.io.IOException - If an I/O error occurs during the copy
      • setErrorException

        public void setErrorException​(java.lang.Exception ex)
        Set the error Exception that occurred during the writing of the response processing.
        Parameters:
        ex - The exception that occurred
      • getErrorException

        public java.lang.Exception getErrorException()
        Get the Exception that occurred during the writing of the response.
        Returns:
        The exception that occurred
      • isExceptionPresent

        public boolean isExceptionPresent()
        Check if an error exception is present.
        Returns:
        true if an exception is present
      • getRequestId

        public java.lang.String getRequestId()
        Return the request ID.
        Returns:
        the request ID
      • getProtocolRequestId

        public java.lang.String getProtocolRequestId()
        Return the protocol request ID.
        Returns:
        the protocol request ID
      • getServletConnection

        public ServletConnection getServletConnection()
        Return the servlet connection.
        Returns:
        the servlet connection
      • toString

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

        public long getStartTime()
        Return the request start time in milliseconds.
        Returns:
        the start time
      • getStartTimeNanos

        public long getStartTimeNanos()
        Return the request start time in nanoseconds.
        Returns:
        the start time in nanoseconds
      • setStartTime

        @Deprecated
        public void setStartTime​(long startTime)
        Deprecated.
        This setter will be removed in Tomcat 11. Use markStartTime().
        Parameters:
        startTime - time
      • setStartTimeNanos

        @Deprecated
        public void setStartTimeNanos​(long startTimeNanos)
        Deprecated.
        Unused. Will be removed in Tomcat 12 onwards. Use markStartTime().
        Set the start time using the value provided by System.nanoTime().
        Parameters:
        startTimeNanos - The value returned from System.nanoTime() at the point the requests started.
      • markStartTime

        public void markStartTime()
        Mark the request start time.
      • getStartInstant

        public java.time.Instant getStartInstant()
        Return the request start instant.
        Returns:
        the start instant
      • getThreadId

        public long getThreadId()
        Return the thread ID.
        Returns:
        the thread ID
      • clearRequestThread

        public void clearRequestThread()
        Clear the request thread ID.
      • setRequestThread

        public void setRequestThread()
        Set the request thread ID.
      • isRequestThread

        public boolean isRequestThread()
        Check if the current thread is the request thread.
        Returns:
        true if the current thread is the request thread
      • setNote

        public void setNote​(int pos,
                            java.lang.Object value)
        Used to store private data. Thread data could be used instead - but if you have the req, getting/setting a note is just an array access, may be faster than ThreadLocal for very frequent operations. Example use: Catalina CoyoteAdapter: ADAPTER_NOTES = 1 - stores the HttpServletRequest object ( req/res) To avoid conflicts, note in the range 0 - 8 are reserved for the servlet container ( catalina connector, etc ), and values in 9 - 16 for connector use. 17-31 range is not allocated or used.
        Parameters:
        pos - Index to use to store the note
        value - The value to store at that index
      • getNote

        public java.lang.Object getNote​(int pos)
        Return the note at the specified position.
        Parameters:
        pos - the position
        Returns:
        the note
      • recycle

        public void recycle()
        Recycle this request for reuse.
      • updateCounters

        public void updateCounters()
        Update request counters.
      • getRequestProcessor

        public RequestInfo getRequestProcessor()
        Return the request processor info.
        Returns:
        the request processor info
      • getBytesRead

        public long getBytesRead()
        Return the number of bytes read.
        Returns:
        the bytes read
      • isProcessing

        public boolean isProcessing()
        Check if the request is currently being processed.
        Returns:
        true if processing