Dalam Spring Boot (Spring MVC), sesuatu request melalui servlet container, satu rantaian Filters, DispatcherServlet pusat, kemudian interceptors dan @Controller anda, dan nilai pulangan ditukar menjadi HTTP response.
Dalam Spring Boot (Spring MVC), sesuatu request melalui servlet container, satu rantaian Filters, DispatcherServlet pusat, kemudian interceptors dan @Controller anda, dan nilai pulangan ditukar menjadi HTTP response.
Servlet container (Tomcat)
▼
Filter chain ── (CharacterEncoding, Security, CORS, ...)
▼
DispatcherServlet ── front controller
▼
HandlerMapping ── cari method @Controller
▼
HandlerInterceptor.preHandle
▼
Argument resolvers ── bind @RequestBody / @PathVariable / @RequestParam
▼
Controller method ── logik anda → memulangkan object atau ResponseEntity
▼
HandlerInterceptor.postHandle
▼
HttpMessageConverter / ViewResolver ── serialize ke JSON atau render view
▼
HandlerInterceptor.afterCompletion → Response ──▶ client
Filter. Filters (termasuk Spring Security) ialah lapisan paling luar dan boleh menyekat atau membalut request sebelum MVC melihatnya.preHandle — HandlerInterceptor berjalan sebelum controller (semakan auth, logging, pengukuran masa); memulangkan false menghentikan request.@PathVariable, @RequestParam, dan @RequestBody (melalui HttpMessageConverter) di-bind dan divalidate.@RestController anda menjalankan logik perniagaan dan memulangkan satu object atau ResponseEntity.postHandle, kemudian nilai pulangan diserialize oleh satu HttpMessageConverter (JSON melalui Jackson) atau sesuatu view dirender oleh satu ViewResolver.afterCompletion berjalan selepas response di-commit; @ExceptionHandler/@ControllerAdvice mengendalikan exception sepanjang perjalanan.// 4/7/8. interceptor
public class TimingInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object h) {
req.setAttribute("started", System.nanoTime());
return true; // false = pintas awal
}
}
// 6. controller
@RestController
class ItemController {
@GetMapping("/items/{id}") // 3. mapping
ResponseEntity<Item> show(@PathVariable Long id) { // 5. argument resolution
return ResponseEntity.ok(service.find(id)); // 7. diserialize ke JSON
}
}
Kitaran hayat Spring mempunyai dua lapisan sambungan yang berbeza yang gemar disiasat oleh penemuduga: Filters (peringkat servlet, paling luar — tempat Spring Security berada) dan Interceptors (peringkat Spring MVC, mengelilingi controller). Mengetahui susunannya — filters, DispatcherServlet, mapping, interceptor preHandle, binding argument, controller, penukaran message, afterCompletion — memberitahu anda di mana hendak meletakkan pengesahan (authentication) berbanding logging, mengapa sesuatu Security filter menolak request sebelum mana-mana interceptor atau controller berjalan, dan bagaimana @ControllerAdvice memusatkan pengendalian exception merentas keseluruhan aliran.
Pustaka soalan temu duga IT dengan jawapan terperinci — daripada Junior hingga Senior.
Derma