본문 바로가기
컴퓨터 프로그래밍/Spring

[Spring] Controller, 정적 페이지와 동적 페이지

by 한33 2024. 8. 12.

 

Controller 패턴이 적용되어있지 않았다면 위의 4가지 API 를 처리하기 위해 3개의 클래스를 만들어야했을 것

 

API 마다 파일을 만들 필요가 없음

 

유사한 성격의 API 를 하나의 Controller 로 관리

( @RequestMapping 사용 )

 

메서드 이름 내 마음대로 설정 가능 ( 클래스 내의 중복 메서드명 불가 )


정적페이지의 기본은 static 폴더에 정적 페이지 hello.html 을 만들고 그냥 주소창에 /hello.html 로 접속시키면 바로 연결된다.


이를 Controller 에서 연결시키고 싶다면

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf’

해당 dependency를 주석 처리해야 테스트가 가능

 

thymeleaf 는 동적 페이지 처리를 위한 템플릿 엔진.

추가하면 자동으로 Controller에서 html 파일 찾는 경로를/resources/templates 로 설정

@GetMapping("/static-hello")
public String hello() {
    return "hello.html";
}

 

위 처럼 코드를 짜면 /static-hello 로 접속했을 때 templates 폴더 안의 hello.html 을 view 로 보내 사용자에게 보여준다.


@GetMapping("/html/redirect")
public String htmlStatic() {
    return "redirect:/hello.html";
}

 

템플릿 엔진을 적용한 상태에서 static 폴더의 html 파일을 Controller를 통해서 처리하고 싶다면 이렇게 "redirect:/hello.html" redirect 요청을 문자열로 반환하면 http://localhost:8080/hello.html 요청이 재 수행되면서 static 폴더의 파일을 반환할 수 있음


@GetMapping("/html/templates")
public String htmlTemplates() {
    return "hello";
}

 

templates 폴더로 경로를 설정하면 return 시에 .html 을 생략한 채 "hello" 로 view 를 전달할 수 있다.


 

  • Client 요청을 Controller 에서 Model 로 처리
  • Template engine (Thymeleaf) 에게 View, Model 전달
    • View : 동적 HTML 파일
    • Model : View 에 적용할 정보들

 

  • visitCount 변수를 visits 라는 이름으로 hello-visit. html 에 전달
  • 전달받은 데이터는 ${visit} 꼴로 html 파일에서 출력