Spring Boot (Spring MVC) میں، ایک request servlet container، Filters کی ایک زنجیر، مرکزی DispatcherServlet، پھر interceptors اور آپ کے @Controller سے گزرتی ہے، اور return ہونے والی value کو HTTP response میں تبدیل کیا جاتا ہے۔
Spring Boot (Spring MVC) میں، ایک request servlet container، Filters کی ایک زنجیر، مرکزی DispatcherServlet، پھر interceptors اور آپ کے @Controller سے گزرتی ہے، اور return ہونے والی value کو HTTP response میں تبدیل کیا جاتا ہے۔
Servlet container (Tomcat)
▼
Filter chain ── (CharacterEncoding, Security, CORS, ...)
▼
DispatcherServlet ── front controller
▼
HandlerMapping ── @Controller method تلاش کریں
▼
HandlerInterceptor.preHandle
▼
Argument resolvers ── @RequestBody / @PathVariable / @RequestParam کو bind کریں
▼
Controller method ── آپ کی logic → object یا ResponseEntity لوٹاتا ہے
▼
HandlerInterceptor.postHandle
▼
HttpMessageConverter / ViewResolver ── JSON میں serialize یا view render کریں
▼
HandlerInterceptor.afterCompletion → Response ──▶ client
Filter زنجیر کے حوالے کرتا ہے۔ Filters (Spring Security سمیت) سب سے باہری تہہ ہیں اور MVC کے دیکھنے سے پہلے request کو block یا لپیٹ سکتے ہیں۔preHandle — HandlerInterceptor controller سے پہلے چلتے ہیں (auth چیکس، logging، timing)؛ false لوٹانا request کو روک دیتا ہے۔@PathVariable، @RequestParam، اور @RequestBody (HttpMessageConverter کے ذریعے) bind اور validate کیے جاتے ہیں۔@RestController method business logic چلاتا ہے اور ایک object یا ResponseEntity لوٹاتا ہے۔postHandle، پھر return ہونے والی value کو ایک HttpMessageConverter (Jackson کے ذریعے JSON) serialize کرتا ہے یا ایک view کو ایک ViewResolver render کرتا ہے۔afterCompletion response commit ہونے کے بعد چلتا ہے؛ @ExceptionHandler/@ControllerAdvice راستے میں استثناءات کو ہینڈل کرتے ہیں۔// 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 = فوری روک
}
}
// 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. JSON میں serialize کیا جاتا ہے
}
}
Spring کے lifecycle میں دو الگ توسیعی تہیں ہیں جنہیں انٹرویو لینے والے کھنگالنا پسند کرتے ہیں: Filters (servlet-سطح، سب سے باہری — جہاں Spring Security رہتا ہے) اور Interceptors (Spring MVC-سطح، controller کے گرد)۔ ترتیب کو جاننا — filters، DispatcherServlet، mapping، interceptor preHandle، argument binding، controller، message conversion، afterCompletion — آپ کو بتاتا ہے کہ authentication بمقابلہ logging کہاں رکھیں، کوئی Security filter کسی بھی interceptor یا controller کے چلنے سے پہلے ایک request کو کیوں مسترد کرتا ہے، اور @ControllerAdvice پورے flow میں exception handling کو کیسے مرکزی بناتا ہے۔
تفصیلی جوابات کے ساتھ IT انٹرویو سوالات کی ایک لائبریری — جونیئر سے سینئر تک۔
عطیہ دیں