목차
-메인 페이지 구현
-최종 구현 코드
-Post 상세페이지 구현
메인 페이지 구현
블로그의 메인 페이지 구현을 위해서
Bootstrap에 있는 것을 가져옵니다.
새로운 jsp파일도 만들어줍니다.
header와 footer를 추가해주고 Bootstrap을 복사 붙여 넣기 해줍니다.
새롭게 컨트롤러에도 list를 핸들링할 수 있게 PostController도 만들어줍니다.
이제 PostController에
postRepository와 session을 DI합니다.
바로 세션에 model을 담아서 list에 보여주기 위해서입니다.
list.jsp를 다듬어 줍니다.
구현되는 모습
list.jsp에서 아까 추가해준 PostController에서 model에 담아온 PostEntity를
jstl을 사용하여 forEach문에 담아서 각각의 요소를 다 넣어서 순차적으로 보여줍니다.
forEach에 들어가는 var변수는 page Scope로 들어갑니다.
이 변수는 이 페이지에서만 쓸 수 있습니다.
즉 var변수는 이 페이지(list.jsp)에서만 사용할 수 있는 변수입니다.
forEach로 각각의 postsEntity에 있는 post객체들이
각각의 변수로써 보여주게 됩니다.
이렇게 하면 postsEntity에서 있는 것을 하나씩 post에 넣어서
그 요소인 post.title, post.id을 보여줍니다.
*
Tips
Shift + Ctrl + ? -> 드래그만큼 주석
Shift + Ctrl + f -> 정렬
*
최종 구현 코드
list.jsp
forEach문 안에 있는 것들 중 post에 postsEntity에 있는 것을 하나씩 담아서 돌립니다.
(forEach post : postsEntity)
지금 이 page에서는 var에 post가 담겨 있습니다. page 변수로 담겨 있습니다.
그래서 이 페이지에서는 다른 곳에서 똑같은 post로 모델을 담아서 던져주면 그 값을 받지 못합니다.
굳이 받고 싶다면 requestScope를 사용하면 되지만 실제로 사용하지 않습니다.
PostController.java
구현되는 모습
Post 상세페이지 구현
컨트롤러에 하나 추가합니다.
detail.jsp를 다음과 같이 만들어줍니다
주의할 점!
LAZY인 상태에 yml파일에 open-in-view에 false로 되어있으면 되지가 않습니다.
그러나 LAZY인 상태에도 open-in-view가 true이면 됩니다.
반면 EAGER일 경우 JPA의 open-in-view가 false로 되어있어도 오류 없이 됩니다.
마찬가지로 JPA의 open-in-view가 true로 되어있어도 됩니다.
여기서는 효율을 위해서 EAGER로 합쳐서 받는 것보다 LAZY로 설정해두고
open-in-view의 영속성 콘텍스트의 생명주기를 View까지 끌고 오게 true로 해놓습니다.
그렇게 하면 훨쉰 효율적으로 요청할 때만 join을 해주게 되며 객체 안에 있는 값을 Mapping 하여
보내주게 됩니다.
postEntity.user.username을 들고 올 수 있겠는가?
LAZY open-in-view false X
LAZY open-in-view true O
EAGER open-in-view false O
EAGER open-in-view true O
구현되는 모습입니다.
각각의 요소들이 잘 들어가 있네요!
'BackEnd > Spring' 카테고리의 다른 글
[Spring][18]Using summernote[글쓰기 작성 구현] (0) | 2021.07.19 |
---|---|
[Spring][17]Page Update, Delete[게시글 수정,삭제 구현] (0) | 2021.07.16 |
[Spring][15]Update practice[회원정보 수정 및 주소 API활용하여 가져오기] (0) | 2021.07.14 |
[Spring][14]API Practice2[Address API 구현코드, Debug] (0) | 2021.07.12 |
[Spring][13]API Practice[API 실습, test] (0) | 2021.07.11 |