Class Request

  • All Implemented Interfaces:
    javax.servlet.http.HttpServletRequest, javax.servlet.ServletRequest

    public class Request
    extends java.lang.Object
    implements javax.servlet.http.HttpServletRequest
    Jetty Request.

    Implements HttpServletRequest from the javax.servlet.http package.

    The standard interface of mostly getters, is extended with setters so that the request is mutable by the handlers that it is passed to. This allows the request object to be as lightweight as possible and not actually implement any significant behavior. For example

    • The getContextPath() method will return null, until the request has been passed to a ContextHandler which matches the getPathInfo() with a context path and calls setContextPath(String) as a result.
    • the HTTP session methods will all return null sessions until such time as a request has been passed to a SessionHandler which checks for session cookies and enables the ability to create new sessions.
    • The getServletPath() method will return null until the request has been passed to a org.eclipse.jetty.servlet.ServletHandler and the pathInfo matched against the servlet URL patterns and setServletPath(String) called as a result.

    A request instance is created for each connection accepted by the server and recycled for each HTTP request received via that connection. An effort is made to avoid reparsing headers and cookies that are likely to be the same for requests from the same connection.

    Request instances are recycled, which combined with badly written asynchronous applications can result in calls on requests that have been reset. The code is written in a style to avoid NPE and ISE when such calls are made, as this has often proved generate exceptions that distraction from debugging such bad asynchronous applications. Instead, request methods attempt to not fail when called in an illegal state, so that hopefully the bad application will proceed to a major state event (eg calling AsyncContext.onComplete) which has better asynchronous guards, true atomic state and better failure behaviour that will assist in debugging.

    The form content that a request can process is limited to protect from Denial of Service attacks. The size in bytes is limited by ContextHandler.getMaxFormContentSize() or if there is no context then the "org.eclipse.jetty.server.Request.maxFormContentSize" Server attribute. The number of parameters keys is limited by ContextHandler.getMaxFormKeys() or if there is no context then the "org.eclipse.jetty.server.Request.maxFormKeys" Server attribute.

    If IOExceptions or timeouts occur while reading form parameters, these are thrown as unchecked Exceptions: ether RuntimeIOException, BadMessageException or RuntimeException as appropriate.

    • Field Detail

      • MULTIPART_CONFIG_ELEMENT

        public static final java.lang.String MULTIPART_CONFIG_ELEMENT
        See Also:
        Constant Field Values
    • Method Detail

      • getBaseRequest

        public static Request getBaseRequest​(javax.servlet.ServletRequest request)
        Obtain the base Request instance of a ServletRequest, by coercion, unwrapping or special attribute.
        Parameters:
        request - The request
        Returns:
        the base Request instance of a ServletRequest.
      • getHttpFields

        public HttpFields getHttpFields()
      • getHttpInput

        public HttpInput getHttpInput()
      • isPush

        public boolean isPush()
      • isPushSupported

        public boolean isPushSupported()
      • getPushBuilder

        public PushBuilder getPushBuilder()
        Get a PushBuilder associated with this request initialized as follows:
        • The method is initialized to "GET"
        • The headers from this request are copied to the Builder, except for:
          • Conditional headers (eg. If-Modified-Since)
          • Range headers
          • Expect headers
          • Authorization headers
          • Referrer headers
        • If the request was Authenticated, an Authorization header will be set with a container generated token that will result in equivalent Authorization
        • The query string from getQueryString()
        • The getRequestedSessionId() value, unless at the time of the call getSession(boolean) has previously been called to create a new HttpSession, in which case the new session ID will be used as the PushBuilders requested session ID.
        • The source of the requested session id will be the same as for this request
        • The builders Referer header will be set to getRequestURL() plus any getQueryString()
        • If HttpServletResponse.addCookie(Cookie) has been called on the associated response, then a corresponding Cookie header will be added to the PushBuilder, unless the Cookie.getMaxAge() is <=0, in which case the Cookie will be removed from the builder.
        • If this request has has the conditional headers If-Modified-Since or If-None-Match then the PushBuilderImpl.isConditional() header is set to true.

        Each call to getPushBuilder() will return a new instance of a PushBuilder based off this Request. Any mutations to the returned PushBuilder are not reflected on future returns.

        Returns:
        A new PushBuilder or null if push is not supported
      • addEventListener

        public void addEventListener​(java.util.EventListener listener)
      • enterSession

        public void enterSession​(javax.servlet.http.HttpSession s)
        Remember a session that this request has just entered.
        Parameters:
        s - the session
      • extractFormParameters

        public void extractFormParameters​(MultiMap<java.lang.String> params)
      • getAsyncContext

        public javax.servlet.AsyncContext getAsyncContext()
        Specified by:
        getAsyncContext in interface javax.servlet.ServletRequest
      • getAttribute

        public java.lang.Object getAttribute​(java.lang.String name)
        Get Request Attribute.

        Also supports jetty specific attributes to gain access to Jetty APIs:

        org.eclipse.jetty.server.Server
        The Jetty Server instance
        org.eclipse.jetty.server.HttpChannel
        The HttpChannel for this request
        org.eclipse.jetty.server.HttpConnection
        The HttpConnection or null if another transport is used
        While these attributes may look like security problems, they are exposing nothing that is not already available via reflection from a Request instance.
        Specified by:
        getAttribute in interface javax.servlet.ServletRequest
        See Also:
        ServletRequest.getAttribute(java.lang.String)
      • getAttributeNames

        public java.util.Enumeration<java.lang.String> getAttributeNames()
        Specified by:
        getAttributeNames in interface javax.servlet.ServletRequest
      • getAttributes

        public Attributes getAttributes()
      • getAuthentication

        public Authentication getAuthentication()
        Get the authentication.
        Returns:
        the authentication
      • getAuthType

        public java.lang.String getAuthType()
        Specified by:
        getAuthType in interface javax.servlet.http.HttpServletRequest
      • getCharacterEncoding

        public java.lang.String getCharacterEncoding()
        Specified by:
        getCharacterEncoding in interface javax.servlet.ServletRequest
      • getHttpChannel

        public HttpChannel getHttpChannel()
        Returns:
        Returns the connection.
      • getContentLength

        public int getContentLength()
        Specified by:
        getContentLength in interface javax.servlet.ServletRequest
      • getContentLengthLong

        public long getContentLengthLong()
        Specified by:
        getContentLengthLong in interface javax.servlet.ServletRequest
      • getContentRead

        public long getContentRead()
      • getContentType

        public java.lang.String getContentType()
        Specified by:
        getContentType in interface javax.servlet.ServletRequest
      • getErrorContext

        public ContextHandler.Context getErrorContext()
        Returns:
        The current context used for this error handling for this request. If the request is asynchronous, then it is the context that called async. Otherwise it is the last non-null context passed to #setContext
      • getContextPath

        public java.lang.String getContextPath()
        Specified by:
        getContextPath in interface javax.servlet.http.HttpServletRequest
      • getCookies

        public javax.servlet.http.Cookie[] getCookies()
        Specified by:
        getCookies in interface javax.servlet.http.HttpServletRequest
      • getDateHeader

        public long getDateHeader​(java.lang.String name)
        Specified by:
        getDateHeader in interface javax.servlet.http.HttpServletRequest
      • getDispatcherType

        public javax.servlet.DispatcherType getDispatcherType()
        Specified by:
        getDispatcherType in interface javax.servlet.ServletRequest
      • getHeader

        public java.lang.String getHeader​(java.lang.String name)
        Specified by:
        getHeader in interface javax.servlet.http.HttpServletRequest
      • getHeaderNames

        public java.util.Enumeration<java.lang.String> getHeaderNames()
        Specified by:
        getHeaderNames in interface javax.servlet.http.HttpServletRequest
      • getHeaders

        public java.util.Enumeration<java.lang.String> getHeaders​(java.lang.String name)
        Specified by:
        getHeaders in interface javax.servlet.http.HttpServletRequest
      • getInputState

        public int getInputState()
        Returns:
        Returns the inputState.
      • getInputStream

        public javax.servlet.ServletInputStream getInputStream()
                                                        throws java.io.IOException
        Specified by:
        getInputStream in interface javax.servlet.ServletRequest
        Throws:
        java.io.IOException
      • getIntHeader

        public int getIntHeader​(java.lang.String name)
        Specified by:
        getIntHeader in interface javax.servlet.http.HttpServletRequest
      • getLocale

        public java.util.Locale getLocale()
        Specified by:
        getLocale in interface javax.servlet.ServletRequest
      • getLocales

        public java.util.Enumeration<java.util.Locale> getLocales()
        Specified by:
        getLocales in interface javax.servlet.ServletRequest
      • getLocalAddr

        public java.lang.String getLocalAddr()
        Specified by:
        getLocalAddr in interface javax.servlet.ServletRequest
      • getLocalName

        public java.lang.String getLocalName()
        Specified by:
        getLocalName in interface javax.servlet.ServletRequest
      • getLocalPort

        public int getLocalPort()
        Specified by:
        getLocalPort in interface javax.servlet.ServletRequest
      • getMethod

        public java.lang.String getMethod()
        Specified by:
        getMethod in interface javax.servlet.http.HttpServletRequest
      • getParameter

        public java.lang.String getParameter​(java.lang.String name)
        Specified by:
        getParameter in interface javax.servlet.ServletRequest
      • getParameterMap

        public java.util.Map<java.lang.String,​java.lang.String[]> getParameterMap()
        Specified by:
        getParameterMap in interface javax.servlet.ServletRequest
      • getParameterNames

        public java.util.Enumeration<java.lang.String> getParameterNames()
        Specified by:
        getParameterNames in interface javax.servlet.ServletRequest
      • getParameterValues

        public java.lang.String[] getParameterValues​(java.lang.String name)
        Specified by:
        getParameterValues in interface javax.servlet.ServletRequest
      • getQueryParameters

        public MultiMap<java.lang.String> getQueryParameters()
      • setQueryParameters

        public void setQueryParameters​(MultiMap<java.lang.String> queryParameters)
      • setContentParameters

        public void setContentParameters​(MultiMap<java.lang.String> contentParameters)
      • resetParameters

        public void resetParameters()
      • getPathInfo

        public java.lang.String getPathInfo()
        Specified by:
        getPathInfo in interface javax.servlet.http.HttpServletRequest
      • getPathTranslated

        public java.lang.String getPathTranslated()
        Specified by:
        getPathTranslated in interface javax.servlet.http.HttpServletRequest
      • getProtocol

        public java.lang.String getProtocol()
        Specified by:
        getProtocol in interface javax.servlet.ServletRequest
      • getQueryEncoding

        public java.lang.String getQueryEncoding()
      • getQueryString

        public java.lang.String getQueryString()
        Specified by:
        getQueryString in interface javax.servlet.http.HttpServletRequest
      • getReader

        public java.io.BufferedReader getReader()
                                         throws java.io.IOException
        Specified by:
        getReader in interface javax.servlet.ServletRequest
        Throws:
        java.io.IOException
      • getRealPath

        public java.lang.String getRealPath​(java.lang.String path)
        Specified by:
        getRealPath in interface javax.servlet.ServletRequest
      • getRemoteInetSocketAddress

        public java.net.InetSocketAddress getRemoteInetSocketAddress()
        Access the underlying Remote InetSocketAddress for this request.
        Returns:
        the remote InetSocketAddress for this request, or null if the request has no remote (see ServletRequest.getRemoteAddr() for conditions that result in no remote address)
      • getRemoteAddr

        public java.lang.String getRemoteAddr()
        Specified by:
        getRemoteAddr in interface javax.servlet.ServletRequest
      • getRemoteHost

        public java.lang.String getRemoteHost()
        Specified by:
        getRemoteHost in interface javax.servlet.ServletRequest
      • getRemotePort

        public int getRemotePort()
        Specified by:
        getRemotePort in interface javax.servlet.ServletRequest
      • getRemoteUser

        public java.lang.String getRemoteUser()
        Specified by:
        getRemoteUser in interface javax.servlet.http.HttpServletRequest
      • getRequestDispatcher

        public javax.servlet.RequestDispatcher getRequestDispatcher​(java.lang.String path)
        Specified by:
        getRequestDispatcher in interface javax.servlet.ServletRequest
      • getRequestedSessionId

        public java.lang.String getRequestedSessionId()
        Specified by:
        getRequestedSessionId in interface javax.servlet.http.HttpServletRequest
      • getRequestURI

        public java.lang.String getRequestURI()
        Specified by:
        getRequestURI in interface javax.servlet.http.HttpServletRequest
      • getRequestURL

        public java.lang.StringBuffer getRequestURL()
        Specified by:
        getRequestURL in interface javax.servlet.http.HttpServletRequest
      • getResponse

        public Response getResponse()
      • getRootURL

        public java.lang.StringBuilder getRootURL()
        Reconstructs the URL the client used to make the request. The returned URL contains a protocol, server name, port number, and, but it does not include a path.

        Because this method returns a StringBuffer, not a string, you can modify the URL easily, for example, to append path and query parameters. This method is useful for creating redirect messages and for reporting errors.

        Returns:
        "scheme://host:port"
      • getScheme

        public java.lang.String getScheme()
        Specified by:
        getScheme in interface javax.servlet.ServletRequest
      • getServerName

        public java.lang.String getServerName()
        Specified by:
        getServerName in interface javax.servlet.ServletRequest
      • getServerPort

        public int getServerPort()
        Specified by:
        getServerPort in interface javax.servlet.ServletRequest
      • getServletContext

        public javax.servlet.ServletContext getServletContext()
        Specified by:
        getServletContext in interface javax.servlet.ServletRequest
      • getServletName

        public java.lang.String getServletName()
      • getServletPath

        public java.lang.String getServletPath()
        Specified by:
        getServletPath in interface javax.servlet.http.HttpServletRequest
      • getServletResponse

        public javax.servlet.ServletResponse getServletResponse()
      • changeSessionId

        public java.lang.String changeSessionId()
        Specified by:
        changeSessionId in interface javax.servlet.http.HttpServletRequest
      • onCompleted

        public void onCompleted()
        Called when the request is fully finished being handled. For every session in any context that the session has accessed, ensure that the session is completed.
      • onResponseCommit

        public void onResponseCommit()
        Called when a response is about to be committed, ie sent back to the client
      • getSession

        public javax.servlet.http.HttpSession getSession​(SessionHandler sessionHandler)
        Find a session that this request has already entered for the given SessionHandler
        Parameters:
        sessionHandler - the SessionHandler (ie context) to check
        Returns:
      • getSession

        public javax.servlet.http.HttpSession getSession()
        Specified by:
        getSession in interface javax.servlet.http.HttpServletRequest
      • getSession

        public javax.servlet.http.HttpSession getSession​(boolean create)
        Specified by:
        getSession in interface javax.servlet.http.HttpServletRequest
      • getSessionHandler

        public SessionHandler getSessionHandler()
        Returns:
        Returns the sessionManager.
      • getTimeStamp

        public long getTimeStamp()
        Get Request TimeStamp
        Returns:
        The time that the request was received.
      • getHttpURI

        public HttpURI getHttpURI()
        Returns:
        Returns the uri.
      • getOriginalURI

        public java.lang.String getOriginalURI()
        Returns:
        Returns the original uri passed in metadata before customization/rewrite
      • setHttpURI

        public void setHttpURI​(HttpURI uri)
        Parameters:
        uri - the URI to set
      • getUserPrincipal

        public java.security.Principal getUserPrincipal()
        Specified by:
        getUserPrincipal in interface javax.servlet.http.HttpServletRequest
      • isHandled

        public boolean isHandled()
      • isAsyncStarted

        public boolean isAsyncStarted()
        Specified by:
        isAsyncStarted in interface javax.servlet.ServletRequest
      • isAsyncSupported

        public boolean isAsyncSupported()
        Specified by:
        isAsyncSupported in interface javax.servlet.ServletRequest
      • isRequestedSessionIdFromCookie

        public boolean isRequestedSessionIdFromCookie()
        Specified by:
        isRequestedSessionIdFromCookie in interface javax.servlet.http.HttpServletRequest
      • isRequestedSessionIdFromUrl

        public boolean isRequestedSessionIdFromUrl()
        Specified by:
        isRequestedSessionIdFromUrl in interface javax.servlet.http.HttpServletRequest
      • isRequestedSessionIdFromURL

        public boolean isRequestedSessionIdFromURL()
        Specified by:
        isRequestedSessionIdFromURL in interface javax.servlet.http.HttpServletRequest
      • isRequestedSessionIdValid

        public boolean isRequestedSessionIdValid()
        Specified by:
        isRequestedSessionIdValid in interface javax.servlet.http.HttpServletRequest
      • isSecure

        public boolean isSecure()
        Specified by:
        isSecure in interface javax.servlet.ServletRequest
      • setSecure

        public void setSecure​(boolean secure)
      • isUserInRole

        public boolean isUserInRole​(java.lang.String role)
        Specified by:
        isUserInRole in interface javax.servlet.http.HttpServletRequest
      • setMetaData

        public void setMetaData​(MetaData.Request request)
        Parameters:
        request - the Request metadata
      • hasMetaData

        public boolean hasMetaData()
      • recycle

        protected void recycle()
      • removeAttribute

        public void removeAttribute​(java.lang.String name)
        Specified by:
        removeAttribute in interface javax.servlet.ServletRequest
      • removeEventListener

        public void removeEventListener​(java.util.EventListener listener)
      • setAsyncSupported

        public void setAsyncSupported​(boolean supported,
                                      java.lang.Object source)
      • setAttribute

        public void setAttribute​(java.lang.String name,
                                 java.lang.Object value)
        Specified by:
        setAttribute in interface javax.servlet.ServletRequest
      • setAttributes

        public void setAttributes​(Attributes attributes)
      • setAsyncAttributes

        public void setAsyncAttributes()
      • setAuthentication

        public void setAuthentication​(Authentication authentication)
        Set the authentication.
        Parameters:
        authentication - the authentication to set
      • setCharacterEncoding

        public void setCharacterEncoding​(java.lang.String encoding)
                                  throws java.io.UnsupportedEncodingException
        Specified by:
        setCharacterEncoding in interface javax.servlet.ServletRequest
        Throws:
        java.io.UnsupportedEncodingException
      • setCharacterEncodingUnchecked

        public void setCharacterEncodingUnchecked​(java.lang.String encoding)
      • setContentType

        public void setContentType​(java.lang.String contentType)
      • setContext

        public void setContext​(ContextHandler.Context context)
        Set request context
        Parameters:
        context - context object
      • setContextPath

        public void setContextPath​(java.lang.String contextPath)
        Sets the "context path" for this request
        Parameters:
        contextPath - the context path for this request
        See Also:
        HttpServletRequest.getContextPath()
      • setCookies

        public void setCookies​(javax.servlet.http.Cookie[] cookies)
        Parameters:
        cookies - The cookies to set.
      • setDispatcherType

        public void setDispatcherType​(javax.servlet.DispatcherType type)
      • setHandled

        public void setHandled​(boolean h)
      • setMethod

        public void setMethod​(java.lang.String method)
        Parameters:
        method - The method to set.
      • setHttpVersion

        public void setHttpVersion​(HttpVersion version)
      • isHead

        public boolean isHead()
      • setPathInfo

        public void setPathInfo​(java.lang.String pathInfo)
        Parameters:
        pathInfo - The pathInfo to set.
      • setQueryEncoding

        public void setQueryEncoding​(java.lang.String queryEncoding)
        Set the character encoding used for the query string. This call will effect the return of getQueryString and getParamaters. It must be called before any getParameter methods. The request attribute "org.eclipse.jetty.server.Request.queryEncoding" may be set as an alternate method of calling setQueryEncoding.
        Parameters:
        queryEncoding - the URI query character encoding
      • setQueryString

        public void setQueryString​(java.lang.String queryString)
        Parameters:
        queryString - The queryString to set.
      • setRemoteAddr

        public void setRemoteAddr​(java.net.InetSocketAddress addr)
        Parameters:
        addr - The address to set.
      • setRequestedSessionId

        public void setRequestedSessionId​(java.lang.String requestedSessionId)
        Parameters:
        requestedSessionId - The requestedSessionId to set.
      • setRequestedSessionIdFromCookie

        public void setRequestedSessionIdFromCookie​(boolean requestedSessionIdCookie)
        Parameters:
        requestedSessionIdCookie - The requestedSessionIdCookie to set.
      • setURIPathQuery

        public void setURIPathQuery​(java.lang.String requestURI)
      • setScheme

        public void setScheme​(java.lang.String scheme)
        Parameters:
        scheme - The scheme to set.
      • setAuthority

        public void setAuthority​(java.lang.String host,
                                 int port)
        Parameters:
        host - The host to set.
        port - the port to set
      • setServletPath

        public void setServletPath​(java.lang.String servletPath)
        Parameters:
        servletPath - The servletPath to set.
      • setSession

        public void setSession​(javax.servlet.http.HttpSession session)
        Parameters:
        session - The session to set.
      • setSessionHandler

        public void setSessionHandler​(SessionHandler sessionHandler)
        Parameters:
        sessionHandler - The SessionHandler to set.
      • setTimeStamp

        public void setTimeStamp​(long ts)
      • startAsync

        public javax.servlet.AsyncContext startAsync()
                                              throws java.lang.IllegalStateException
        Specified by:
        startAsync in interface javax.servlet.ServletRequest
        Throws:
        java.lang.IllegalStateException
      • startAsync

        public javax.servlet.AsyncContext startAsync​(javax.servlet.ServletRequest servletRequest,
                                                     javax.servlet.ServletResponse servletResponse)
                                              throws java.lang.IllegalStateException
        Specified by:
        startAsync in interface javax.servlet.ServletRequest
        Throws:
        java.lang.IllegalStateException
      • unwrap

        public static javax.servlet.http.HttpServletRequest unwrap​(javax.servlet.ServletRequest servletRequest)
      • toString

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

        public boolean authenticate​(javax.servlet.http.HttpServletResponse response)
                             throws java.io.IOException,
                                    javax.servlet.ServletException
        Specified by:
        authenticate in interface javax.servlet.http.HttpServletRequest
        Throws:
        java.io.IOException
        javax.servlet.ServletException
      • getPart

        public javax.servlet.http.Part getPart​(java.lang.String name)
                                        throws java.io.IOException,
                                               javax.servlet.ServletException
        Specified by:
        getPart in interface javax.servlet.http.HttpServletRequest
        Throws:
        java.io.IOException
        javax.servlet.ServletException
      • getParts

        public java.util.Collection<javax.servlet.http.Part> getParts()
                                                               throws java.io.IOException,
                                                                      javax.servlet.ServletException
        Specified by:
        getParts in interface javax.servlet.http.HttpServletRequest
        Throws:
        java.io.IOException
        javax.servlet.ServletException
      • login

        public void login​(java.lang.String username,
                          java.lang.String password)
                   throws javax.servlet.ServletException
        Specified by:
        login in interface javax.servlet.http.HttpServletRequest
        Throws:
        javax.servlet.ServletException
      • logout

        public void logout()
                    throws javax.servlet.ServletException
        Specified by:
        logout in interface javax.servlet.http.HttpServletRequest
        Throws:
        javax.servlet.ServletException
      • mergeQueryParameters

        public void mergeQueryParameters​(java.lang.String oldQuery,
                                         java.lang.String newQuery,
                                         boolean updateQueryString)
      • upgrade

        public <T extends javax.servlet.http.HttpUpgradeHandler> T upgrade​(java.lang.Class<T> handlerClass)
                                                                    throws java.io.IOException,
                                                                           javax.servlet.ServletException
        Specified by:
        upgrade in interface javax.servlet.http.HttpServletRequest
        Throws:
        java.io.IOException
        javax.servlet.ServletException
        See Also:
        HttpServletRequest.upgrade(java.lang.Class)