I Spring Boot (Spring MVC) passerer en request gjennom servlet-containeren, en kjede av Filters, den sentrale DispatcherServlet, deretter interceptors og din @Controller, og returverdien konverteres til HTTP-responsen.
I Spring Boot (Spring MVC) passerer en request gjennom servlet-containeren, en kjede av Filters, den sentrale DispatcherServlet, deretter interceptors og din @Controller, og returverdien konverteres til HTTP-responsen.
Servlet-container (Tomcat)
▼
Filter chain ── (CharacterEncoding, Security, CORS, ...)
▼
DispatcherServlet ── front controlleren
▼
HandlerMapping ── finn @Controller-metoden
▼
HandlerInterceptor.preHandle
▼
Argument resolvers ── bind @RequestBody / @PathVariable / @RequestParam
▼
Controller-metode ── logikken din → returnerer objekt eller ResponseEntity
▼
HandlerInterceptor.postHandle
▼
HttpMessageConverter / ViewResolver ── serialiser til JSON eller rendr view
▼
HandlerInterceptor.afterCompletion → Response ──▶ klient
Filter-kjeden. Filters (inkludert Spring Security) er det ytterste laget og kan blokkere eller pakke inn requesten før MVC ser den.preHandle — HandlerInterceptor-er kjører før controlleren (auth-sjekker, logging, tidtaking); å returnere false stopper requesten.@PathVariable, @RequestParam og @RequestBody (via HttpMessageConverter) blir bundet og validert.@RestController-metode kjører forretningslogikken og returnerer et objekt eller ResponseEntity.postHandle, deretter serialiseres returverdien av en HttpMessageConverter (JSON via Jackson) eller et view rendres av en ViewResolver.afterCompletion kjører etter at responsen er committet; @ExceptionHandler/@ControllerAdvice håndterer exceptions underveis.// 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 = kortslutt
}
}
// 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. serialisert til JSON
}
}
Springs livssyklus har to distinkte utvidelseslag som intervjuere elsker å grave i: Filters (servlet-nivå, ytterst — der Spring Security bor) og Interceptors (Spring MVC-nivå, rundt controlleren). Å kjenne rekkefølgen — filters, DispatcherServlet, mapping, interceptor preHandle, argument-binding, controller, message-konvertering, afterCompletion — forteller deg hvor du skal plassere autentisering kontra logging, hvorfor et Security-filter avviser en request før noen interceptor eller controller kjører, og hvordan @ControllerAdvice sentraliserer exception-håndtering på tvers av hele flyten.
Et bibliotek av IT-intervjuspørsmål med detaljerte svar — fra Junior til Senior.
Doner