JSP

 

 

BoardList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="model.BoardBean"%>
<%@ page import="java.util.Vector"%>
<%@ page import="model.BoardDAO"%>    
<!DOCTYPE html>
<html>
<head>
<jsp:include page="Header.jsp"/>
</head>
<body>
<!-- 게시글 보기에 카운터링을 설정하기위한 변수들을 선언  -->
<%
 //화면에 보여질 게시글의 개수를 지정
 int pageSize=10;
 //현재 카운터를 클릭한 번호값을 읽어옴
 String pageNum =request.getParameter("pageNum");
 //만약 처음 boardList.jsp를 클릭하거나 수정 삭제 등 다른 게시글에서 이 페이지로 넘어오면 pageNum값이 없기에 null 처리를 해줌
 if(pageNum==null){
	 pageNum="1";
 }
 int count =0; //전체 글의 갯수를 저장하는 변수
 int number =0; //페이지 넘버링 변수
 
 //전체 보고자 하는 페이지숫자를 저장
 int currentPage =Integer.parseInt(pageNum);
 	
 
 //전체 게시글의 내용을 jsp 쪽으로 가져와야 함
	BoardDAO bdao =new BoardDAO();

	//전체 게시글의 갯수를 읽어드린 메소드 호출
	count =bdao.getAllCount();
 	
	//현재 페이지에 보여줄 시작 번호를 설정 = 데이터 베이스에서 불러올 시작번호
    int startRow =(currentPage-1) *pageSize+1;
	int endRow =currentPage * pageSize;
	
 
	//최신글 10개를 기준으로 게시글을 리턴 받아주는 메소드 호출
	Vector<BoardBean> vec =bdao.getAllBoard(startRow, endRow);
	//테이블에 표시할 번호를 지정
	number =count - (currentPage -1 ) * pageSize;
	
%>

<div class="row">
	<div class="col-xs-2"></div>
	<div class="col-xs-8 col-md-8">
		<h2 class="text-center">전체 게시글 보기		
	  
		</h2>
		<p class="text-right">
		<input type="button" value="글쓰기"  onclick="location.href='BoardWrite.jsp'"  class="btn btn-warning">
		</p>
		<div class="table-responsive">
		<table class="table table-bordered table-striped" >
			<tr>
				<th>번호</th>
				<th>제목</th>
				<th>작성자</th>
				<th>작성일</th>
				<th>조회수</th>
			</tr>
<%-- 			<%
				int k=0;
				for(BoardBean bean : vec){
				 	
			%>
			<tr>		
			<td><%= k+1%></td>
			<td><a href="BoardInfo.jsp?num=<%= bean.getNum() %>" ><%= bean.getSubject()  %></a></td>
			<td><%=bean.getWriter() %></td>
			<td><%= bean.getReg_date() %></td>
			<td><%= bean.getReadcount() %></td>
			</tr>
			<%	k++;} %>		
			 --%>
			<%
				for(int i=0; i<vec.size(); i++){
					BoardBean bean =vec.get(i); //벡터에 저장되어 있는 빈클래스를 하나씩 추출
			%>		
							<tr>		
			<td><%= i+1%></td>
			
			<td><a href="BoardInfo.jsp?num=<%= bean.getNum() %>" >
			<%
				if(bean.getRe_step() >1){
					for(int j =0; j<(bean.getRe_step()*5); j++){
			%>
					&nbsp;
			<%						
					}
				}		
			%>
			<%= bean.getSubject()  %></a></td>
			
			
			<td><%=bean.getWriter() %></td>
			<td><%= bean.getReg_date() %></td>
			<td><%= bean.getReadcount() %></td>
			</tr> 	
			<%	}%>
			
			<tr>
				<td colspan="5" class="text-center">
				
<!-- 페이지 카우터링 소스를 작성 -->				

<%
	if(count  >0){
		
		int pageCount =count /pageSize + (count%pageSize == 0 ?  0 :1) ; //카우터링 숫자를 얼마까지 보여줄건지 결정
		
		//시작 페이지 숫자를 설정
		int startPage =1;
		
		if(currentPage %10 !=0){
			startPage =(int)(currentPage/10)*10+1;
		}else{
			startPage =((int)(currentPage/10)-1)*10+1;
		}
		
		int pageBlock=10;//카운터링 처리 숫자
		int endPage =startPage+pageBlock-1;//화면에 보여질 페이지의 마지막 숫자
		if(endPage > pageCount) endPage =pageCount;
		
		//이전이라는 링크를 만들건지 파악
		if(startPage >10){
		
%>
	<a href="BoardList.jsp?pageNum=<%= startPage-10 %>">[이전]</a>


 <%	
		}
 	 //페이징 처리
 	 for(int i=startPage; i<=endPage; i++){
%>
	<a href="BoardList.jsp?pageNum=<%= i %>">[<%= i %>]</a>
	
<% 		 
 	 }    
     //다음 이라는 링크를 만들건지 파악
  	 if(endPage < pageCount){
  %>		 
  	 <a href="BoardList.jsp?pageNum=<%= startPage +10 %>">[다음]</a>
				
<%		}
			
	}
%>



				
				
				</td>
			</tr>
		</table>
		</div>
	
	</div>
</div>


<jsp:include page="Bottom.jsp"/>
</body>
</html>





 

 

 

class BoardDAO

	//모든 게시글을 리턴해주는 
	public Vector<BoardBean> getAllBoard(int start, int end){		
		//리넡할 객체 선언
		Vector<BoardBean> v =new Vector<>();
		getCon();
		try{
			//쿼리 준비
			String sql ="select *  from "
					+ " (select A.* , Rownum Rnum from (select * from board order by ref desc, re_step asc) A ) "
					+ " where Rnum >= ? and Rnum <= ?";
					
			//쿼리를 실행할객체 선언
			pstmt =con.prepareStatement(sql);
			//쿼리실행 후 결과 저장
			pstmt.setInt(1, start);
			pstmt.setInt(2, end);
			rs=pstmt.executeQuery();
			//데이터 개수가 몇개인지 모르기에 반복문을 이용하여 데이터를 추출
			while(rs.next()){
				//데이터를 패키징( 가방  = Boardbean 클래스를 이용)해줌
				BoardBean bean =new BoardBean();
				bean.setNum(rs.getInt("num"));
				bean.setWriter(rs.getString("WRITER"));
				bean.setEmail(rs.getString("EMAIL"));
				bean.setSubject(rs.getString("SUBJECT"));
				bean.setPassword(rs.getString("PASSWORD"));
				bean.setReg_date(rs.getDate("REG_DATE").toString());
				bean.setRef(rs.getInt("ref"));
				bean.setRe_step(rs.getInt("RE_STEP"));
				bean.setRe_level(rs.getInt("RE_LEVEL"));
				bean.setReadcount(rs.getInt("READCOUNT"));
				bean.setContent(rs.getString("CONTENT"));
				//패키징한 데이터를 벡터에 저장
				v.add(bean);
			}
			
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			//자원 반납
			closed();
		}
		return v;
	}



//전체 글의 갯수를 리턴하는 메소드
	public int getAllCount(){
		getCon();
		//게시글 전체수를 저장하는 변수
		int count =0;
		try{
			//쿼리준비
			String sql ="select count(*) from board";
			//쿼리를 실행할 객체 선언
			pstmt = con.prepareStatement(sql);
			//쿼리 실행 후 결과를 리턴
			rs=pstmt.executeQuery();
			if(rs.next()){
				count =rs.getInt(1);
			}
			con.close();
		}catch(Exception e){
			e.printStackTrace();
		}
		return count;
	}
	


 

 

동영상 강좌와 다르게  모바일 적용이 가능한 반응형 부트스트랩을 사용하였다.

여기서는  jsp 를 배우는 강좌 이기 때문에 html 적 요소에는 비중있게 생각 하지 않아도 될 것이다.

 

또한, 일부 자바 코드는 제 입맛에 맞게 변경 하였습니다.

혹시, 이 강의를 들으면서 제 글을 읽고 소스코드를 참조하는 수강생이 있다면 동영상의 코드와 다르다고 생각지 마세요. 대부분 동여상 내용과 같으니 학습에 도움이 될거라 생각 합니다.

소스 :  https://github.com/braverokmc79/jsp_sin

 

 

유튜브 동영상 출처 :

소프트캠퍼스

강사 : 신형섭(잭임연구원)

저작권 : (주)소프트캠퍼스 http://www.softcampus.co.kr 더많은 무료 강의는 사이트에서 확인하실수 있습니다.

 

 

 

about author

PHRASE

Level 60  라이트

얼굴을 높이 쳐들려고 하지 않는 젊은이는 발 밑만 내려다보고 사는 사람이 될 것이다. 하늘 높이 비약하려고 하지 않는 정신 상태를 가진 사람은 땅바닥만 기어다니는 운명을 면치 못할 것이다. -디즈레일리

댓글 ( 4)

댓글 남기기

작성