Class Connector

All Implemented Interfaces:
MBeanRegistration, JmxEnabled, Lifecycle

public class Connector extends LifecycleMBeanBase
Implementation of a Coyote connector.
  • Field Details

    • INTERNAL_EXECUTOR_NAME

      public static final String INTERNAL_EXECUTOR_NAME
      Name used for the internal executor when no external executor is configured.
      See Also:
    • service

      protected Service service
      The Service we are associated with (if any).
    • allowBackslash

      protected boolean allowBackslash
      If this is true the '\' character will be permitted as a path delimiter. If not specified, the default value of false will be used.
    • allowTrace

      protected boolean allowTrace
      Do we allow TRACE ?
    • asyncTimeout

      protected long asyncTimeout
      Default timeout for asynchronous requests (ms).
    • enableLookups

      protected boolean enableLookups
      The "enable DNS lookups" flag for this Connector.
    • enforceEncodingInGetWriter

      protected boolean enforceEncodingInGetWriter
      If this is true then a call to Response.getWriter() if no character encoding has been specified will result in subsequent calls to Response.getCharacterEncoding() returning ISO-8859-1 and the Content-Type response header will include a charset=ISO-8859-1 component. (SRV.15.2.22.1) If not specified, the default specification compliant value of true will be used.
    • xpoweredBy

      protected boolean xpoweredBy
      Is generation of X-Powered-By response header enabled/disabled?
    • proxyName

      protected String proxyName
      The server name to which we should pretend requests to this Connector were directed. This is useful when operating Tomcat behind a proxy server, so that redirects get constructed accurately. If not specified, the server name included in the Host header is used.
    • proxyPort

      protected int proxyPort
      The server port to which we should pretend requests to this Connector were directed. This is useful when operating Tomcat behind a proxy server, so that redirects get constructed accurately. If not specified, the port number specified by the port property is used.
    • discardFacades

      protected boolean discardFacades
      The flag that controls recycling of the facades of the request processing objects. If set to true the object facades will be discarded when the request is recycled. If the security manager is enabled, this setting is ignored and object facades are always discarded.
    • redirectPort

      protected int redirectPort
      The redirect port for non-SSL to SSL redirects.
    • scheme

      protected String scheme
      The request scheme that will be set on all requests received through this connector.
    • secure

      protected boolean secure
      The secure connection flag that will be set on all requests received through this connector.
    • sm

      protected static final StringManager sm
      The string manager for this package.
    • maxParameterCount

      protected int maxParameterCount
      The maximum number of parameters (GET plus POST) which will be automatically parsed by the container. 1000 by default. A value of less than 0 means no limit.
    • maxPostSize

      protected int maxPostSize
      Maximum size of a POST which will be automatically parsed by the container. 2 MiB by default.
    • maxSavePostSize

      protected int maxSavePostSize
      Maximum size of a POST which will be saved by the container during authentication. 4 KiB by default
    • parseBodyMethods

      protected String parseBodyMethods
      Comma-separated list of HTTP methods that will be parsed according to POST-style rules for application/x-www-form-urlencoded request bodies.
    • parseBodyMethodsSet

      protected HashSet<String> parseBodyMethodsSet
      A Set of methods determined by parseBodyMethods.
    • useIPVHosts

      protected boolean useIPVHosts
      Flag to use IP-based virtual hosting.
    • protocolHandlerClassName

      protected final String protocolHandlerClassName
      Coyote Protocol handler class name. See Connector() for current default.
    • configuredProtocol

      protected final String configuredProtocol
      Name of the protocol that was configured.
    • protocolHandler

      protected final ProtocolHandler protocolHandler
      Coyote protocol handler.
    • adapter

      protected Adapter adapter
      Coyote adapter.
    • useBodyEncodingForURI

      protected boolean useBodyEncodingForURI
      URI encoding as body.
  • Constructor Details

    • Connector

      public Connector()
      Defaults to using HTTP/1.1 NIO implementation.
    • Connector

      public Connector(String protocol)
      Create a new Connector instance with the specified protocol.
      Parameters:
      protocol - The protocol to use
    • Connector

      public Connector(ProtocolHandler protocolHandler)
      Create a new Connector instance with the specified protocol handler.
      Parameters:
      protocolHandler - The protocol handler to use
  • Method Details

    • getProperty

      public Object getProperty(String name)
      Return a property from the protocol handler.
      Parameters:
      name - the property name
      Returns:
      the property value
    • setProperty

      public boolean setProperty(String name, String value)
      Set a property on the protocol handler.
      Parameters:
      name - the property name
      value - the property value
      Returns:
      true if the property was successfully set
    • getService

      public Service getService()
      Returns the Service with which this connector is associated.
      Returns:
      the associated Service, or null if not associated
    • setService

      public void setService(Service service)
      Set the Service with which we are associated (if any).
      Parameters:
      service - The service that owns this Engine
    • getAllowBackslash

      public boolean getAllowBackslash()
      Returns whether backslash characters are allowed in URLs.
      Returns:
      true if backslash characters are allowed in URLs, default is false
    • setAllowBackslash

      public void setAllowBackslash(boolean allowBackslash)
      Set the allowBackslash flag.
      Parameters:
      allowBackslash - the new flag value
    • getAllowTrace

      public boolean getAllowTrace()
      Returns whether the TRACE HTTP method is allowed.
      Returns:
      true if the TRACE method is allowed, default is false
    • setAllowTrace

      public void setAllowTrace(boolean allowTrace)
      Set the allowTrace flag, to disable or enable the TRACE HTTP method.
      Parameters:
      allowTrace - The new allowTrace flag
    • getAsyncTimeout

      public long getAsyncTimeout()
      Returns the default timeout for async requests.
      Returns:
      the default timeout in milliseconds
    • setAsyncTimeout

      public void setAsyncTimeout(long asyncTimeout)
      Set the default timeout for async requests.
      Parameters:
      asyncTimeout - The new timeout in ms.
    • getDiscardFacades

      public boolean getDiscardFacades()
      Returns whether the object facades are discarded.
      Returns:
      true if the object facades are discarded
    • setDiscardFacades

      public void setDiscardFacades(boolean discardFacades)
      Set the recycling strategy for the object facades.
      Parameters:
      discardFacades - the new value of the flag
    • getEnableLookups

      public boolean getEnableLookups()
      Return the "enable DNS lookups" flag.
      Returns:
      the "enable DNS lookups" flag
    • setEnableLookups

      public void setEnableLookups(boolean enableLookups)
      Set the "enable DNS lookups" flag.
      Parameters:
      enableLookups - The new "enable DNS lookups" flag value
    • getEnforceEncodingInGetWriter

      public boolean getEnforceEncodingInGetWriter()
      Returns whether the encoding must be enforced when calling getWriter().
      Returns:
      true if the encoding must be enforced when calling getWriter()
    • setEnforceEncodingInGetWriter

      public void setEnforceEncodingInGetWriter(boolean enforceEncodingInGetWriter)
      Set the enforceEncodingInGetWriter flag.
      Parameters:
      enforceEncodingInGetWriter - the new flag value
    • getMaxCookieCount

      public int getMaxCookieCount()
      Returns the maximum number of cookies that will be accepted in a request.
      Returns:
      the maximum cookie count
    • setMaxCookieCount

      public void setMaxCookieCount(int maxCookieCount)
      Sets the maximum number of cookies that will be accepted in a request.
      Parameters:
      maxCookieCount - the new maximum cookie count
    • getMaxParameterCount

      public int getMaxParameterCount()
      Returns the maximum number of parameters (GET plus POST) that will be automatically parsed by the container. A value of less than 0 means no limit.
      Returns:
      the maximum parameter count
    • setMaxParameterCount

      public void setMaxParameterCount(int maxParameterCount)
      Set the maximum number of parameters (GET plus POST) that will be automatically parsed by the container. A value of less than 0 means no limit.
      Parameters:
      maxParameterCount - The new setting
    • getMaxPartCount

      public int getMaxPartCount()
      Returns the maximum number of parts that will be accepted in a multipart request.
      Returns:
      the maximum part count
    • setMaxPartCount

      public void setMaxPartCount(int maxPartCount)
      Sets the maximum number of parts that will be accepted in a multipart request.
      Parameters:
      maxPartCount - the new maximum part count
    • getMaxPartHeaderSize

      public int getMaxPartHeaderSize()
      Returns the maximum size of the headers for each part in a multipart request.
      Returns:
      the maximum part header size
    • setMaxPartHeaderSize

      public void setMaxPartHeaderSize(int maxPartHeaderSize)
      Sets the maximum size of the headers for each part in a multipart request.
      Parameters:
      maxPartHeaderSize - the new maximum part header size
    • getMaxPostSize

      public int getMaxPostSize()
      Returns the maximum size of a POST which will be automatically parsed by the container.
      Returns:
      the maximum POST size in bytes
    • setMaxPostSize

      public void setMaxPostSize(int maxPostSize)
      Set the maximum size of a POST which will be automatically parsed by the container.
      Parameters:
      maxPostSize - The new maximum size in bytes of a POST which will be automatically parsed by the container
    • getMaxSavePostSize

      public int getMaxSavePostSize()
      Returns the maximum size of a POST which will be saved by the container during authentication.
      Returns:
      the maximum saved POST size in bytes
    • setMaxSavePostSize

      public void setMaxSavePostSize(int maxSavePostSize)
      Set the maximum size of a POST which will be saved by the container during authentication.
      Parameters:
      maxSavePostSize - The new maximum size in bytes of a POST which will be saved by the container during authentication.
    • getParseBodyMethods

      public String getParseBodyMethods()
      Returns the HTTP methods which will support body parameters parsing.
      Returns:
      the comma-separated list of HTTP methods
    • setParseBodyMethods

      public void setParseBodyMethods(String methods)
      Set list of HTTP methods which should allow body parameter parsing. This defaults to POST.
      Parameters:
      methods - Comma separated list of HTTP method names
    • isParseBodyMethod

      protected boolean isParseBodyMethod(String method)
      Checks whether the given HTTP method is configured to allow body parameter parsing.
      Parameters:
      method - the HTTP method name to check
      Returns:
      true if the method is in the parse body methods set
    • getNameIndex

      public int getNameIndex()
      Returns the unique index for this connector.
      Returns:
      the index
    • getPort

      public int getPort()
      Returns the port number on which this connector is configured to listen for requests. The special value of 0 means select a random free port when the socket is bound.
      Returns:
      the configured port number
    • setPort

      public void setPort(int port)
      Set the port number on which we listen for requests.
      Parameters:
      port - The new port number
    • getPortOffset

      public int getPortOffset()
      Returns the port offset to be applied to the configured port.
      Returns:
      the port offset value
    • setPortOffset

      public void setPortOffset(int portOffset)
      Sets the port offset to be applied to the configured port.
      Parameters:
      portOffset - the new port offset value
    • getPortWithOffset

      public int getPortWithOffset()
      Returns the effective port number after applying the port offset.
      Returns:
      the port number with offset applied
    • getLocalPort

      public int getLocalPort()
      Returns the port number on which this connector is actually listening. If the special value for getPort() of zero is used then this method will report the actual port bound.
      Returns:
      the actual local port number
    • getProtocol

      public String getProtocol()
      Returns the Coyote protocol handler in use.
      Returns:
      the protocol string
    • getProtocolHandlerClassName

      public String getProtocolHandlerClassName()
      Returns the class name of the Coyote protocol handler in use.
      Returns:
      the protocol handler class name
    • getProtocolHandler

      public ProtocolHandler getProtocolHandler()
      Returns the protocol handler associated with the connector.
      Returns:
      the protocol handler instance
    • getProxyName

      public String getProxyName()
      Returns the proxy server name for this Connector.
      Returns:
      the proxy server name
    • setProxyName

      public void setProxyName(String proxyName)
      Set the proxy server name for this Connector.
      Parameters:
      proxyName - The new proxy server name
    • getProxyPort

      public int getProxyPort()
      Returns the proxy server port for this Connector.
      Returns:
      the proxy server port
    • setProxyPort

      public void setProxyPort(int proxyPort)
      Set the proxy server port for this Connector.
      Parameters:
      proxyPort - The new proxy server port
    • getRedirectPort

      public int getRedirectPort()
      Returns the port number to which a request should be redirected if it comes in on a non-SSL port and is subject to a security constraint with a transport guarantee that requires SSL.
      Returns:
      the redirect port number
    • setRedirectPort

      public void setRedirectPort(int redirectPort)
      Set the redirect port number.
      Parameters:
      redirectPort - The redirect port number (non-SSL to SSL)
    • getRedirectPortWithOffset

      public int getRedirectPortWithOffset()
      Returns the redirect port with the port offset applied.
      Returns:
      the redirect port with offset
    • getScheme

      public String getScheme()
      Returns the scheme that will be assigned to requests received through this connector.
      Returns:
      the scheme, default value is "http"
    • setScheme

      public void setScheme(String scheme)
      Set the scheme that will be assigned to requests received through this connector.
      Parameters:
      scheme - The new scheme
    • getSecure

      public boolean getSecure()
      Returns the secure connection flag that will be assigned to requests received through this connector.
      Returns:
      the secure flag, default value is false
    • setSecure

      public void setSecure(boolean secure)
      Set the secure connection flag that will be assigned to requests received through this connector.
      Parameters:
      secure - The new secure connection flag
    • getURIEncoding

      public String getURIEncoding()
      Returns the name of character encoding to be used for the URI using the original case.
      Returns:
      the URI encoding name
    • getURICharset

      public Charset getURICharset()
      Returns the Charset to use to convert raw URI bytes (after %nn decoding) to characters.
      Returns:
      the URI charset, never null
    • setURIEncoding

      public void setURIEncoding(String URIEncoding)
      Set the URI encoding to be used for the URI.
      Parameters:
      URIEncoding - The new URI character encoding.
    • getUseBodyEncodingForURI

      public boolean getUseBodyEncodingForURI()
      Returns whether the entity body encoding should be used for the URI.
      Returns:
      true if the entity body encoding should be used for the URI
    • setUseBodyEncodingForURI

      public void setUseBodyEncodingForURI(boolean useBodyEncodingForURI)
      Set if the entity body encoding should be used for the URI.
      Parameters:
      useBodyEncodingForURI - The new value for the flag.
    • getXpoweredBy

      public boolean getXpoweredBy()
      Indicates whether the generation of an X-Powered-By response header for Servlet-generated responses is enabled or disabled for this Connector.
      Returns:
      true if generation of X-Powered-By response header is enabled, false otherwise
    • setXpoweredBy

      public void setXpoweredBy(boolean xpoweredBy)
      Enables or disables the generation of an X-Powered-By header (with value Servlet/2.5) for all servlet-generated responses returned by this Connector.
      Parameters:
      xpoweredBy - true if generation of X-Powered-By response header is to be enabled, false otherwise
    • setUseIPVHosts

      public void setUseIPVHosts(boolean useIPVHosts)
      Enable the use of IP-based virtual hosting.
      Parameters:
      useIPVHosts - true if Hosts are identified by IP, false if Hosts are identified by name.
    • getUseIPVHosts

      public boolean getUseIPVHosts()
      Test if IP-based virtual hosting is enabled.
      Returns:
      true if IP vhosts are enabled
    • getExecutorName

      public String getExecutorName()
      Returns the name of the executor associated with this connector.
      Returns:
      the executor name, or INTERNAL_EXECUTOR_NAME if using the internal executor
    • addSslHostConfig

      public void addSslHostConfig(SSLHostConfig sslHostConfig)
      Adds an SSL host configuration to this connector.
      Parameters:
      sslHostConfig - the SSL host configuration to add
    • findSslHostConfigs

      public SSLHostConfig[] findSslHostConfigs()
      Returns the SSL host configurations for this connector.
      Returns:
      array of SSL host configurations
    • addUpgradeProtocol

      public void addUpgradeProtocol(UpgradeProtocol upgradeProtocol)
      Adds an upgrade protocol to this connector.
      Parameters:
      upgradeProtocol - the upgrade protocol to add
    • findUpgradeProtocols

      public UpgradeProtocol[] findUpgradeProtocols()
      Returns the registered upgrade protocols for this connector.
      Returns:
      array of upgrade protocols
    • getEncodedReverseSolidusHandling

      public String getEncodedReverseSolidusHandling()
      Returns the handling mode for encoded reverse solidus (backslash) characters.
      Returns:
      the encoded reverse solidus handling mode as a string
    • setEncodedReverseSolidusHandling

      public void setEncodedReverseSolidusHandling(String encodedReverseSolidusHandling)
      Sets the handling mode for encoded reverse solidus (backslash) characters.
      Parameters:
      encodedReverseSolidusHandling - the handling mode value
    • getEncodedReverseSolidusHandlingInternal

      public EncodedSolidusHandling getEncodedReverseSolidusHandlingInternal()
      Returns the internal handling mode for encoded reverse solidus (backslash) characters.
      Returns:
      the encoded reverse solidus handling enum
    • getEncodedSolidusHandling

      public String getEncodedSolidusHandling()
      Returns the handling mode for encoded solidus (forward slash) characters.
      Returns:
      the encoded solidus handling mode as a string
    • setEncodedSolidusHandling

      public void setEncodedSolidusHandling(String encodedSolidusHandling)
      Sets the handling mode for encoded solidus (forward slash) characters.
      Parameters:
      encodedSolidusHandling - the handling mode value
    • getEncodedSolidusHandlingInternal

      public EncodedSolidusHandling getEncodedSolidusHandlingInternal()
      Returns the internal handling mode for encoded solidus (forward slash) characters.
      Returns:
      the encoded solidus handling enum
    • getRejectSuspiciousURIs

      public boolean getRejectSuspiciousURIs()
      Returns whether suspicious URIs should be rejected.
      Returns:
      true if suspicious URIs should be rejected
    • setRejectSuspiciousURIs

      public void setRejectSuspiciousURIs(boolean rejectSuspiciousURIs)
      Sets whether suspicious URIs should be rejected.
      Parameters:
      rejectSuspiciousURIs - true to reject suspicious URIs
    • createRequest

      public Request createRequest(Request coyoteRequest)
      Create (or allocate) and return a Request object suitable for specifying the contents of a Request to the responsible Container.
      Parameters:
      coyoteRequest - The Coyote request with which the Request object will always be associated. In normal usage this must be non-null. In some test scenarios, it may be possible to use a null request without triggering an NPE.
      Returns:
      a new Servlet request object
    • createResponse

      public Response createResponse(Response coyoteResponse)
      Create and return a Response object suitable for receiving the contents of a Response from the responsible Container.
      Parameters:
      coyoteResponse - The Coyote request with which the Response object will always be associated. In normal usage this must be non-null. In some test scenarios, it may be possible to use a null response without triggering an NPE.
      Returns:
      a new Servlet response object
    • createObjectNameKeyProperties

      protected String createObjectNameKeyProperties(String type)
      Create the key properties for the ObjectName of a registered MBean.
      Parameters:
      type - The component type
      Returns:
      the key properties string for the ObjectName
    • pause

      public void pause()
      Pause the connector.
    • resume

      public void resume()
      Resume the connector.
    • initInternal

      protected void initInternal() throws LifecycleException
      Description copied from class: LifecycleBase
      Subclasses implement this method to perform any instance initialisation required.
      Overrides:
      initInternal in class LifecycleMBeanBase
      Throws:
      LifecycleException - If the initialisation fails
    • startInternal

      protected void startInternal() throws LifecycleException
      Begin processing requests via this Connector.
      Specified by:
      startInternal in class LifecycleBase
      Throws:
      LifecycleException - if a fatal startup error occurs
    • stopInternal

      protected void stopInternal() throws LifecycleException
      Terminate processing requests via this Connector.
      Specified by:
      stopInternal in class LifecycleBase
      Throws:
      LifecycleException - if a fatal shutdown error occurs
    • destroyInternal

      protected void destroyInternal() throws LifecycleException
      Description copied from class: LifecycleBase
      Subclasses implement this method to perform any instance destruction required.
      Overrides:
      destroyInternal in class LifecycleMBeanBase
      Throws:
      LifecycleException - If the destruction fails
    • toString

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

      protected String getDomainInternal()
      Description copied from class: LifecycleMBeanBase
      Method implemented by subclasses to identify the domain in which MBeans should be registered.
      Specified by:
      getDomainInternal in class LifecycleMBeanBase
      Returns:
      The name of the domain to use to register MBeans.
    • getObjectNameKeyProperties

      protected String getObjectNameKeyProperties()
      Description copied from class: LifecycleMBeanBase
      Allow subclasses to specify the key properties component of the ObjectName that will be used to register this component.
      Specified by:
      getObjectNameKeyProperties in class LifecycleMBeanBase
      Returns:
      The string representation of the key properties component of the desired ObjectName