Tomcat8.x Request、Response创建的地方
// Request/Response创建的地方
// org.apache.coyote.Request
// org.apache.coyote.Response
// org.apache.catalina.connector.Request
// org.apache.catalina.connector.Response
// org.apache.catalina.connector.RequestFacade
// org.apache.catalina.connector.ResponseFacade
// -----------1-- org.apache.coyote.Request
class org.apache.coyote.http11.Http11Processor{
// 构造函数
public Http11Processor(int maxHttpHeaderSize, AbstractEndpoint<?> endpoint,int maxTrailerSize,
Set<String> allowedTrailerHeaders, int maxExtensionSize, int maxSwallowSize,
Map<String,UpgradeProtocol> httpUpgradeProtocols) {
org.apache.coyote.Request request = new org.apache.coyote.Request(); //创建对象
org.apache.coyote.Response response = new org.apache.coyote.Response();
}
}
// -----------2-- org.apache.catalina.connector.Request
class org.apache.catalina.connector.CoyoteAdapter{
// ...
public void service(org.apache.coyote.Request req,
org.apache.coyote.Response res)
throws Exception {
org.apache.catalina.connector.Request request = (Request) req.getNote(ADAPTER_NOTES);
org.apache.catalina.connector.Response response = (Response) res.getNote(ADAPTER_NOTES);
if (request == null) {
// org.apache.catalina.connector.Connector.createRequest();
request = connector.createRequest(); //!!!!! 创建对象
request.setCoyoteRequest(req);
response = connector.createResponse();
response.setCoyoteResponse(res);
// Link objects 相互关联
request.setResponse(response);
response.setRequest(request);
// Set as notes 设置req中
req.setNote(ADAPTER_NOTES, request);
res.setNote(ADAPTER_NOTES, response);
}
}
}
// -----------3.1-- org.apache.catalina.connector.RequestFacade
class org.apache.catalina.connector.Request{
// ...
public HttpServletRequest getRequest() {
if (facade == null) {
facade = new RequestFacade(this);//!!!!创建对象
}
if (applicationRequest == null) {
applicationRequest = facade;//!!!
}
return applicationRequest;
}
}
// -----------3.2-- org.apache.catalina.connector.ResponseFacade
class org.apache.catalina.connector.Response{
// ...
public HttpServletResponse getResponse() {
if (facade == null) {
facade = new ResponseFacade(this);//!!!创建对象
}
if (applicationResponse == null) {
applicationResponse = facade;//!!!
}
return applicationResponse;
}
}