- 정적 컨텐츠
- 클라이언트에게 HTML파일을 내려준다.
- MVC와 템플릿 엔진
- HTML에 동적인 내용을 서버에서 수정하여 클라이언트에게 내려준다.
- API
- HTML없이 데이터 그대로를 클라이언트에게 내려준다.
경로)
src > main > resources > static
파일명 그대로 url에 접근 )
각각의 역할을 나누기위해 분리
구현)
경로
src > main > java > hello > hellospring > controller > helloController.java
@GetMapping("hello-mvc")
// @ RequestParm(value = "쿼리스트링의 키") - 단일 파라미터를 받기위해 사용
// 쿼리스트링 키에 담긴 내용을 name에 저장
public String helloMvc(@RequestParam(value = "name") String name, Model model) {
// name에 담긴내용을 model의 키 name 값 name에 담는다.
model.addAttribute("name", name);
// 모델에 담긴 내용을 hello-template HTML파일에 키 name으로 넘겨준다.
return "hello-template";
}
경로
src > main > resources > templates > hello-template
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
// Model을 통해 전달 받은 내용을 name에 추가한 후
// 서버 가동시 P태그 사이에 텍스트를 치환한다.
// ** 서버를 가동하지 않으면 P태그 사이에 텍스트가 출력된다.
<p th:text="'안녕하세요. ' +${name}">hello! empty</p>
</body>
</html>
문자열을 전달하기 위한 구현)
경로
src > main > java > hello > hellospring > controller > helloController.java
@GetMapping("hello-string")
// @ResponseBody - HTTP BODY에 데이터를 그대로 전달하기위해 사용(HTML 없이)
@ResponseBody
public String helloString(@RequestParam("name") String name) {
//파라미터로 받은 name의 값에 hello를 붙여 클라이언트에게 바로 전달
return "hello " + name;
// 페이지 소스보기를 통해 HTML없이 데이터만 있는것을 확일할 수 있다.
}
💎 데이터를 전달하기 위한 구현)
경로
src > main > java > hello > hellospring > controller > helloController.java
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name")String name) {
Hello hello = new Hello(); // 인스턴스 생성
hello.setName(name);
// 쿼리스트링의 값을 setter로 상속받은
// Hello 클래스 name 필드에 저장
// hello 데이터를 클라이언트에게 바로전달
// 출력) {"name":"name에 저장한 값"} // JSON 방식
return hello;
}
static class Hello {
private String name; // 데이터의 안전성을 위해 private 사용
// private에 데이터를 활용하기 위해 getter, setter 메소드를 사용
// JAVA bin 표준방식
// 프로퍼티 접근 방식이라고도 한다.
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}