[페이징 처리]
[쿼리]
SELECT idx,subject,bHit,reg_date FROM bbs ORDER BY idx DESC;
SELECT ROWNUM AS rnum,idx,subject,bHit,reg_date FROM bbs ORDER BY idx DESC;
SELECT ROWNUM AS rnum,idx,subject,bHit,reg_date FROM bbs ORDER BY rnum DESC;
SELECT ROW_NUMBER() OVER(ORDER BY idx DESC) AS rnum,idx,subject,bHit,reg_date
FROM bbs WHERE rnum BETWEEN 1 AND 5;
SELECT idx,subject,bHit,reg_date FROM (
SELECT ROW_NUMBER() OVER(ORDER BY idx DESC) AS rnum,idx,subject,bHit,reg_date
FROM bbs
) WHERE rnum BETWEEN 1 AND 5;
[Controller]
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String pageParam = req.getParameter("page");
System.out.println("page:"+pageParam);
int group =1;
if(pageParam!=null) {
group = Integer.parseInt(pageParam);
}
BoardService service = new BoardService();
HashMap<String, Object> map = service.list(group);
BoardDTO dto = new BoardDTO();
req.setAttribute("maxPage", map.get("maxPage"));
req.setAttribute("list",map.get("list"));
req.setAttribute("currPage", group);
RequestDispatcher dis = req.getRequestDispatcher("list.jsp");
dis.forward(req, resp);
}
public HashMap<String, Object> list(int page) {
HashMap<String, Object> map = new HashMap<String, Object>();
int pagePerCnt = 10;
int end = page*pagePerCnt;
int start = end-(pagePerCnt-1);
String sql ="SELECT idx,subject,bHit,reg_date FROM"
+ "(SELECT ROW_NUMBER() OVER(ORDER BY idx DESC"
+ "AS rnum,idx,subject,bHit,reg_date FROM bbs)"
+ "WHERE rnum BETWEEN ? AND ?";
ArrayList<BoardDTO> list = new ArrayList<BoardDTO>();
try {
ps = conn.prepareStatement(sql);
ps.setInt(1, start);
ps.setInt(2, end);
rs = ps.executeQuery();
while(rs.next()) {
BoardDTO dto = new BoardDTO();
dto.setIdx(rs.getInt("idx"));
dto.setSubject(rs.getString("subject"));
dto.setbHit(rs.getInt("bHit"));
dto.setReg_date(rs.getDate("reg_date"));
list.add(dto);
}
System.out.println("list size:"+list.size());
BoardDTO dto = new BoardDTO();
int maxPage= getMaxPage(pagePerCnt);
map.put("list",list);
map.put("maxPage",maxPage);
System.out.println("maxPage: "+ maxPage);
} catch (SQLException e) {
e.printStackTrace();
} finally {
resClose();
}
return map;
}
private int getMaxPage(int pagePerCnt) {
String sql = "SELECT COUNT(idx) FROM bbs";
int max=0;
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
if(rs.next()) {
int cnt = rs.getInt(1);
max = (int) Math.ceil(cnt/(double)pagePerCnt);
}
} catch (SQLException e) {
e.printStackTrace();
}
return max;
}
[list.jsp]
<div class="pageArea">
<span>
<!--현재페이지가 1이면 이전페이지 비활성화-->
<c:if test="${currPage==1}">이전</c:if>
<c:if test="${currPage>1}">
<a href='./?page=${currPage-1}'>이전</a>
</c:if>
</span>
<span id="page">${currPage}</span>
<span>
<!--현재페이지가 마지막페이지면 다음페이지 비활성화-->
<c:if test="${currPage == maxPage}">다음</c:if>
<c:if test="${currPage < maxPage}">
<a href="./?page=${currPage+1}">다음</a></c:if>
</span>
</div>