@GetMapping("/calc18")
@ResponseBody
String showCalc18() {
return """
<div>
<input type="text" placeholder="내용" value="반가워요.">
</div>
""";
}
Controller는 액션 메소드로 이루어져있음.
View는 따로 빼는 게 좋음.
@GetMapping("/calc20")
String showCalc20() {
return "calc20";
}
<div>
<input type="text" placeholder="내용!!!!">
</div>
thymeleaf 추가하고, @ResponseBody
어노테이션 사용하지 않으면 src/main/java/resources/templates 에서 html 찾아서 띄워줌.
@GetMapping("/calc21")
String showCalc21(Model model) {
model.addAttribute("v1", "안녕하세요");
model.addAttribute("v2", "반가워요");
return "calc21";
}
<div>
<input type="text" placeholder="제목" th:value="${v1}">
</div>
<div>
<input type="text" placeholder="내용" th:value="${v2}">
</div>
model.addAttribute()
→ v1
에 들어갈 데이터, v2
에 들어갈 데이터임을 알려줌.
Model
을 쓰면 알아서 처리됨
spring:
thymeleaf:
cache: false
더 빨리 처리됨. 개발모드에서 편함. 운영모드에서는 true
로 변경해야 함.
private int num = 0;
@GetMapping("/calc22")
@ResponseBody
int showCalc22() {
num++;
return num;
}
num
은 인스턴스 변수. Controller 클래스가 죽기 전까지 유지됨.
/calc22 로 들어가면 새로고침을 할 때마다 값이 증가함.
num
은 요청할 때마다 만들어지는 게 아님.
싱글톤 → 객체의 개수가 한 개로 고정. 요청이 몇 개든 Controller의 객체는 하나임
class RsData<T> {
private String resultCode;
private String msg;
private T data;
}
data에 어떤 타입이 들어올지 모를 때 사용할 수 있는 Generic 문법.