Whenever URL request (including ReST and other non "web page" requests) comes in to a webapp server, the first thing the server does is pick the URL apart to see which web application deployed in the server will process the request. Spring Boot is not any different, since it has an embedded webapp server (such as
Tomcat) inside it.
Once the destination webapp is known, the server checks its list of servlet mappings (originally made in
/WEB-INF/web.xml and now often via annotations. If the resource path part of the URL matches a servlet mapping, then the request gets passed to that servlet. If it matches a
JSP, then the request gets passed to the JSP. And JSPs are internally compiled to produce servlets. If nothing else matches, the webapp server looks for a resource within its WAR that has a pathname match, and copies that resource to the response output. If nothing matches at all, then a "404 - Resource Not Found" web page is generated and returned.
The annotations for ReST and Spring Web are just convenient shortcuts. You still have to have a dispatcher servlet, because anything that has active logic in it has to have some sort of servlet to invoke that logic - even if the servlet was compiled out of a JSP. Indeed, since many MVC web models use a dispatcher servlet for the business logic and a JSP for a display template, you can effectively have one servlet feeding another servlet.