Spring MVC 개념
MVC 패턴은?
: Model, View, Controller의 약자로, 어플리케이션을 세가지 역할로 구분한 개발 방법론
비즈니스 로직과 인터페이스를 분리시켜 서로 영향없이 개발하기 수월한 장점이 있다
- Model : 어플리케이션이 "무엇"을 할 것인지 정의. 내부 비즈니스 로직을 처리
- Controller : Model이 "어떻게"처리할 지를 알려주는 역할
- View : 처리한 것을 화면에 보여주는 역할
* 단점 : View와 Model이 서로 의존성을 띄어서 복잡하게 연결되면, 새 기능을 추가할 때 테스트가 어려워진다고 함.
Spring MVC 웹 요청 처리과정
Spring MVC 구성 요소
구성 요소 | 설 명 |
DispatcherServlet |
클라이언트의 요청을 전달 받아 Controller에게 전달하고 반환값을 View에게 전달해준다. (MVC프레임워크의 중심이 되는 서블릿 클래스 - 중앙에서 관리하는 역할 ) |
HandlerMapping |
클라이언트의 요청 URL을 어떤 Controller가 처리할지 결정. |
HandlerAdapter |
처리요청을 변환해서 Controller에게 전달하고 응답결과를 요구하는 형식으로 변환함. |
Controller |
요청을 처리한 뒤, 결과를 리턴함. View에서 보여줄 데이터를 모델에 담아 전달함. |
ModelAndView |
Controller가 처리한 결과 정보 및 View선택에 필요한 정보를 담음 |
ViewResolver |
Controller 처리 결과를 보여줄 View를 지정함. |
View |
Controller의 처리 결과 화면을 생성함. |
<web.xml> - 1. DispatcherServlet, 인코딩 필터 설정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="spring" version="3.0"> <display-name>spring</display-name> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/mvc-start.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> | cs |
//Line09 - 19 : DispatcherServlet등록
DispatcherServlet은 내부적으로 스프링 컨테이너를 생성함.
contextConfigLocation초기화 파라미터를 이용해서 컨테이너를 생성할 때 사용할 설정 파일 지정
* contextConfigLocation을 설정 안할 경우, /WEB-INF/[서블릿이름]-servlet.xml 파일을 default로 설정됨
//Line21 - 24 : DispatcherServlet에 대한 매핑을 *.do로 지정.
- 웹 브라우저 요청 중에서 확장자가 do로 끝나는 모든 요청을 DispatcherServlet이 처리하게됨.
//Line26 - 38 : 요청 파라미터를 UTF-8로 처리하기 위한 인코딩 필터 설정.
<mvc-start.xml> - 2. HandlerMapping, HandlerAdapter, ViewResolver 설정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <mvc:annotation-driven /> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/view/" /> <property name="suffix" value=".jsp" /> </bean> <bean class="com.isberry.spring.HelloController" /> </beans> | cs |
<spring/HelloController.java>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.spirngframework.web.bind.annotation.RequestMapping; @Controller public class HelloController { @RequestMapping(“/hello.do”) public String hello(Model model) { model.addAttribute(“greeting”,“안녕하세요”); return “hello”; } } | cs |
: 메소드가 처리할 요청 경로를 지정함.
@RequestMapping이 적용된 메소드는 클라이언트의 요청 결과를 보여줄 View이름을 리턴함.
//Line 12 : View이름으로 리턴 ("hello") -> hello라는 view이름을 찾은 뒤, 해당 view를 생성함.
View
: Controller에서 처리하고 리턴한 응답 결과를 생성해주는 기능 제공.
</WEB-INF/views/Hello.jsp>
1 2 3 4 5 6 7 8 9 10 | <%@ page contentType="text/html; charset=utf-8" %> <!DOCTYPE html> <html> <head> <title>Hello</title> </head> <body> 인사말: ${greeting} </body> </html> | cs |
'Backend FrameWork > Spring' 카테고리의 다른 글
[Spring Framework] Spring MVC : @RequestMapping 개념 (0) | 2018.12.28 |
---|---|
[Spring Framework] Spring MVC : Model과 ModelAndView 차이 (0) | 2018.12.28 |
[Spring Framework] Spring MVC : <mvc:default-servlet-handler/> 개념 (0) | 2018.12.28 |
[Spring Framework] Spring FrameWork 개념 (0) | 2018.12.24 |
[Spring Framework] AOP 개념 (0) | 2018.12.19 |