in src/main/java/org/apache/sling/engine/impl/request/RequestData.java [537:586]
public static void service(SlingJakartaHttpServletRequest request, SlingJakartaHttpServletResponse response)
throws IOException, ServletException {
if (!isValidRequest(
request.getRequestPathInfo().getResourcePath(),
request.getRequestPathInfo().getSelectors())) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Malformed request syntax");
return;
}
RequestData requestData = RequestData.getRequestData(request);
Servlet servlet = requestData.getContentData().getServlet();
if (servlet == null) {
log.warn(
"Did not find a servlet to handle the request (path={},selectors={},extension={},suffix={})",
request.getRequestPathInfo().getResourcePath(),
Arrays.toString(request.getRequestPathInfo().getSelectors()),
request.getRequestPathInfo().getExtension(),
request.getRequestPathInfo().getSuffix());
response.sendError(HttpServletResponse.SC_NOT_FOUND, "No Servlet to handle request");
} else {
String name = RequestUtil.getServletName(servlet);
// verify the number of service calls in this request
if (requestData.hasServletMaxCallCount(request)) {
throw new TooManyCallsException(name);
}
// replace the current servlet name in the request
Object oldValue = request.getAttribute(SLING_CURRENT_SERVLET_NAME);
request.setAttribute(SLING_CURRENT_SERVLET_NAME, name);
// setup the tracker for this service call
String timerName = name + "#" + requestData.servletCallCounter;
requestData.servletCallCounter++;
requestData.getRequestProgressTracker().startTimer(timerName);
String prevServletName = requestData.setActiveServletName(name);
try {
servlet.service(request, response);
} finally {
requestData.setActiveServletName(prevServletName);
request.setAttribute(SLING_CURRENT_SERVLET_NAME, oldValue);
requestData.getRequestProgressTracker().logTimer(timerName);
}
}
}