본문 바로가기
Spring Boot/스프링 부트로 배우는 자바 웹 개발

스프링 MVC

by 코리늬 2018. 7. 27.

스프링 MVC는 Front Controller 패턴에 Spring의 의존성 주입(DI)을 이용해 컴포넌트들의 생명주기를 관리할 수 있는 컨트롤러 중심의 웹 MVC 프레임워크다.


3.3.1 스프링 MVC 구조


- 처리요청

1. 클라이언트의 요청이 DispatcherServlet에 전달된다.

2. DispatcherServlet은 HandlerMapping을 사용해 클라이언트의 요청을 처리할 Controller객체를 찾는다.

3. DispatcherServlet은 컨트롤 객체의 handleRequest() 메소드를 호출해, 클라이언트의 요청을 처리한다.

4. Controller.handleRequest() 메소드는 처리 결과 정보를 담은 Model & View 객체를 리턴한다.

5. DispatcherServlet은 ViewResolver로부터 처리결과를 보여줄 View를 구한다.

6. View는 클라이언트에 전송할 응답을 생성한다.


- 구성요소

1. DispatcherServlet : 클라이언트의 요청을 전달받아 요청에 맞는 컨트롤러가 리턴한 결과값을 View에 전달해 알맞은 응답을 생성.

2. HandlerMapping : 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정.

3. Controller : 클라이언트의 요청을 처리한 뒤, 결과를 DispatcherServlet에 리턴.

4. Model & View : 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담음.

5. ViewResolver : 컨트롤러의 처리 결과를 생성 할 뷰를 결정.

6. View : 컨트롤러의 처리 결과 화면을 생성 (ex. JSP Page)


3.3.2 스프링 MVC 설정

스프링 MVC를 사용하기 위해 필요한 의존성은 스프링 코어와 스프링 MVC다.

스프링 콘텍스트가 스프링 코어에 대한 의존성을 가지고 있어서 둘 중 어느것을 사용해도된다.


3.3.2.1 스프링 MVC 프로젝트 설정

서블릿 + 의존성 설정


3.3.3 DispatcherServlet 설정

DispatcherServlet 설정방법에도 두가지가 있다.

1. web.xml에 서블릿 태그를 추가하는 방법

2. 서블릿 3.0 이상이면 javaConfig 방식으로 등록하는 방법


3.3.3.1 web.xml

web.xml 파일은 web-app 루트 태그를 가지고 있고, 루트 태그 하위에 리스너, 서블릿 같은 컴포넌트들의 정보를 표기할 수 있다.

서블릿 태그에는 Dispatcher 클래스의 전체 경로를 등록하고, 서블릿 매핑 태그 하위의 서블릿 네임 태그값은 servlet 태그 하위의 servlet-name 태그값과 동일하게 한다. url-pattern 태그에서는 모든 요청에 대해서 응답받을 수 있도록 루트 태그를 정의한다.


3.3.3.2 dispatcher-servlet.xml

dispatcher-servlet.xml 파일은 인터셉터, 컨트롤러와 같은 웹 패키지에 해당하는 클래스들의 설정을 지정할 수 있는 파일이다.

컨트롤러에서 데이터를 받은 후에 리턴할 때 뷰 이름을 지정해서 리턴할 수 있는데, 이 때 뷰 이름은 view resolver가 처리한다.

prefix 는 뷰 역할을 하는 html 또는 jsp 파일의 경로이고, suffix 는 뷰 이름과 매칭되는 확장자 이름이다.


3.3.4 컨트롤러와 뷰

RequestMapping을 /(루트)로 지정해 실행하면 IndexController에 home 메소드가 호출된다.

h0me 메소드 리턴 타입은 ModelAndView인데 데이터에 해당하는 모델과 View를 지정할 수 있다. 

${today}

이제 title과 today데이터를 받을 jsp 페이지를 작성해 실행하면 끝이다.

'Spring Boot > 스프링 부트로 배우는 자바 웹 개발' 카테고리의 다른 글

1) SpringBoot & Gradle 프로젝트 생성하기 "HelloWorld"  (0) 2018.10.30
스프링 XML 설정  (0) 2018.07.25
세션  (0) 2018.07.12
필터와 쿠키  (0) 2018.07.12
서블릿 활용  (0) 2018.07.11

댓글