뉴렉처 JSP/서블릿 82강
자세한 페이지 수정하기
컨트롤러 : 사용자 입/출력을 관할
NoticeDetailController를 수정
id값을 받아온것을 id변수에 담고 NoticeService 객체를 생성
NoticeService 의 getNotice() 메소드를 사용해 notice 값을 받아온다 ( 사전에 미리 service함수를 만들어뒀기때문 )
받아온 notice를 "n"이라는 이름으로 setAttirbute 담아주고 전달
detail.jsp에서는 받아온 n을 이용해 정보를 보여주기 때문이다.
간단하게 구현해놓았던 service를 이용해서 detail 컨트롤러를 수정함
나누어서 만드는 이유 : 개발자를 위함 (사용자는 똑같이 보여짐) , 협업시 아주 용이함 service를 나누어서 개발
목록에 댓글 수를 포함하려면 ?
간단하게 타이틀 오른쪽에 게시글에 대한 댓글 갯수를 구하기위한 가이드
데이터베이스를 데이터를 준비해준다. COMMENT라는 댓글전용 게시판
데이터를 임의로 넣어준다.
일반적인 현장에서는 테이블 하나를 목록화 해서 관리하기보다는 다른테이블을 엮어서 관리하는게 일반적
댓글 수를 포함하기 위한 쿼리 문제
댓글을 포함하기위해 쿼리문을 수정해줘야한다.
댓글 수를 포함하기위해선 두개의 테이블이 조인이 되어야한다. (notice , comment)
주의사항 : 조인할때는 단순하게 INNER JOIN을 하면 안된다(단순하게 INNER조인시 자식테이블에 기준이됨)
OUTER JOIN을 사용해줘야한다.
LEFT OUTER JOIN 여기서 OUTER는 생략이 가능하다. (자식이 없는경우에는 null)
하지만 이 경우 자식(댓글)을 2개 가지고있으면 자식갯수만큼 중복 반복이 되는것을 볼수있다.
이문제를 해결하기위해서는 검색조건을 COUNT(C.ID)를 받아와야하는데 COUNT를 사용하기위해서는
데이터가 그룹화가 되어있어야한다. GROUP BY 절을 이용 , 카운트의 별칭은 CMT_COUNT 설정
N.CONTENT 같은겨웅에는 데이터가 크기때문에 사용할수없다 (짤리게됨)
기존에 목록을 가져왔던 쿼리문과 댓글 까지 나타내게하기위한 쿼리문 두개를 결합 해야한다.
기본적인 데이터인 NOTICE를 가지고 정렬과 필터링 넘버링까지 하는 가장 기본인 데이터기때문에
위에 문장으로 바뀌어야한다. (서브쿼리를 사용하게되면 상당히 복잡해짐)
차선책으로 사용할수있는 View를 사용 (뷰안에는 기본적인내용만 포함 데이터 정렬이나 필터링은 포함시키지 않는다)
NOTICE_VIEW라는 이름의 VIEW를 만든뒤 꽂아준모습 ORDER BY (정렬) 은 빼주었다.
별도의 서브쿼리를 만들거나하는 불편함없이 VIEW를 이용해 COUNT 까지 나오는것을 확인할수있다.
코드복잡도가 상당히 줄어드는것을 볼수있다.
현재 VIEW를 확인은 오라클 디벨로퍼 뷰단에가면 확인할수있다.
VIEW를 사용해 쿼리문을 수정해준다.
받아오는 값에 CONTENT는 빠지고 CMT_COUNT가 추가되었으니 그거에 맞게 수정해준다.
Notice는 따로이용하는 객체들이있으니 NoticView클래스를 하나만들어주고 그 생성자를 이용한다.
Service의 목록조회의 반환값들도 새로운 클래스인 NoticeView타입의 List로 수정해준다.
그다음 NoticeView클래스를 만든다.
entity의 새로운클래스를 생성하고 Superclass를 notice를 상속 받는다.
NoticeView 클래스는 Notice를 상속받고있다.
일단 NoticeView클래스 만의 cmtCount 필드를 생성해주고 Getter Setter를 만든다.
서비스 목록에서 메소드를 사용하기위해 super를 사용해 기존의 notice 인자값들을 받아오고
NoticeView만의 cmtCount 인자값을 적용시킨 메소드로 수정한다.
그리고 cmtCount를 사용하기위해 list.jsp로 이동해 n으로 가져온 notice값을 이용해 cmtCount를 사용한다.
적용이 끝난모습
Index 페이지 추가하기
사용자 공지목록과 내용을 보는것을 해결했고
관리자페이지를 만들기위해서는 기본으로 보는내용 index페이지를 만들어 줘야한다.
인덱스페이지 구현순서
컨트롤러 -> 뷰
컨트롤러를 또 추가하게 될텐데 정리를 시켜줄 필요가 있다, notice의컨트롤러를 따로 모아주도록 한다.
notice로 끝나는 컨트롤러 패키지를만들어주고 컨트롤러 파일들은 notice를 생략해주도록한다.
indexController
기존에 있었던 index.html 파일을 view안에다 이동시켜준뒤 jsp를 하나만들어준다. html 복사붙여넣기
indexController에서 경로를 설정해서 포워딩시켜줬기때문에 index.jsp로 이동되는 모습을 볼수있다.
Admin 페이지를 위한 서비스 목록 추가하기
관리자페이지는 공지사항 목록이 조금 다르게생겼다.
추가해야할 서비스 목록(구현해야할 메소드목록)
공지사항 목록 페이지
pubNoticeAll(ids) : 일괄공개요청 (여러개이기때문에 인자값을 ids)
removeNoticeAll(ids) : 일괄 삭제요청 (여러개이기때문에 인자값을 ids)
글쓰기 -> 글쓰기페이지
insertNotice(notice) : 공지등록 요청
목록->자세한페이지
deleteNotice(id) : 공지삭제 요청
수정->수정페이지이동
updateNotice(notice) : 공지수정 요청
index->공지사항
getNoticeNewestList() : 가장최근 공지목록 페이지요청
대부분 insert , update , delete 는 반환값으로 처리가 완료된 다음 완료된것이 레코드에 몇개의 영향을 주었는가
그것을 반환하게하는게 기본적인 반환값이된다.
구현하기위한 기본적인 함수를 준비
admin/index 페이지 만들기
관리자의 index페이지 추가하기
admin이라는 패키지를 만들어서 방정리를해주고 기존컨트롤러에있는 IndexController를 복사해 가지고온다.
복사한 admin패키지안에 있는 IndexController의 매핑이름을 수정해주고 포워딩하는 주소를 변경해준다
WebContent안에있는 view-> admin폴더안의 index.jsp(관리자 index페이지)를 만들어준다.
기존에있는 index.html파일을 복사붙여넣기 (jsp형식)
주소를 직접 입력해 수정해서 관리자 홈에 접속해본 화면
뉴렉처 JSP/서블릿강의 88강 완
'Step by Step' 카테고리의 다른 글
JSP/서블릿 공부 2021-03-03 (0) | 2021.03.03 |
---|---|
JSP/서블릿 공부 2021-03-02 (0) | 2021.03.02 |
JSP/서블릿 공부 2021-02-27 (0) | 2021.02.27 |
JSP/서블릿 공부 2021-02-26 (0) | 2021.02.26 |
중간정리 2021-02-25 (0) | 2021.02.25 |