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
    Author:
    James Duncan Davidson [duncan@eng.sun.com], James Todd [gonzo@eng.sun.com], Jason Hunter [jch@eng.sun.com], Harish Prabandham, Alex Cruikshank [alex@epitonic.com], Hans Bergsten [hans@gefionsoftware.com], Costin Manolache, Remy Maucherat
    • Constructor Detail

      • Request

        public Request()
    • Method Detail

      • setReadListener

        public void setReadListener​(ReadListener listener)
      • isReady

        public boolean isReady()
      • onDataAvailable

        public void onDataAvailable()
                             throws java.io.IOException
        Throws:
        java.io.IOException
      • sendAllDataReadEvent

        public boolean sendAllDataReadEvent()
      • isTrailerFieldsReady

        public boolean isTrailerFieldsReady()
      • getTrailerFields

        public java.util.Map<java.lang.String,​java.lang.String> getTrailerFields()
      • getURLDecoder

        public UDecoder getURLDecoder()
      • 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()
      • setServerPort

        public void setServerPort​(int serverPort)
      • getRemotePort

        public int getRemotePort()
      • setRemotePort

        public void setRemotePort​(int port)
      • getLocalPort

        public int getLocalPort()
      • setLocalPort

        public void setLocalPort​(int 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)
      • getContentLength

        public int getContentLength()
      • getContentLengthLong

        public long getContentLengthLong()
      • getContentType

        public java.lang.String getContentType()
      • setContentType

        public void setContentType​(java.lang.String type)
      • setContentType

        public void setContentType​(MessageBytes mb)
      • getHeader

        public java.lang.String getHeader​(java.lang.String name)
      • setExpectation

        public void setExpectation​(boolean expectation)
      • hasExpectation

        public boolean hasExpectation()
      • getResponse

        public Response getResponse()
      • setResponse

        public void setResponse​(Response response)
      • setHook

        protected void setHook​(ActionHook hook)
      • action

        public void action​(ActionCode actionCode,
                           java.lang.Object param)
      • getParameters

        public Parameters getParameters()
      • addPathParameter

        public void addPathParameter​(java.lang.String name,
                                     java.lang.String value)
      • getPathParameter

        public java.lang.String getPathParameter​(java.lang.String name)
      • setAttribute

        public void setAttribute​(java.lang.String name,
                                 java.lang.Object o)
      • getAttributes

        public java.util.HashMap<java.lang.String,​java.lang.Object> getAttributes()
      • getAttribute

        public java.lang.Object getAttribute​(java.lang.String name)
      • getRemoteUserNeedsAuthorization

        public boolean getRemoteUserNeedsAuthorization()
      • setRemoteUserNeedsAuthorization

        public void setRemoteUserNeedsAuthorization​(boolean remoteUserNeedsAuthorization)
      • getAvailable

        public int getAvailable()
      • setAvailable

        public void setAvailable​(int available)
      • getSendfile

        public boolean getSendfile()
      • setSendfile

        public void setSendfile​(boolean sendfile)
      • isFinished

        public boolean isFinished()
      • getSupportsRelativeRedirects

        public boolean getSupportsRelativeRedirects()
      • setInputBuffer

        public void setInputBuffer​(InputBuffer inputBuffer)
      • 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()
      • toString

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

        public long getStartTime()
      • setStartTime

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

        public long getStartTimeNanos()
      • setStartTimeNanos

        public void setStartTimeNanos​(long startTimeNanos)
      • getThreadId

        public long getThreadId()
      • clearRequestThread

        public void clearRequestThread()
      • setRequestThread

        public void setRequestThread()
      • isRequestThread

        public boolean isRequestThread()
      • setNote

        public final 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 final java.lang.Object getNote​(int pos)
      • recycle

        public void recycle()
      • updateCounters

        public void updateCounters()
      • getRequestProcessor

        public RequestInfo getRequestProcessor()
      • getBytesRead

        public long getBytesRead()
      • isProcessing

        public boolean isProcessing()