새로운 컨트롤러를 하나 더 만들어보자.
반드시 first 폴더 안에 만들어야
컴포넌트 스캔이 가능하다.
package site.metacoding.first;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
// 파일을 리턴함
// RequestDispatcher dis = request.getRequestDispatcher("파일명");
// dis.forward(request, response);
@Controller
public class PostController {
@GetMapping("/writeForm")
public String writeForm() {
return "writeForm";
// 글자를 리턴하는게 아닌 파일을 리턴함 -> 템플릿(뷰)이 필요!
}
}
UserController에는 @RestController를 붙여줬는데
PostController에는 @Controller 어노테이션을 붙여준다.
스프링이 컴파일할 때
@RestContoller도 찾고,
@Controller도 찾은 다음
둘 다 new해주는 것은 같지만
return의 기능이 다르다.
@RestContoller는 버퍼로 리턴한다.
@Controller는 이 리턴 값을 파일명으로 본다.
RestContoller는 절대 sendRedirect 하지 않고
requestDispatcher로 forward 하여
버퍼로 데이터를 전송하고,
Controller는 리턴시에 파일을 리턴하는 컨트롤러이다.
html에 자바 코드를 섞을 수 있는게있는 게 jsp만 있는 게 아니다.
jsp와 같은 것을 Template engine이라고 한다.
우리는 Mustache 템플릿 엔진을 사용할 것이다.
springboot mustache 검색
원래는 처음 프로젝트 설정할 때
라이브러리 체크하면서 같이 받을 수 있다.
빙글빙글 돌면서 다운로드 되고, buildpath 잡는 거 꼭 기다려야 한다.
이걸 다운받으면 html안에 자바 코드 적을 수 있다!!
라이브러리를 새로 추가 했으니 서버를 껐다 켜주자.
터미널 창에 Ctrl + C를 누르면 서버가 종료된다.]
지정해둔 파일이름과 대소문자도 구별해서 잘 적어주자.
@Controller가 붙은 컨트롤러의 리턴 파일은
무조건 templates 폴더 안에서 찾는다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>글쓰기 페이지입니다.</h1>
</body>
</html>
내가 파일을 리턴하고 싶다?
-> @Controller 사용
버퍼 달아서 데이터를 응답하고 싶다?
-> @RestController 사용
네이버처럼 페이지(파일)를 주고 싶으면
@Controller를 사용하고,
공공 데이터를 받아올 때처럼
데이터를 주고 싶으면
@RestContoller 사용한다.
updateForm 추가
package site.metacoding.first;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
// 파일을 리턴함
// RequestDispatcher dis = request.getRequestDispatcher("파일명");
// dis.forward(request, response);
@Controller
public class PostController {
@GetMapping("/writeForm")
public String writeForm() {
return "writeForm";
// 글자를 리턴하는게 아닌 파일을 리턴함 -> 템플릿(뷰)이 필요!
}
@GetMapping("/updateForm")
public String updateForm() {
return "updateForm";
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>글 수정 페이지입니다.</h1>
</body>
</html>
[출처]
https://cafe.naver.com/metacoding
메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9