서블릿에서 페이징 처리

최주영·2023년 6월 9일
0

세미프로젝트

목록 보기
2/11
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//DB의 member테이블에 저장된 전체 회원을 가져와 화면에 출력해주는 기능
		
		//페이징 처리하기
		int cPage;
		try {
			cPage=Integer.parseInt(request.getParameter("cPage"));
		}catch(NumberFormatException e) {
			cPage = 1;
		}
		
		int numPerpage;
		try {
			numPerpage=Integer.parseInt(request.getParameter("numPerPage"));
		}catch(NumberFormatException e) {
			numPerpage = 10;
		}
		
		//1. DB에서 member테이블에 있는 데이터 가져오기
		List<Member> members = new AdminService().selectMemberAll(cPage,numPerpage);
		
		//2. DB에서 가져온 데이터 저장(화면 출력)
		request.setAttribute("members", members);
		
		//3. 페이지바를 구성
		// 1) DB에 저장된 전체 데이터의 수를 가져오기
		int totalData = new AdminService().selectMemberCount();
		// 2) 전체페이지수를 계산하기
		int totalPage = (int)Math.ceil((double)totalData / numPerpage);
		int pageBarSize = 5;
		
		// 3) 페이지바 시작번호 계산하기
		int pageNo=((cPage-1)/pageBarSize)*pageBarSize+1;
		int pageEnd=pageNo+pageBarSize-1;
		

		// 4) 페이지바를 구성하는 html 저장하기
		String pageBar="";
		
		if(pageNo==1) {
			pageBar+="<span>[이전]</span>";
		}else {
			pageBar+="<a href='"+request.getRequestURI()
			+"?cPage="+(pageNo-1)+"'>[이전]</a>";
		}
		
		while(!(pageNo>pageEnd||pageNo>totalPage)) {
			if(pageNo==cPage) {
				pageBar+="<span>"+pageNo+"</span>"; // 현재페이지 숫자 출력(이동안됨)
			}else {
				pageBar+="<a href='"+request.getRequestURI() 
				+"?cPage="+pageNo+"'>"+pageNo+"</a>"; // 현재페이지 제외하고 그 나머지 페이지들 숫자 출력(이동가능)
			}
			pageNo++;
		}
				
		// 다음출력
		if(pageNo>totalPage) {
			pageBar+="<span>[다음]</span>";
		}else {
			pageBar+="<a href='"+request.getRequestURI()+"?cPage="+pageNo+"'>[다음]</a>";
		}
		
		request.setAttribute("pageBar", pageBar);  // 다른 jsp 파일에서 저장한 pageBar출력함
		
		// 3) 출력할 화면을 선택(이동)
		request.getRequestDispatcher("/views/admin/managemember.jsp").forward(request, response);
	}
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글