Class Request

java.lang.Object
org.eclipse.jetty.server.Request
All Implemented Interfaces:
jakarta.servlet.http.HttpServletRequest, jakarta.servlet.ServletRequest

public class Request extends Object implements jakarta.servlet.http.HttpServletRequest
Jetty Request.

Implements HttpServletRequest from the jakarta.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

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 Details

  • Constructor Details

  • Method Details

    • getBaseRequest

      public static Request getBaseRequest(jakarta.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()
    • setHttpFields

      public void setHttpFields(HttpFields fields)
    • getTrailerFields

      public Map<String,String> getTrailerFields()
      Specified by:
      getTrailerFields in interface jakarta.servlet.http.HttpServletRequest
    • setTrailerHttpFields

      public void setTrailerHttpFields(HttpFields trailers)
    • getTrailerHttpFields

      public HttpFields getTrailerHttpFields()
    • getHttpInput

      public HttpInput getHttpInput()
    • isPush

      public boolean isPush()
    • isPushSupported

      public boolean isPushSupported()
    • newPushBuilder

      public jakarta.servlet.http.PushBuilder newPushBuilder()
      Specified by:
      newPushBuilder in interface jakarta.servlet.http.HttpServletRequest
    • addEventListener

      public void addEventListener(EventListener listener)
    • enterSession

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

      public void extractFormParameters(MultiMap<String> params)
    • getAsyncContext

      public jakarta.servlet.AsyncContext getAsyncContext()
      Specified by:
      getAsyncContext in interface jakarta.servlet.ServletRequest
    • getHttpChannelState

      public HttpChannelState getHttpChannelState()
    • getComplianceViolationListener

      public ComplianceViolation.Listener getComplianceViolationListener()
    • getAttribute

      public Object getAttribute(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 jakarta.servlet.ServletRequest
      See Also:
      • ServletRequest.getAttribute(java.lang.String)
    • getAttributeNames

      public Enumeration<String> getAttributeNames()
      Specified by:
      getAttributeNames in interface jakarta.servlet.ServletRequest
    • getAttributes

      public Attributes getAttributes()
    • getAuthentication

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

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

      public String getCharacterEncoding()
      Specified by:
      getCharacterEncoding in interface jakarta.servlet.ServletRequest
    • getHttpChannel

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

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

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

      public long getContentRead()
    • getContentType

      public String getContentType()
      Specified by:
      getContentType in interface jakarta.servlet.ServletRequest
    • getContext

      public ContextHandler.Context getContext()
      Returns:
      The current context used for this request, or null if setContext(org.eclipse.jetty.server.handler.ContextHandler.Context, java.lang.String) has not yet been called.
    • 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 String getContextPath()
      Specified by:
      getContextPath in interface jakarta.servlet.http.HttpServletRequest
    • getPathInContext

      public String getPathInContext()
      Get the path in the context. The path relative to the context path, analogous to getServletPath() + getPathInfo(). If no context is set, then the path in context is the full path.
      Returns:
      The decoded part of the getRequestURI() path after any getContextPath() up to any getQueryString(), excluding path parameters.
      See Also:
    • getCookies

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

      public long getDateHeader(String name)
      Specified by:
      getDateHeader in interface jakarta.servlet.http.HttpServletRequest
    • getDispatcherType

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

      public String getHeader(String name)
      Specified by:
      getHeader in interface jakarta.servlet.http.HttpServletRequest
    • getHeaderNames

      public Enumeration<String> getHeaderNames()
      Specified by:
      getHeaderNames in interface jakarta.servlet.http.HttpServletRequest
    • getHeaders

      public Enumeration<String> getHeaders(String name)
      Specified by:
      getHeaders in interface jakarta.servlet.http.HttpServletRequest
    • getInputState

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

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

      public int getIntHeader(String name)
      Specified by:
      getIntHeader in interface jakarta.servlet.http.HttpServletRequest
    • getLocale

      public Locale getLocale()
      Specified by:
      getLocale in interface jakarta.servlet.ServletRequest
    • getLocales

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

      public String getLocalAddr()
      Specified by:
      getLocalAddr in interface jakarta.servlet.ServletRequest
    • getLocalName

      public String getLocalName()
      Specified by:
      getLocalName in interface jakarta.servlet.ServletRequest
    • getLocalPort

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

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

      public String getParameter(String name)
      Specified by:
      getParameter in interface jakarta.servlet.ServletRequest
    • getParameterMap

      public Map<String,String[]> getParameterMap()
      Specified by:
      getParameterMap in interface jakarta.servlet.ServletRequest
    • getParameterNames

      public Enumeration<String> getParameterNames()
      Specified by:
      getParameterNames in interface jakarta.servlet.ServletRequest
    • getParameterValues

      public String[] getParameterValues(String name)
      Specified by:
      getParameterValues in interface jakarta.servlet.ServletRequest
    • getQueryParameters

      public MultiMap<String> getQueryParameters()
    • setQueryParameters

      public void setQueryParameters(MultiMap<String> queryParameters)
    • setContentParameters

      public void setContentParameters(MultiMap<String> contentParameters)
    • resetParameters

      public void resetParameters()
    • getPathInfo

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

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

      public String getProtocol()
      Specified by:
      getProtocol in interface jakarta.servlet.ServletRequest
    • getHttpVersion

      public HttpVersion getHttpVersion()
    • getQueryEncoding

      public String getQueryEncoding()
    • getQueryString

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

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

      @Deprecated(since="Servlet API 2.1") public String getRealPath(String path)
      Deprecated.
      Specified by:
      getRealPath in interface jakarta.servlet.ServletRequest
    • getRemoteInetSocketAddress

      public 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 String getRemoteAddr()
      Specified by:
      getRemoteAddr in interface jakarta.servlet.ServletRequest
    • getRemoteHost

      public String getRemoteHost()
      Specified by:
      getRemoteHost in interface jakarta.servlet.ServletRequest
    • getRemotePort

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

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

      public jakarta.servlet.RequestDispatcher getRequestDispatcher(String path)
      Specified by:
      getRequestDispatcher in interface jakarta.servlet.ServletRequest
    • getRequestedSessionId

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

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

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

      public Response getResponse()
    • getRootURL

      public 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 String getScheme()
      Specified by:
      getScheme in interface jakarta.servlet.ServletRequest
    • getServerName

      public String getServerName()
      Specified by:
      getServerName in interface jakarta.servlet.ServletRequest
    • getServerPort

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

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

      public String getServletName()
    • getServletPath

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

      public jakarta.servlet.ServletResponse getServletResponse()
    • changeSessionId

      public String changeSessionId()
      Specified by:
      changeSessionId in interface jakarta.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 jakarta.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:
      the session for the passed session handler or null
    • getSession

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

      public jakarta.servlet.http.HttpSession getSession(boolean create)
      Specified by:
      getSession in interface jakarta.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()
    • setHttpURI

      public void setHttpURI(HttpURI uri)
    • getOriginalURI

      public String getOriginalURI()
      Returns:
      Returns the original uri passed in metadata before customization/rewrite
    • getUserIdentity

      public UserIdentity getUserIdentity()
    • getResolvedUserIdentity

      public UserIdentity getResolvedUserIdentity()
      Returns:
      The resolved user Identity, which may be null if the Authentication is not Authentication.User (eg. Authentication.Deferred).
    • getUserIdentityScope

      public UserIdentity.Scope getUserIdentityScope()
    • getUserPrincipal

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

      public boolean isHandled()
    • isAsyncStarted

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

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

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

      @Deprecated(since="Servlet API 2.1") public boolean isRequestedSessionIdFromUrl()
      Deprecated.
      Specified by:
      isRequestedSessionIdFromUrl in interface jakarta.servlet.http.HttpServletRequest
    • isRequestedSessionIdFromURL

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

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

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

      public void setSecure(boolean secure)
    • getBeginNanoTime

      public long getBeginNanoTime()

      Get the nanoTime at which the request arrived to a connector, obtained via System.nanoTime(). This method can be used when measuring latencies.

      Returns:
      The nanoTime at which the request was received/created in nanoseconds
    • isUserInRole

      public boolean isUserInRole(String role)
      Specified by:
      isUserInRole in interface jakarta.servlet.http.HttpServletRequest
    • setMetaData

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

      public MetaData.Request getMetaData()
    • hasMetaData

      public boolean hasMetaData()
    • recycle

      protected void recycle()
    • removeAttribute

      public void removeAttribute(String name)
      Specified by:
      removeAttribute in interface jakarta.servlet.ServletRequest
    • removeEventListener

      public void removeEventListener(EventListener listener)
    • setAsyncSupported

      public void setAsyncSupported(boolean supported, Object source)
    • setAttribute

      public void setAttribute(String name, Object value)
      Set a request attribute. if the attribute name is "org.eclipse.jetty.server.server.Request.queryEncoding" then the value is also passed in a call to setQueryEncoding(java.lang.String).
      Specified by:
      setAttribute in interface jakarta.servlet.ServletRequest
      See Also:
      • ServletRequest.setAttribute(java.lang.String, java.lang.Object)
    • setAttributes

      public void setAttributes(Attributes attributes)
      Set the attributes for the request.
      Parameters:
      attributes - The attributes, which must be a Attributes.Wrapper for which Attributes.unwrap(Attributes) will return the original ServletAttributes.
    • setAsyncAttributes

      public void setAsyncAttributes()
    • setAuthentication

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

      public void setCharacterEncoding(String encoding) throws UnsupportedEncodingException
      Specified by:
      setCharacterEncoding in interface jakarta.servlet.ServletRequest
      Throws:
      UnsupportedEncodingException
    • setCharacterEncodingUnchecked

      public void setCharacterEncodingUnchecked(String encoding)
    • setContentType

      public void setContentType(String contentType)
    • setContext

      public void setContext(ContextHandler.Context context, String pathInContext)
      Set request context and path in the context.
      Parameters:
      context - context object
      pathInContext - the part of the URI path that is withing the context. For servlets, this is equal to servletPath + pathInfo
    • takeNewContext

      public boolean takeNewContext()
      Returns:
      True if this is the first call of takeNewContext() since the last setContext(org.eclipse.jetty.server.handler.ContextHandler.Context, String) call.
    • setCookies

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

      public void setDispatcherType(jakarta.servlet.DispatcherType type)
    • setHandled

      public void setHandled(boolean h)
    • setMethod

      public void setMethod(String method)
      Parameters:
      method - The method to set.
    • isHead

      public boolean isHead()
    • setQueryEncoding

      public void setQueryEncoding(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
    • setRemoteAddr

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

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

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

      public void setSession(jakarta.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)
    • setUserIdentityScope

      public void setUserIdentityScope(UserIdentity.Scope scope)
    • startAsync

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

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

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

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

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

      public jakarta.servlet.http.Part getPart(String name) throws IOException, jakarta.servlet.ServletException
      Specified by:
      getPart in interface jakarta.servlet.http.HttpServletRequest
      Throws:
      IOException
      jakarta.servlet.ServletException
    • getParts

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

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

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

      public void mergeQueryParameters(String oldQuery, String newQuery)
    • upgrade

      public <T extends jakarta.servlet.http.HttpUpgradeHandler> T upgrade(Class<T> handlerClass) throws IOException, jakarta.servlet.ServletException
      Specified by:
      upgrade in interface jakarta.servlet.http.HttpServletRequest
      Throws:
      IOException
      jakarta.servlet.ServletException
    • setServletPathMapping

      public void setServletPathMapping(ServletPathMapping servletPathMapping)
      Set the servletPathMapping, the servletPath and the pathInfo.
      Parameters:
      servletPathMapping - The mapping used to return from getHttpServletMapping()
    • getServletPathMapping

      public ServletPathMapping getServletPathMapping()
      Returns:
      The mapping for the current target servlet, regardless of dispatch type.
    • getHttpServletMapping

      public jakarta.servlet.http.HttpServletMapping getHttpServletMapping()
      Specified by:
      getHttpServletMapping in interface jakarta.servlet.http.HttpServletRequest