管道链
// 执行管道链条 connector.getService().getContainer().getPipeline().getFirst().invoke(request, response);
class org.apache.catalina.core.StandardEngineValve{
public final void invoke(org.apache.catalina.connector.Request request, Response response)
throws IOException, ServletException {
Host host = request.getHost();
//org.apache.catalina.core.StandardHostValve.invoke(..)
host.getPipeline().getFirst().invoke(request, response);
}
}
class org.apache.catalina.core.StandardHostValve{
public final void invoke(Request request, Response response)
throws IOException, ServletException {
Context context = request.getContext();
// org.apache.catalina.core.StandardContextValve.invoke(..)
context.getPipeline().getFirst().invoke(request, response); //!!!!
}
}
class org.apache.catalina.core.StandardContextValve{
public final void invoke(Request request, Response response)
throws IOException, ServletException {
// Disallow any direct access to resources under WEB-INF or META-INF
MessageBytes requestPathMB = request.getRequestPathMB();
if ((requestPathMB.startsWithIgnoreCase("/META-INF/", 0))
|| (requestPathMB.equalsIgnoreCase("/META-INF"))
|| (requestPathMB.startsWithIgnoreCase("/WEB-INF/", 0))
|| (requestPathMB.equalsIgnoreCase("/WEB-INF"))) { // 访问被进制的目录
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
Wrapper wrapper = request.getWrapper(); // Servlet对象
response.sendAcknowledgement();
// 执行Servlet请求 !!!!
wrapper.getPipeline().getFirst().invoke(request, response);
}
}