비즈니스 로직과 디자인 요소를 분리한 Spring 웹 모듈
Model, View, Controller 로 분리한 디자인 패턴
Controller 에 해당 하는 자바 로직은 딱 3가지만 있음 p4
1. 사용자 입력 정보 추출
2. DB 연동 처리
3. 화면 내비게이션
❗ 해당 Controller 를 분리시키면 MVC 모델 뷰 아키텍처다 ❗
Model
View
DispatcherServlet
) 비즈니스 로직을 구현하는 Controller
DispatcherServlet
이 *.do
요청을 받는다DispatcherServlet
을 front Controller
라고도 함DispatcherSrvelt
으로 관리Servlet
으로 만드나? *.do
를 사용하기 위해HandlerMapping
이 HasMap
을 검색하여,Controller
하나를 DispatcherServlet
에게 return
이제 DispatcherServlet
은 정확한 Controller
를 실행한다.
a. 컨트롤러는 DAO
를 이용하여 해당 객체를 request
에 저장하여 받아온다
String
을 통해 받아온 DispatcherServlet
은 String
에 저장된 해당 JSP 를 찾는다.request
를 String
형식으로 찾아온다.View
형태는 JSP
로 출력된다/XXX.do
로 응답 한다protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 사용자 요청 path 정보를 추출한다.
String uri = request.getRequestURI();
String path = uri.substring(uri.lastIndexOf("/"));
System.out.println("요청 path : " + "/getBoardList.do");
// 2. HandlerMapping 을 통해 요청 path에 해당하는 Controller 객체를 검색한다.
HandlerMapping handlermapping = new HandlerMapping();
Controller ctrl = new GetBoardListController(); // path 는 /getBoardList.do
// 3. 검색된 Controller 객체를 실행한다.
String viewName = "getBoardList.jsp";
// 4. Controller 가 리턴한 화면으로 이동한다.(포워드 방식)
RequestDispatcher dispatcher = request.getRequestDispatcher("getBoardList.jsp"); // viewName 은 getBoardList.jsp
dispatcher.forward(request, response);
}
path
정보 추출XXX.do
handlermapping
을 생성 및 호출hashmap
객체를 생성하는데, key-vlaue
로 제네릭 적용DispatcherServlet
에서path
에 해당하는 Controller 하나를 검색해달라고 요청/getBoardList.do
가 getController 로 넘어감getController()
에서 key 값으로 get()
하여 데이터를 끄집어낸다/getBoardList.do
가 호출했던 DispatcherServlet 의 new GetBoardListController()
로 리턴됨viewName
에 getBoardList.jsp
가 담기고 foward 방식으로 화면 이동Servlet Container
는 DispatcherServlet
만 생성하고, 나머지는 생성하지 않음XXX.xml
에 등록된 '서블릿' '필터' '리스너' ⇒ 3가지만 생성하고 관리해줌Spring Container
는 Servlet Container
가 생성해주지 않는 것을 생성해줌HandlerMapping
, Controller
, ViewResolver
new XmlWebApplicationContext()
을 이용하여 Spring Container
를 생성한 후, 위 3가지 객체들을 <bean>
등록하여 연결해준다xml
파일로 서블릿 객체를 띄우고DispatcherServlet
으로 Spring Container
객체와 연결하여HandlerMapping
, Controller
, ViewResolver
)을 메모리에 띄워준다👉 DispatcherServlet
은 창구 역할
👉 Spring Container
는 DispatcherServlet
이 생성
👉 개발자는 DispatcherServlet
을 web.xml
에 등록만 해주면 됨
MVC Framework
)에서는 String
으로 디스패처서블릿에 반환했지만Spring MVC Framwork
에서는 ModelAndView
로 디스패처서블릿에 반환한다ModelAndView
를 적용하는 코드ModelAndView mav = new ModelAndView();
mav.addObject("boardList", boardList); // Model 정보
mav.setViewName("/WEB-INF/board/getBoardList.jsp"); // View 정보
return mav;
<!-- ViewResolver 등록 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/board/"/>
<property name="suffix" value=".jsp"/>
</bean>
.do
로 끝날 때 → forward:
, redirect:
를 붙인다@Annotation
설정@Controller
@Controller 클래스{}
@RequestMapping
@RequestMapping(value="/XXX.do") 메서드{}
@RequestParam
메서드(@RequestParam(value="") String yeppi) {}
@Controller
클래스Service Interface
, ServiceImpl
, DAO
, VO
)가 배치되고 운용되는 레이어@Service
인터페이스@Repository
DAO Interface, DAO Impl 클래스