A Connector is a component responsible receiving requests from,
and returning responses to, a client application. A Connector performs
the following general logic:
Receive a request from the client application.
Create (or allocate from a pool) appropriate Request and Response
instances, and populate their properties based on the contents of
the received request, as described below.
For all Requests, the connector,
serverPort and stream
properties MUST be set. The contentLength
and contentType properties are also generally set.
For HttpRequests, the method, queryString,
requestURI, and secure properties
MUST be set. In addition, the various addXxx
methods must be called to record the presence of cookies, headers,
and locales in the original request.
For all Responses, the connector, request,
and stream properties MUST be set.
No additional headers must be set by the Connector for
Identify an appropriate Container to use for processing this request.
For a stand alone Catalina installation, this will probably be a
(singleton) Engine implementation. For a Connector attaching Catalina
to a web server such as Apache, this step could take advantage of
parsing already performed within the web server to identify the
Context, and perhaps even the Wrapper, to utilize in satisfying this
Call the invoke() method of the selected Container,
passing the initialized Request and Response instances as arguments.
Return any response created by the Container to the client, or
return an appropriate error message if an exception of any type
If utilizing a pool of Request and Response objects, recycle the pair
of instances that was just used.
It is expected that the implementation details of various Connectors will
vary widely, so the logic above should considered typical rather than