Middle
Dispatcher Servlet қандай әдісті шақыру керектігін қалай анықтайды?
sobes.tech AI
AI-дан жауап
DispatcherServlet сұрауларды сәйкестендіру механизмдерін (Request Mapping) пайдаланады, олар арқылы өңдеуші (Controller) және оның ішіндегі әдіс анықталады, ол кіріс HTTP сұрауын өңдеуі керек.
Негізгі қадамдар:
- Сұрауды алу: DispatcherServlet барлық кіріс HTTP сұрауларын ұстайды.
- HandlerMapping іздеу: DispatcherServlet тіркелген HandlerMapping объектілеріне жүгінеді (мысалы,
RequestMappingHandlerMapping). - URI және HTTP-әдісін сәйкестендіру: HandlerMapping URI мен сұраудың HTTP-әдісін (GET, POST және т.б.) талдайды және оларды контроллерлердегі
@RequestMapping(немесе@GetMapping,@PostMappingжәне т.б.) аннотацияларымен салыстырады. - HandlerExecutionChain анықтау: Тиісті контроллер мен әдіс табылған кезде, HandlerMapping HandlerExecutionChain қайтарады, ол өңдеушіні (Handler) және оның алдында және/немесе кейін орындалуы тиіс Interceptors тізімін қамтиды.
- HandlerExecutionChain беру: DispatcherServlet HandlerExecutionChain-ті тиісті HandlerAdapter-ға (мысалы,
RequestMappingHandlerAdapter) береді. - Handler-ді орындау: HandlerAdapter табылған контроллер әдісін шақырады.
Сәйкестендіру үшін қолданылатын аннотациялардың мысалдары:
@RequestMapping: Сұрауларды сәйкестендіру үшін негізгі аннотация.// Java @Controller @RequestMapping("/users") public class UserController { @RequestMapping(method = RequestMethod.GET) // GET /users-қа сәйкес келеді public String getAllUsers() { return "users"; } @RequestMapping(value = "/{id}", method = RequestMethod.GET) // GET /users/{id}-қа сәйкес келеді public String getUserById(@PathVariable Long id) { return "user"; } }@GetMapping,@PostMapping,@PutMapping,@DeleteMapping,@PatchMapping: нақты HTTP-әдістерімен сәйкестендіруге арналған қысқартылған аннотациялар.// Java @Controller @RequestMapping("/products") public class ProductController { @GetMapping // GET /products-қа сәйкес келеді public String getAllProducts() { return "products"; } @PostMapping // POST /products-қа сәйкес келеді public String createProduct() { return "product_created"; } }
DispatcherServlet рефлексия механизмін пайдалана отырып, нақты әдісті шақырады және сұрау параметрлерін (мысалы, URL, сұрау денесі, тақырыптар) әдіс аргументтеріне түрлендіреді.