이전에는 http 요청에 대한 공부를 했으니 이번에는 HTTP응답에 대해 공부한다.
HTTP 응답 - 정적리소스,뷰 템플릿
정적리소스
스프링부트는
클래스 패스인 src/main/resources 아래에
/static, /public,/resources, /META-INF/resources 라는 디렉토리에 있는 정적 리소스를 제공한다.
웹 브라우저에서 실행시 클래스패스는 빼고 그 이후 경로와 파일명을 이용해서 호출할 수 있다.
http://localhost:8080/basic/hello-form.html 이런식
뷰 템플릿
뷰 템플릿을 거쳐서 HTML이 생성되고, 뷰가 응답을 만들어서 전달한다.
일반적으로 HTML을 동적으로 생성하는 용도로 사용하지만, 다른 것들도 가능하다.
뷰 템플릿이 만들 수 있는 것이라면 뭐든지 가능하다.
스프링 부트는 기본 뷰 템플릿 경로를 제공한다.
뷰 템플릿 생성
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p th:text="${data}">empty</p>
</body>
</html>
<p th:text="${data}">empty</p> -> 모델에서 data라는 값을 꺼내와 empty를 치환해준다.
뷰 템플릿을 호출하는 컨트롤러 V1 - ModelAndView
ModelAndView를 만들고 값을 세팅해서 반환한다.
@Controller
public class ResponseViewController {
@RequestMapping("/response-view-v1")
public ModelAndView responseViewV1() {
ModelAndView mav = new ModelAndView("response/hello").addObject("data", "hello!");
//ModelAndView 객체에 뷰 경로및 이름과 , 데이터를 넣어준다 (데이터는 속성이름,속성값이 한세트)
return mav;
}
}
ModelAndView를 반환해주면 DispatcherHandler는 뷰를 생성할수있는 ViewResolver를 찾고, ViewResolver를 통해 뷰객체가 생성되고 해당 뷰에서 화면이 생성되서(렌더링) 응답으로 나간다.
V2 - Model + @Controller
Model을 메소드의 매개변수로 세팅해서, Spring으로 전달받고
받은 Model객체에 값을 담고
@Controller 어노테이션의 컨트롤러는 String의 반환값을 뷰이름(논리 뷰이름)으로 생각하므로
해당 뷰이름을 가지고 ViewResolver를 찾고 , ViewResolver가 뷰를 생성하면 해당 뷰에서 렌더링해서 화면을 응답한다.
@RequestMapping("/response-view-v2")
public String responseViewV2(Model model) {
model.addAttribute("data", "hello!");
return "/response/hello";
}
return으로 뷰이름을 주었지만 , 만약 @RestContoller의 컨트롤러이거나,
메소드에 @ResponseBody어노테이션이 붙어있다면 뷰이름 그 자체가 응답메시지바디에 문자열로 들어가게된다.
V3 - void를 반환 ( 권장하지않는 방법, 참고용)
@RequestMapping("/response/hello") // url패턴을 템플릿이 있는 위치로 맞춰줘야한다.
public void responseViewV3(Model model) {
model.addAttribute("data", "hello!");
}
타임리프 스프링부트 설정
맨처음 프로젝트를 만들때 타임리프를 추가해줬기에 build.gradle에 라이브러리가 추가되어있다.
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
라이브러리가 추가되어있다면 스프링 부트가 자동으로 ThymeleafResolver와 필요한 스프링빈들을 등록한다.
그리고 다음 설정도 사용한다. 이 설정은 "기본값" 이기때문에 변경이 필요할 때만 설정하면 된다.
application.properties or application.yml
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
위의 설정은 기본설정이므로, 변경하고싶을때 application.*에 추가하여 수정하면된다.
classpath는 src/main/resources를 의미한다.
타임리프 관련 추가 설정은 다음 사이트에서 thymeleaf를 검색하면 볼 수 있다.
'인프런 > 스프링 MVC 1편' 카테고리의 다른 글
15)HTTP 메시지 컨버터 , RequestMappingHandlerAdapter 구조 (0) | 2023.01.26 |
---|---|
14)HTTP 응답 문자(v1~v3) JSON(v1~v2) ,@RestController (0) | 2023.01.26 |
12)HTTP요청 메시지 처리방법 [데이터타입 :JSON] (v1 ~ v4) (0) | 2023.01.26 |
11)RequestParam 처리 방법 , HttpRequest 응답 방법 (0) | 2023.01.26 |
10)HandlerMethodArgument,RequestParam 처리 방법들 (0) | 2023.01.25 |
댓글