코딩항해기

[Spring] springframework.Controller interface 구조 본문

Spring

[Spring] springframework.Controller interface 구조

miniBcake 2024. 10. 7. 17:46

 

 

org.springframework.web.servlet.mvc.Controller 구조분석

 

JSP 기반 프로젝트에서 oooAction으로 사용자의 요청을 처리했던 것처럼 Spring에서도 oooController가 사용자의 요청을 처리한다. oooController는 스프링 프레임워크에서 제공하는 Controller를 구현한다.

 

Controller를 구현하는 이유는 메서드 시그니처, 즉 선언부를 통일해 HandlerMapping을 사용할 수 있도록 하기 때문이다. 다 각기 다른 메서드 시그니처를 사용하면 한 번에 사용할 수도 없고, 다른 객체이기 때문에 업캐스팅 할 수도 없다.

 

//메서드 오버라이딩 강제 == 메서드 시그니처 (선언부) 강제
public interface Controller {
	//ActionForward execute(HttpServletRequest request, HttpServletResponse response);
    //JSP Action 때와 반환타입과 메서드 명만 달라졌을 뿐 비슷한 기능
    ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response);
}

 

선언부를 강제할 수 있도록 추상 메서드가 하나 정의되어 있으며 이를 구현하는 oooController들은 모두 동일한 메서드를 갖게된다. 이 때 반환하는 ModelAndView는 model의 기능과 view의 기능을 할 수 있다. 페이지 이동할 값을 넣어줄 수도 있다. (request, response는 POJO라고 볼 수는 없어 무거운 편이다.)

 

ModelAndView (컴포넌트 방식)

Model과 View를 합쳐놓은 방식으로 값을 넣을 때는 addObject()를 사용하고, 값을 보낼 View를 세팅할 때는 setViewName()을 사용한다.

ModelAndView mav = new ModelAndView();
mav.setViewName("main.do");//요청
mav.serViewName("login");//이동할 페이지 이름(jsp생략)
mav.addObject("mid", mid); //세션 대체 가능