Spring Framework supports many parameter types for controllers.
The main difference between @RequestParam and @PathVariable is a purpose of each annotation.
@RequestParam is used to bind web request parameters to controller method parameter.
The main difference between @RequestMapping and @GetMapping is that the first one can be used to map any HTTP method requests and the second one can be used to map only HTTP GET method requests. @GetMapping is less flexible but easier to use
Incoming request is mapped to a controller and a method by DispatcherServlet, which uses HandlerMapping and HandlerAdapter components for this purpose.
@Controller annotation is used to indicate that annotated class is a Controller from Model-View-Controller Design Pattern, and should be considered a candidate for request handling when DispatcherServlet searches for component to which work can be delegated.
Web Application Context is a Spring Application Context for Web Applications that runs under Embedded or Standalone Application Server that supports Servlet API and acts as Servlet Container.
DispatcherServlet is an internal Spring MVC component that implements HttpServlet from Java Servlet API and Front Controller Design Pattern. It is used to handle all requests to the application, based on servlet mapping, delegate those requests to controllers and produce response based on identified view.