스프링/3. 스프링 MVC

46. 정적 리소스, 뷰 템플릿

sdafdq 2023. 8. 13. 11:47

우선 정적 리소스는, 그냥 보여주면 된다.

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