[1. 정적 컨텐츠]
정적 컨텐츠는 만들어진 파일 그대로 사용자에게 전달된다. 서버에서의 작업이 필요하지 않다.
Spring Boot는 정적 컨텐츠를 /static ( /public , /resources , /META-INF/resources )에서 제공한다.
기본적으로, resources는 /** 에 매핑된다..
resources > static > hello-static.html
|
<!--정적 컨텐츠--> |
|
|
|
<html> |
|
<head> |
|
<title>static content</title> |
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> |
|
</head> |
|
<body> |
|
정적 컨텐츠 입니다 |
|
</body> |
|
</html> |
[실행 결과] http://localhost:8080/hello-static.html
- /hello-static.html 요청을 받고, 내장 톰캣 서버는 컨트롤러에서 hello-static을 찾는다.
- 없는 경우, resources에서 파일을 찾고 반환
[2.MVC와 템플릿 엔진]
= JSP, PHP와 같은 템플릿 엔진 : html을 서버에서 동적 웹페이지로 변환해준 후 보내주는 것
JSP (Java Server Page), PHP (Personal Hepertext Preprocessor) : 동적 웹페이지를 위해 설계된 프로그래밍 언어
Controller
java/hello.hellospring/controller/HelloController.java
|
/*MVC와 템플릿 엔진*/ |
|
|
|
public String helloMvd( String name, Model model)// 이 메서드는 웹사이트에서 url을 파라미터로 받아오도록 해준다 |
|
{ |
|
model.addAttribute("name", name); |
|
return "hello-template"; |
|
} |
- http://localhost:8080/hello-mvc 라고 해두면 오류 페이지가 나타난다.
- 파라미터로 값을 넘겨주어야 하므로 http://localhost:8080/hello-mvc?name=spring와 같이 해주어야 한다.
View
resources/template/hello-template.html
|
<html xmlns:th="http://www.thymeleaf.org"> |
|
<body> |
|
<p th:text="'hello ' + ${name}">hello! empty</p> |
|
</body> |
|
</html> |
[실행 결과]
- 내장 톰캣 서버가 컨트롤러에서 Get으로 매핑된 hello-mvc 메서드를 찾아 실행시킨다.
- 파라미터로 받은 name을 Model에 담고, hello-template 리턴한다
- viewResolver에서 리턴된 hello-template와 대응되는 templates의 html을 찾아 처리한다.
저번 시간에 다룬 정적 페이지와 동적 페이지를 다시 다뤘다.
[3. API]
Json의 데이터 구조 포맷의 형태로 클라이언트에게 데이터를 전달하는 방식
정적 컨텐츠를 제외하고, html 방식으로 보낼지, API 방식으로 데이터만을 바로 보낼지의 방식 2가지가 있다.
java/hello.hellospring/controller/HelloController.java
|
/*API*/ |
|
|
|
//http에서 헤더부와 바디부가 있는데, 그 바디에 데이터를 "직접" 넣어주겠다라는 것이다. |
|
public String helloString({ String name) |
|
return "hello " + name; |
|
} |
[실행 결과] http://localhost:8080/hello-string?name=spring
페이지 소스 보기를 했을 시, 데이터만 보내진 것을 확인해볼 수 있다.
템플릿 엔진은 View에서 조작하지만, API는 데이터를 그래도 HTTP의 body에 반환하여 보이도록 한다..
@ResponseBody 를 사용하면 viewResolver를 사용하지 않는다.
java/hello.hellospring/controller/HelloController.java
|
/*API_2*/ |
|
|
|
|
|
public Hello helloApi({ 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; |
|
} |
|
} |
[실행 결과] http://localhost:8080/hello-api?name=spring
Json의 형태로 나타난다. 간단하기 때문에 이렇게 객체로 넘겨주는 방식이 많이 사용된다.
- 내장 톰캣 서버가 컨트롤러에서 hello-api를 찾고, 템플릿 엔진의 경우는 viewResolver로 넘겨주지만, @ResponseBody가 붙여진 API의 경우 HTTP의 body에 그대로 입력하여 반환한다.
- 반환되는 것이 객체이므로, json의 형태로 만들어서 http에 반환되도록 한다.
@ResponseBody 사용
- HTTP의 body에 결과를 직접 반환한다. 객체 반환.
- viewResolver에서 처리되는 것이 아닌, HttpMessageConverter가 동작한다.
- 기본 문자 처리 : StringHttpMessageConverter
- 기본 객체 처리 : MappingJackson2HttpMessageConverter
- byte 처리 등 기타 여러 HttpMessageConverter가 기본으로 등록되어있다.
가볍게 알맞은 converter가 동작하여 json으로 변환되어 반환되는 것이라고 생각한다.
'스프링 SPRING > [SPRING] 김영한 스프링 입문' 카테고리의 다른 글
톰캣이 무엇을 의미할까? 아파치란? (0) | 2023.01.17 |
---|---|
[인텔리제이] 인텔리제이 단축키 정리 | 외워야하는 단축키 정리 (0) | 2023.01.03 |
[스프링 SPRING] 인텔리제이 Getter and Setter 게터 세터 단축키 (0) | 2023.01.03 |
[SPRING] 스프링 입문 | 프로젝트 환경 설정하기 (0) | 2022.12.31 |
스프링 입문 수업 시작 전, JAVA (1) | 2022.12.29 |