Cotroller에 jsp 경로(문자열)를 리턴하는 GetMapping 추가
@GetMapping("/sample")
public String sample() {
return "WEB-INF/sample.jsp";
}
sample.jsp 추가
<%--
Created by IntelliJ IDEA.
User: junwoochoi
Date: 2020/01/18
Time: 4:11 오후
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>Hello Spring MVC!</h2>
</body>
</html>
handlerMapping은 RequestMappingHandlerMapping을 사용한다.
이전과의 차이는 modelandview가 null이 아니라는 것이다. (@ResponseBody를 리턴하는 경우는 ModelAndView가 null이다.)
또 다른 전략 사용
ModelAndView를 리턴하는 새로운 Controller 생성
@org.springframework.stereotype.Controller("/simple")
public class SimpleController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
return new ModelAndView("/WEB-INF/simple.jsp");
}
}
해당 전략은 BeanNameUrlHandlerMapping을 사용한다.
또한 SimpleControllerHandlerAdapter를 사용한다. - Contoller interface를 구현해서 만든 핸들러를 처리할 수 있는
HandlerAdapter이다.
여기서 ViewResolver는 return 받은 view 이름을 실제 부로 변환한다.
DispatcherServlet 동작 순서
-
요청을 분석한다. (로케일, 테마, 멀티파트 등)
-
(핸들러 맵핑에게 위임하여) 요청을 처리할 핸들러를 찾는다. - DispatcherServlet은 기본적으로 구개의 핸들러를 제공한다.
-
(등록되어 있는 핸들러 어댑터 중에) 해당 핸들러를 실행할 수 있는 “핸들러 어댑터”를 찾는다.
-
찾아낸 “핸들러 어댑터”를 사용해서 핸들러의 응답을 처리한다.
-
핸들러의 리턴 값을 보고 어떻게 처리할지 판단한다.
-
뷰 이름에 해당하는 뷰를 찾아서 모델 데이터를 랜더링 한다.
-
@ResponseEntity가 있다면 Converter를 사용해서 응답 본문을 만들고.
-
(부가적으로) 예외가 발생했다면, 예외 처리 핸들러에 요청 처리를 위임한다.
-
최종적으로 응답을 보낸다.
'Spring > Spring MVC' 카테고리의 다른 글
(SERVLET) Spring MVC 구성요소 (0) | 2020.01.18 |
---|---|
(SERVLET) DispatcherServlet(3) - ViewResolver (0) | 2020.01.18 |
(SERVLET) DispatcherServlet의 내부 살펴보기 (0) | 2020.01.17 |
(SERVLET) 스프링 MVC 연동 (0) | 2020.01.12 |
(SERVLET) 스프링 IoC 컨테이너 연동 (0) | 2020.01.11 |