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
,protocol
,remoteAddr
,response
,scheme
,secure
,serverName
,serverPort
andstream
properties MUST be set. ThecontentLength
andcontentType
properties are also generally set. - For HttpRequests, the
method
,queryString
,requestedSessionCookie
,requestedSessionId
,requestedSessionURL
,requestURI
, andsecure
properties MUST be set. In addition, the variousaddXxx
methods must be called to record the presence of cookies, headers, and locales in the original request. - For all Responses, the
connector
,request
, andstream
properties MUST be set. - No additional headers must be set by the Connector for HttpResponses.
- For all Requests, the
- 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 Request.
- 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 was thrown.
- If utilizing a pool of Request and Response objects, recycle the pair of instances that was just used.