정적 콘텐츠
- static/index.html 을 올리면 Welcome page 기능 제공
- 정적 리소스를 제공 (HTML, CSS, JS, 이미지 등)
- 브라우저가 요청하면 spring 이 그대로 반환
- 파일 자체로 클라이언트로 전달
resources/static 폴더에 html 파일을 생성하고
주소창에 localhost:8080/hello-static.html 을 입력하면, 소스 코드 파일 그대로 전달된다. (hello-static 은 임의의 viewName)
1. resources/static/hello-static.index 파일을 생성한다.
2. localhost:8080/hello-static.html 을 입력하여 서버에 접속한다.
3. 파일이름과 일치하는 @GetMapping("hello-static") 을 찾지만 관련 컨트롤러가 존재하지 않는다.
(컨트롤러 먼저 우선순위를 가짐)
4. resources/static 폴더에 hello-static.html 이 존재하는지 확인한다.
5. 존재하면 resources/static/hello-static.html 파일을 변환하지 않고 그대로 웹 서버에 전달한다.
MVC 와 템플릿 엔진
- Model, View, Controller 로 분리
- HTML을 렌더링 하면서 서버에서 동적으로 데이터를 바인딩
- 컨트롤러에서 데이터를 모델(Model)로 전달하고, 템플릿 파일에서 렌더링 한 후 파일을 클라이언트로 전달
예시 1
1. @GetMapping("hello") 로 실행할 메서드를 생성한다. (hello 는 임의의 viewName)
2. 해당 hello 로 localhost:8080/hello 을 입력하여 서버에 접속한다.
3. hello 와 일치하는 @GetMapping("hello")을 찾아 메서드를 실행한다.
4. spring 이 model 을 만들고, "hello" 문자를 리턴한다.
5. viewResolver 가 "hello" + `.html` 로 매핑하여 templates/hello.html 파일을 변환하여 전달한다.
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "hello!!");
return "hello";
}
예시 2
1. @GetMapping("hello-mvc") 로 외부에서 파라미터를 받아오는 메서드를 생성한다. (hello-mvc 는 임의의 viewName)
2. 해당 hello-mvc 으로 localhost:8080/hello-mvc?name=spring!!! 을 주소창에 입력하면
3. hello-mvc 와 일치하는 @GetMapping("hello-mvc")을 찾아 메서드를 실행한다.
4. spring 이 name 이라는 파라미터에 spring!!! 라는 값으로 치환한 후 model 을 생성하고, "hello-template" 문자를 리턴한다.
4. viewResolver 가 "hello-template" + `.html` 로 매핑하여 templates/hello-template.html 파일을 변환하여 전달한다.
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
이때 name 이라는 파라미터가 요구되므로, 주소창에 localhost:8080/hello-mvc 만 입력하면 오류가 발생한다.
API
- 실행할 메서드에 @ResponseBody 어노테이션을 추가해야 한다.
(@ResponseBody : HTTP body 에 리턴값을 직접 넣어준다는 뜻)
- 문자인 경우, 문자 그대로 전달
- 객체인 경우, Json 으로 전달
예시 : 객체인 경우
1. @ResponseBody 사용
2. HTTP 의 BODY 에 문자 내용을 직접 반환
3. HttpMessageConverter 가 동작
4. 기본 문자 : StringHttpMessageConverter
5. 기본 객체 : MappingJackson2HttpMessageConverter
// 문자
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
// 객체
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
출처 | 스프링 입문(김영한) - 인프런
'💠프로그래밍 언어 > Java' 카테고리의 다른 글
[Spring] 스프링 빈 등록하는 2가지 방법 (컴포넌트 스캔, 직접 등록) (1) | 2024.12.20 |
---|---|
[Spring] 스프링 프로젝트 생성, 라이브러리, 빌드하기 (0) | 2024.12.20 |
[기본 개념] 9 | (2.2) 스트림 중간 연산 (0) | 2022.02.10 |
[기본 개념] 9 | (2.1) 스트림 (0) | 2022.01.26 |
[기본 개념] 9 | (1.2) Java.util.funcion 패키지, Function 합성, Predicate 결합, 메서드 참조 (0) | 2022.01.26 |