반응형

정리(스프링 MVC - 웹 페이지 만들기)

  • 프로젝트 생성
  • 요구사항 분석
    • 요구사항은 굉장히 단순했다.
    • 도메인 모델 4개
    • 기능 4개
  • 상품 도메인 개발
  • 상품 서비스 HTML
  • 상품 목록 - 타임리프
    • 상품 목록에 타임리프를 적용했다.
    • <html xmlns: th="http://www.thymeleaf.org"> 이렇게 타입리프를 선언했고,
    • 타임리프의 특징은 태그를 유지한 상태로 속성만 바꾸는 역할을 하는 것이다.
    • 타임 리프 핵심은 th:xxx 가 붙은 부분은 서버사이드에서 랜더링되고, 기존 것을 대체한다.
    • 그리고 HTML파일로 직접 열었을 때, 'th:xxx'가 있어도 웹 브라우저는 th 속성을 알지 못하므로 무시한다.
    • 이렇게 순수 HTML을 그대로 유지하면서 뷰 템플릿도 사용할 수 있는 타임리프의 특징을 네츄럴 템플릿이라 한다.
  • 상품 상세
  • 상품 등록 폼
    • 상품 등록 폼: GET /basic/items/add
    • 상품 등록 처리: POST /basic/items/add
    • 이렇게 하면 하나의 url로 http메서드를 통해서 등록폼과 등록 처리를 깔끔하게 할 수 있었다.
    • th:action 값을 비워두면 GET과 POST의 URL을 맞출 수 있다.
  • 상품 등록 처리 - @ModelAttribute
    • 2가지 작업을 해준다.
    • @ModelAttribute는 요청파라미터를 처리해주고,
    • @ModelAttribute는 Model에 추가해준다.
  • 상품 수정
    • HTML Form 전송은 PUT, PATCH를 지원하지 않는다.
  • PRG Post/Redirect/Get
    • 상품을 등록하고, 새로고침을 누르면 마지막 요청 URL이 POST/add 여서 상품이 중복 등록되는 문제가 있었다.
    • 이 문제를 해결하기 위해, POST/add 를 한 뒤, 뷰 템플릿을 보여주는 것이 아니라, 화면을 Redirect하면, 마지막에 GET /items/{id} 요청이 나가게 된다. 따라서 새로고침을 해도 GET /items/{id}가 호출되도록 했다. (PRG 패턴)
  • RedirectAttributes
    • pathVariable처럼 경로상에 있는 것은 치환,  경로상에 없는 것은 쿼리 파라미터로 처리된다.
    • 그리고 뷰 템플릿 메시지를 추가했는데, th:if를 이용해서 ${param.status}로 타임리프에서 쿼리 파라미터를 편리하게 조회하는 기능을 사용해서 추가했다.
  • 정리

 

반응형

'Spring' 카테고리의 다른 글

스프링 MVC 2 - 타임리프 소개  (0) 2022.08.03
스프링 MVC 2 - 프로젝트 생성  (0) 2022.08.02
스프링 MVC 1 - RedirectAttributes  (0) 2022.08.01
스프링 MVC 1 - PRG Post/Redirect/Get  (0) 2022.08.01
스프링 MVC 1 - 상품 수정  (0) 2022.08.01