Trong Spring Boot (Spring MVC), một request đi qua servlet container, một chuỗi Filter, DispatcherServlet trung tâm, rồi các interceptor và @Controller của bạn, và giá trị trả về được chuyển thành HTTP response.
Trong Spring Boot (Spring MVC), một request đi qua servlet container, một chuỗi Filter, DispatcherServlet trung tâm, rồi các interceptor và @Controller của bạn, và giá trị trả về được chuyển thành HTTP response.
Servlet container (Tomcat)
▼
Filter chain ── (CharacterEncoding, Security, CORS, ...)
▼
DispatcherServlet ── front controller
▼
HandlerMapping ── tìm method @Controller
▼
HandlerInterceptor.preHandle
▼
Argument resolvers ── bind @RequestBody / @PathVariable / @RequestParam
▼
Controller method ── logic của bạn → trả object hoặc ResponseEntity
▼
HandlerInterceptor.postHandle
▼
HttpMessageConverter / ViewResolver ── serialize JSON hoặc render view
▼
HandlerInterceptor.afterCompletion → Response ──▶ client
Filter. Các Filter (gồm cả Spring Security) là lớp ngoài cùng và có thể chặn hoặc bao request trước khi MVC nhìn thấy.preHandle — các HandlerInterceptor chạy trước controller (kiểm tra auth, logging, đo thời gian); trả false sẽ dừng request.@PathVariable, @RequestParam, và @RequestBody (qua HttpMessageConverter) được bind và validate.@RestController của bạn chạy logic nghiệp vụ và trả một object hoặc ResponseEntity.postHandle, rồi giá trị trả về được serialize bởi một HttpMessageConverter (JSON qua Jackson) hoặc một view được render bởi ViewResolver.afterCompletion chạy sau khi response đã commit; @ExceptionHandler/@ControllerAdvice xử lý ngoại lệ dọc đường.// 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 = chặn sớm
}
}
// 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. serialize sang JSON
}
}
Vòng đời của Spring có hai lớp mở rộng riêng biệt mà người phỏng vấn rất hay hỏi: Filter (mức servlet, ngoài cùng — nơi Spring Security hoạt động) và Interceptor (mức Spring MVC, bao quanh controller). Biết thứ tự — filters, DispatcherServlet, mapping, interceptor preHandle, bind tham số, controller, chuyển đổi message, afterCompletion — cho bạn biết đặt xác thực ở đâu so với logging, vì sao một Security filter từ chối request trước cả interceptor hay controller, và cách @ControllerAdvice tập trung hóa xử lý ngoại lệ trên toàn luồng.
Thư viện câu hỏi phỏng vấn IT với đáp án chi tiết — từ Junior đến Senior.
Ủng hộ