in src/main/java/org/apache/sling/engine/impl/request/SlingRequestDispatcher.java [154:203]
private void dispatch(final ServletRequest request, final ServletResponse response,
final DispatchingInfo dispatchingInfo) throws ServletException, IOException {
SlingHttpServletRequest cRequest = RequestData.unwrap(request);
RequestData rd = RequestData.getRequestData(cRequest);
String absPath = getAbsolutePath(cRequest, path);
RequestProgressTracker requestProgressTracker = cRequest.getRequestProgressTracker();
// if the response is not an HttpServletResponse, fail gracefully not
// doing anything
if (!(response instanceof HttpServletResponse)) {
log.error("include: Failed to include {}, response has wrong type",
absPath);
return;
}
if (resource == null) {
String timerName = "resolveIncludedResource(" + absPath + ")";
requestProgressTracker.startTimer(timerName);
// resolve the absolute path in the resource resolver, using
// only those parts of the path as if it would be request path
resource = cRequest.getResourceResolver().resolve(absPath);
// if the resource could not be resolved, fail gracefully
if (resource == null) {
log.error(
"include: Could not resolve {} to a resource, not including",
absPath);
return;
}
requestProgressTracker.logTimer(timerName,
"path={0} resolves to Resource={1}",
absPath, resource);
}
// ensure request path info and optional merges
SlingRequestPathInfo info = getMergedRequestPathInfo(cRequest);
requestProgressTracker.log(
"Including resource {0} ({1})", resource, info);
if (dispatchingInfo.getType() == DispatcherType.INCLUDE) {
final boolean protectHeaders = this.options != null ?
Boolean.parseBoolean(this.options.getOrDefault(RequestDispatcherOptions.OPT_PROTECT_HEADERS_ON_INCLUDE, String.valueOf(this.protectHeadersOnInclude)))
: this.protectHeadersOnInclude;
dispatchingInfo.setProtectHeadersOnInclude(protectHeaders);
dispatchingInfo.setCheckContentTypeOnInclude(this.checkContentTypeOnInclude);
}
rd.getSlingRequestProcessor().dispatchRequest(request, response, resource, info, dispatchingInfo);
}