Sobes.tech
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:

  1. Kérés fogadása: A DispatcherServlet megkapja az HTTP-kérést.
  2. HandlerMapping keresése: A DispatcherServlet iterál a konfigurált HandlerMapping-eken (például RequestMappingHandlerMapping).
  3. 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 @RequestMapping annotáció) alapján.
  4. Kezelő meghatározása: Sikeres összerendelés esetén a HandlerMapping visszaad egy HandlerExecutionChain objektumot, amely tartalmazza a kezelőt (általában a vezérlő metódusát) és a interceptorokat.
  5. Interceptorok végrehajtása: A DispatcherServlet végrehajtja az előfeldolgozást az interceptorokon keresztül (HandlerInterceptor.preHandle()).
  6. Vezérlő metódus hívása: Ha az interceptorok engedélyezik, a DispatcherServlet meghívja a megfelelő vezérlő metódust a HandlerAdapter segítségével (például RequestMappingHandlerAdapter). A HandlerAdapter felelő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ául ModelAndView, String, JSON stb.).
  7. 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 a HandlerInterceptor.afterCompletion()-t hívja meg a válasz elküldése után.

Tipikus HandlerMapping-ek Spring MVC-ben:

  • RequestMappingHandlerMapping: az @RequestMapping, @GetMapping, @PostMapping stb. 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.

Hogyan határozza meg a DispatcherServlet, melyik… - sobes.tech