본문 바로가기

Programming/SERVER

DAY 123. MVC2 패턴 - 게시글 목록, 페이징

 

게시글 목록 조회

 

01. board에 관한 .jsp 파일 생성

- webapp > views > board 밑에 생성

- list.jsp(게시글 목록 조회) | update.jsp(게시글 수정) | view.jsp(작성한 글 상세 보기) | write.jsp(게시글 작성)

- 목표 

1) 파일 업로드, 파일 다운로드 구현

2) 댓글 기능 구현

 

- 데이터베이스 BOARD TABLE 생성, COMMENT 생성,  시퀀스 생성, PL/SQL 프로시저 (pk, fk 제약조건 참고 하기

 

2. list.jsp를 위한 서블리 생성 : ListServlet.java

- com > kh > mvc > board > controller

- URL Mappings : /board/list | doGet 체크

1) 게시글 리스트 조회

  (1) 사용자 요청에 대해서 처리하는 역할, 결과만 전달하는 역할이기 때문에 forward로 처리한다.

  request.getRequestDispatcher("/위치/list.jsp").forward(request, response);

  

  (2) header.jsp

게시판으로 이동할 영역에 <a href="${ path }/board/list"> 작성한다.

 

2) 페이징 처리

  (1) PageInfo.java 클래스 생성 : 페이징 처리에 대한 로직 구현

  (2) PageInfo 객체를 만들고 정수형 변수 page에 사용자로부터 받아오는 값을 정수로 형변환 해서 담아준다.

 

  == 여기까지만 하면 HTTP 500 에러 발생 : NumberFormatException : null

  WHY? 최초에 게시판을 들어올 때는 page에 넘겨주는 파라미터 값이 없다. 그래서 null이 발생한다. 

 

[해결 방법]

  1. NULL 처리 구문 작성

// 삼항 연산자 사용
page = request.getParameter("page") != null ? Integer.partseInt(request.getParameter("page")) : 1;

  2. try ~ catch 구문으로 처리

try {
	page = Integer.parseInt(request.getParameter("page"));
} catch (NumberFormatException e) {
	page = 1;
}

 

pageInfo = new PageInfo(int currentPage, int pageLimit, int listCount, int listLimit) 

  • currentPage : 현재 페이지
  • pageLimit : 한 페이지에 보이는 페이지의 수
  • listCount : 전체 리스트의 수
  • listLimit : 한 페이지에 표시될 리스트의 수

- listCount를 서버에서 얻어오기 위해서, 서비스 객체를 만든다. 

- BoardService() 객체 만들기

- listCount = service.getBoardCount(); : 게시글의 전체 개수를 리턴한다.

 

 

3. BoardService.java 만들기

- com > kh > mvc > board > model > service 밑에 생성

- BoardService 클래스에 getBoardCount() 메소드 생성

- 서비스에서도 직접 데이터 베이스에 접근해서 데이터를 가져오지 않고, DAO 객체에 위임한다.

- 따라서 BoardDao 객체를 생성

 

4. BoardDao.java 만들기

- com > kh > mvc > board > model > dao 밑에 생성

 

5. BoardService.java 

- 데이터 베이스와 연결하기 위해 Connection(java.sql) 객체 생성한다.

- 정수형 변수 count를 선언하고 dao를 통해 데이터 베이스에 저장된 게시글의 개수를 얻어온다. 매개변수는 connection을 넘겨준다.  count = dao.getBoardCount(connection);

- BoardDao 클래스에 getBoardCount() 메소드 생성

 

6. BoardDao.java

- 정수형 변수 count를 선언

- String query를 선언하고 회원들을 조회할 수 있는 SELECT 쿼리문 작성

- SELECT문을 사용하기 때문에 ResultSet 객체 필요하다.

- PreparedStatement 선언

- connection으로 prepareStatement(query)를 가져와서 pstmt 변수에 담아준다.

- ResultSet인 rs = pstmt.executeQuery();

- ResultSet은 한 개의 행을 검색하기 때문에 반복문 사용할 필요가 없다.

- if 문 활용한다.