in src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java [162:199]
public Servlet resolveServlet(final SlingHttpServletRequest request) {
final Resource resource = request.getResource();
// start tracking servlet resolution
final RequestProgressTracker progressTracker = request.getRequestProgressTracker();
final String timerName = "resolveServlet(" + resource.getPath() + ")";
progressTracker.startTimer(timerName);
final String resourceType = resource.getResourceType();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("resolveServlet called for resource {}", resource);
}
final ResourceResolver scriptResolver = this.getScriptResourceResolver();
Servlet servlet = null;
if ( resourceType.length() > 0 ) {
servlet = resolveServletInternal(request, null, resourceType, scriptResolver);
}
// last resort, use the core bundle default servlet
if (servlet == null) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("No specific servlet found, trying default");
}
servlet = getDefaultServlet();
}
// track servlet resolution termination
progressTracker.logTimer(timerName, "Using servlet {0}", RequestUtil.getServletName(servlet));
// log the servlet found
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Servlet {} found for resource={}", RequestUtil.getServletName(servlet), resource);
}
return servlet;
}