Middle+
Hogyan határozza meg a DispatcherServlet, melyik vezérlőmetódust hívja meg?
sobes.tech MI
Válasz az MI-től
A DispatcherServlet kéréskezelőket (Handler Mappings) használ annak meghatározására, hogy melyik vezérlőt és metódust kell alkalmazni a bejövő HTTP-kéréshez.
Fő lépések:
- Kérés fogadása: A DispatcherServlet megkapja az HTTP-kérést.
- HandlerMapping keresése: A DispatcherServlet iterál a konfigurált HandlerMapping-eken (például
RequestMappingHandlerMapping). - Kérés összevetése: Minden HandlerMapping megpróbálja összerendelni a kérést egy vezérlővel és metódussal, a kérés adatai (URL, HTTP-módszer, fejléc stb.) és a vezérlő metaadatai (például
@RequestMappingannotáció) alapján. - Kezelő meghatározása: Sikeres összerendelés esetén a HandlerMapping visszaad egy
HandlerExecutionChainobjektumot, amely tartalmazza a kezelőt (általában a vezérlő metódusát) és a interceptorokat. - Interceptorok végrehajtása: A DispatcherServlet végrehajtja az előfeldolgozást az interceptorokon keresztül (
HandlerInterceptor.preHandle()). - Vezérlő metódus hívása: Ha az interceptorok engedélyezik, a DispatcherServlet meghívja a megfelelő vezérlő metódust a
HandlerAdaptersegítségével (példáulRequestMappingHandlerAdapter). AHandlerAdapterfelelős a kérés argumentumainak átalakításáért a vezérlő metódus paramétereivé, és a metódus visszatérési értékének HTTP-válaszra való átalakításáért (példáulModelAndView,String, JSON stb.). - Utófeldolgozás és renderelés: A vezérlő metódus végrehajtása után a DispatcherServlet végrehajtja az utófeldolgozást az interceptorokon keresztül (
HandlerInterceptor.postHandle()), meghatározza a nézetet (ViewResolver) (ha szükséges), és rendereli a választ, majd aHandlerInterceptor.afterCompletion()-t hívja meg a válasz elküldése után.
Tipikus HandlerMapping-ek Spring MVC-ben:
RequestMappingHandlerMapping: az@RequestMapping,@GetMapping,@PostMappingstb. annotációkon alapul. Ez a leggyakrabban használt.SimpleUrlHandlerMapping: URL-útvonalakat közvetlenül a vezérlő vagy gyár nevéhez társítja.BeanNameUrlHandlerMapping: URL-útvonalakat a vezérlő bean nevéhez társít.
Példa az @RequestMapping használatára:
// Vezérlő példa
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/api/users") // Osztály szintű annotáció
public class UserController {
@GetMapping("/hello") // Metódus szintű annotáció
@ResponseBody // Megadja, hogy a visszatérési érték a válasz törzse lesz
public String sayHello() {
return "Hello from user controller!";
}
}
Ebben a példában, a /api/users/hello GET kérés esetén a RequestMappingHandlerMapping megtalálja a UserController-t és meghívja a sayHello() metódust.