우선 정적 리소스는, 그냥 보여주면 된다.
resource/static/경로이하 파일이름을 해주면 된다.
확장자 명은 빼도 되는데, 아마 .html이 기본으로 스프링에서 자동으로 뷰 리졸브를 해주는 모양이다.
아마도 이 확장자 명도 바꾸려면 application.properties에서 해주면 되겠지.
resource/templates/ 이하의 경로
<!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>
위에는 "http://www.thymeleaf.org" 에 지정한 기능들을 th라는 이름으로 사용한다.
<p th:text="${data}">empty</p>에서
th:text="${data}"는 일단 이 태그 내부는 모델에서 data라는 키의 값으로 채운다는 뜻이다. 없으면 내가 넣어둔 empty가 그대로 된다.
@Controller
public class ResponseViewController {
@RequestMapping("/response-view-v1")
public ModelAndView responseViewV1(){
ModelAndView mav = new ModelAndView("response/hello")
.addObject("data","hello!");
return mav;
}
@RequestMapping("/response-view-v2")
public String responseViewV2(Model model){
model.addAttribute("data", "hello2");
return "response/hello";
}
@RequestMapping("/response/hello")
public void responseViewV3(Model model){
model.addAttribute("data", "hello3");
return;
}
}
내가 그냥 MaV를 생성해서 값을 넣어주고 그걸 return해 준다.
아예 인자로 모델을 받아준다. String 타입으로 return하면 이 클래스가 @Controller이므로 저건 뷰의 논리 이름이 된다. 뷰 리졸버가 저걸 참고하고 물리이름으로 바꿔준다. 만약 @ResponseBody를 쓰거나, HttpEntity를 쓰면 이 두개는(사실 @ResponseBody가 HttpEntity를 쓰는거지만) 바디와 연관된 것이고, 바디에 직접적으로 넣어준다.
저렇게 아예 경로명으로 매핑시켜주고, void로 아무것도 반환 안할 수 있다. 그러면 그냥 정적처럼
http://localhost:8080/response/hello
이렇게 들어갈 수 있다. 근데 추천은 안한다. v2가 가장 명시적이고 깔끔한 듯 하다.
'스프링 > 3. 스프링 MVC' 카테고리의 다른 글
48. HTTP 메시지 컨버터 (0) | 2023.08.13 |
---|---|
47. HTTP API (0) | 2023.08.13 |
45. HTTP API JSON (0) | 2023.08.12 |
44. HTTP API (0) | 2023.08.12 |
43. ModelAttribute (0) | 2023.08.12 |