jsp_MVC2 패턴으로 게시판 만들기(전체 게시글 불러오기,게시물 총 갯수, 페이징처리)
point1) 순서
index.jsp -> BoardFrontController.java -> BoardListAction.java -> BoardDAO.java(DB처리) -> BoardListAction.java -> BoardFrontController.java -> boardList.jsp
point2) 전체 게시물 수 출력하기
전체 게시물의 숫자를 출력하기위한 각 클래스들과 xml파일 jsp파일들이다.
BoardFrontController.java:
수정할 코드가 없다. FrontController는 공통로직만 처리해주고 디테일한 기능은 Action클래스로 넘긴다.
BoardListAction.java:
DB쿼리문을 가공하는 클래스로서 execute라는 메서드를 실행한다는 의미는 클라이언트가 어떠한 요청을 했을 때 해당 요청에 해당하는 모든 DB문을 가지고 와서 한번에 return 시킨다는 것을 의미한다.즉, 글목록이라는 버튼을 누르면 우리는 수십개의 글목록, 총 글 갯수, 페이지 숫자 등 데이터베이스에 담겨진 정보들을 한번에 여러개를 가지고와야하는데 해당 기능을 execute메서드에서 각각 dao 클래스를 호출하여 데이터베이스를 담고 그 데이터베이스를 가공해서 한번에 return 시켜주는 역할을 하고 있는 것이다.
그래서 Action 클래스를 만드는 기준은 만약 하나의 버튼을 클릭해서 A,B,C라는 데이터가 한번에 들어와야한다면 해당 A,B,C의 기능을 하나의 Action 클래스에서 만들어야하고 그렇지 않은 경우 또다른 Action 클래스를 생성하여 업무를 진행한다.
BoardDao.java:
가지고올 데이터베이스의 정보에 따라서 메서드를 따로 생성한다. 이번엔 getBoardCnt()라는 메서드를 생성하였다.
Board.xml:
데이터베이스 SQL문을 작성한다.
BoardList.jsp:
${requestScope.totalCnt}에서의 requestScope는 request와 동일한 역할을 한다.
그래서 Action에서 req.setAttribute를 통해 req에 저장한 값을 BoardList.jsp에서 requestScope를 통해서 꺼내와 var이라는 변수에 담아서 출력시켜주는 형태이다.
point3) 전체게시글 가져오기(+페이징처리)
1번박스:
페이지에 게시글이 아무것도 없을 때를 대비한 코드이다.
삼항연산자를 사용해서 page에 page는 1페이지가 되는 것이고 아닐경우 page는 현재 파라미터로 받은 값(사용자의 현위치)가 page가 된다.
2번박스 3번박스:
pageSize: 페이지 크기
endRow: 제일 마지막줄(마지막은 10,20,30...N0으로 끝나니까 현재page*10 공식으로 작성해줌)
startRow: 제일 첫번째줄(첫번째는 1,11,21,31...N1로 끝나니까 마지막페이지에서 -1을 뺌으로 일의자리 1을 만들어줌)
startPage: 페이지 목록에 의해서 page 1~10까지 페이지가 노출이 될껀데 이 페이지 목록의 첫번째page
endPage: 페이지 목록에 의해서 page 1~10까지 페이지가 노출이 될껀데 이 페이지 목록의 마지막page
totalPage: 전체페이지
4번박스:
syso을 통해 값이 잘 나오는지 확인하는 부분
5번박스:
지금 현재 page는 10page까지 출력되게 코딩되어있는데 만약 데이터가 100건이아닌 88건정도가 있을 경우를 대비한 endPage이다.
그래서 endPage가 전체페이지보다 작다면(end가 88,전체가100) 마지막 페이지는 endpage(88)를 넣고 아니면(end 100,전체100) 전체페이지를 넣음으로서, 데이터가 88건만 있더라도 endpage가 데이터수에 따라서 유연하게 대처되도록 코딩한다.
6번박스:
세팅된 게시판 기본 구성 공식을 setAttribute로 프론트단에 넘겨주고있다.
7번박스:
BoardDao와 Board.xml부분이다.
Dao와 xml은 단순 해당 쿼리만 가지고 오는 파일이다. 화면에 노출될 페이지 수를 컨트롤하는등의 작업은 Dao와 xml의 일이 아니기에 startRow와 endRow만 가지고와서 처리를 해준다.
또한 xml의 쿼리문에서 rownum이라는 오라클기능을 사용했는데 이는 30건의 데이터가 있어서 3페이지의 게시판이 있다고 가정하였을 때 28번과 24번의 데이터가 지워져 2페이지의 데이터엔 8개의 데이터가 들어가는 오류를 막기 위한 기능추가로 rownum을 사용하면 게시판 넘버와는 별개로 새로운 기준이 되는 숫자가 row하나에 모두 부여가되고 삭제가 되면 해당 숫자는 자동으로 -1이됨으로 rownum숫자로 기준을 세워 게시판을 관리한다.
boardlist.jsp:
boardlist.jsp파일로서 페이지의 < 1 2 3 > 부분의 기능을 수현하였다.
- 갈색박스: 변수선언
- 주황색박스: 숫자 양 옆의 이런 "<" , ">" 기호를 누르면 전 페이지로 이동하는 기능. >가 기억이 안나면 https://songg5453.tistory.com/94 참고
- 초록박스: 현재 보고있는 페이지에 a버튼 제거
point3) 마우스를 올리면 색변하는 event처리
boardlist의 코드이다. 게시글의 td부분에 onmouseover과 onmouseout 조건을 주어 마우스를 올려두면 해당 row가 #bbefb로 변하고 마우스를 떼면 다시 원래대로 변하는 로직 구현하였다.