### : 목차 구분 기호
--- : 목차 내에 항목 구분 기호
@@@ : 태그 용도 
,,, : 같은 항목 내에 구분 기호

목차
1. 이론 및 정보
2. 설정 및 그 밖에
3. 소스코드 또는 실습
4. 과제

###################################
1. 이론 및 정보
-----------------------------------
* 페이징
많은 양의 데이터를 나눠서 보여주려는 기법
하나의 jsp 페이지에 여러개의 페이지를 묶은 것을 block
----------------------------------- 
9. 게시판(https://github.com/netsong7/board.gif)
(1) 빈을 이용한 첫번째 버전
(2) 페이징 기능 구현
(3) 답변기능
          1) 두 개의 필드로 구현하는 방법(pos, depth)
                    - pos를 기준으로 오름차순으로 정렬
                    - 새로 입력되는 데이터는 무조건 pos와 depth는 0으로 입력
                    - 답변글을 입력할 때 부모보다 큰 pos는 1씩 증가한다.
                    - 답변글의 pos는 부모글의 pos에 1을 더한다.

                    create table tblreply(
                         num          number,
                         subject      varchar2(10),
                         pos          number,
                         depth        number
                    );

                    update tblreply set pos = pos + 1;
                    insert into tblreply values(1,'aaa',0,0);

                    update tblreply set pos = pos + 1;
                    insert into tblreply values(2,'bbb',0,0);

                    update tblreply set pos = pos + 1;
                    insert into tblreply values(3,'ccc',0,0);

                    select * from tblreply order by pos asc;

                    update tblreply set pos = pos + 1 where pos > 1;
                    insert into tblreply values(4,'bbb의 답변',2,1);

          2) 세 개의 필드로 구현하는 방법(group, seq, level)
                    - group은 중복되지 않으면서 공백이 생기지 않을 예정, 같은 글임을 구분하기 위해 있음
                    - level은 같은 크기로 들여쓰기를 위해, 같은 레벨임을 표시
                    - 특정 글에 답변을 달기 위해서는 부모글의 seq,level를 그대로 가져와서 ++ 해야 하는데 그 전에
                      부모의 seq 보다 큰 seq는 ++ 시키고(이때 같은 그룹안에서라는 조건이 있음) 자신의 seq,level을 ++ 시킨다
                      
                    insert into tblreply values(1, 'aaa', 1,0,0);

                    insert into tblreply values(2, 'bbb', 2,0,0);

                    insert into tblreply values(3, 'ccc', 3,0,0);
                    
                    update tblreply set seq=seq+1 where group = 1 and seq > 0;
                    insert into tblreply values(4, 'aaa의 답변', 1,1,1);

                    update tblreply set seq=seq+1 where group = 1 and seq > 0;
                    insert into tblreply values(5, 'aaa의 답변2', 1,1,1);

                    select * from tblreply order by group desc, seq;

(4) 자료실 구현
----------------------------------- 
----------------------------------- 
###################################
2. 설정 및 그 밖에
-----------------------------------
----------------------------------- 
###################################
3. 소스코드 또는 실습 
-----------------------------------
3-1
Workspace : ~\JSP\EclipseWork
/BoardApp/WebContent/v0/List.jsp

<%@page import="java.util.Vector"%>
<%@page import="bean.v0.BoardDto"%>
<%@ page contentType="text/html;charset=euc-kr" %>
<html>
<link href="style.css" rel="stylesheet" type="text/css">
<script>
     function check(){
          if(document.search.keyWord.value == ""){
               alert("검색어를 입력하세요.");
               document.search.keyWord.focus();
               return;
          }
          document.search.submit();
     }
     
     function read(num) {
          document.read.num.value = num;
          document.read.submit();
     }
</script>
<body>
<jsp:useBean id="dao" class="bean.v0.BoardDao"/>
<%
     String keyField = request.getParameter("keyField");
     String keyWord = request.getParameter("keyWord");
     if(keyField == null){
          keyField = "name";
          keyWord = "";
     }
     
     if(request.getParameter("relaod")!=null){
          if(request.getParameter("relaod").equals("true")){
               keyWord = "";
          }
     }
     Vector list = dao.getBoardList(keyField, keyWord);
     
%>
<center><br>
<h2>JSP Board</h2>

<table align=center border=0 width=80%>
<tr>
     <td align=left>Total :  Articles(
          <font color=red>  1 / 10 Pages </font>)
     </td>
</tr>
</table>

<table align=center width=80% border=0 cellspacing=0 cellpadding=3>
<tr>
     <td align=center colspan=2>
          <table border=0 width=100% cellpadding=2 cellspacing=0>
               <tr align=center bgcolor=#D0D0D0 height=120%>
                    <td> 번호 </td>
                    <td width=80%> 제목 </td>
                    <td> 이름 </td>
                    <td> 날짜 </td>
                    <td> 조회수 </td>
               </tr>
               <%
                    if(list.size() == 0){
                         // 등록된 글이 없습니다.
                    }
               %>
               <%
                    if(list.size() != 0){
                         for(int i=0;i<list.size();i++){
                              BoardDto dto = (BoardDto)list.get(i);     
                    
               %>
               <tr align=center height=120%>
                    <td><%=dto.getNum()%></td>
                    <td><a href="javascript:read('<%=dto.getNum()%>')"><%=dto.getSubject()%></a></td>
                    <td> <%=dto.getName()%> </td>
                    <td> <%=dto.getRegdate()%> </td>
                    <td> <%=dto.getCount()%> </td>
               </tr>
               <%          }
                    }%>
          </table>
     </td>
</tr>
<tr>
     <td><BR><BR></td>
</tr>
<tr>
     <td align="left">Go to Page </td>
     <td align=right>
          <a href="Post.jsp">[글쓰기]</a>
          <a href="List.jsp?reload=true">[처음으로]</a>
     </td>
</tr>
</table>
<BR>
<form action="List.jsp" name="search" method="post">
     <table border=0 width=527 align=center cellpadding=4 cellspacing=0>
     <tr>
          <td align=center valign=bottom>
               <select name="keyField" size="1">
                    <option value="name" <%if(keyField.equals("name")){%>selected="selected"<%}%>> 이름</option>
                    <option value="subject" <%if(keyField.equals("subject")){%>selected="selected"<%}%>> 제목</option>
                    <option value="content" <%if(keyField.equals("content")){%>selected="selected"<%}%>> 내용</option>
               </select>

               <input type="text" size="16" name="keyWord" >
               <input type="button" value="찾기" onClick="check()">
               <input type="hidden" name="page" value= "0">
          </td>
     </tr>
     </table>
</form>
<form name="read" metho="post" action="Read.jsp">
     <input type="hidden" name="num" />
     <input type="hidden" name="keyWord" value="<%=keyWord%>" />
     <input type="hidden" name="keyField" value="<%=keyField%>" />
</form>
</center>
</body>
</html>
-----------------------------------  
3-2
Workspace : ~\JSP\EclipseWork
/BoardApp/WebContent/v0/Read.jsp

<%@page import="bean.v0.BoardDto"%>
<%@ page contentType="text/html; charset=EUC-KR"%>
<html>
<head><title>JSPBoard</title>
<link href="style.css" rel="stylesheet" type="text/css">
<script>
     function list() {
          document.list.submit();
     }
</script>
</head>
<body>
<br><br>
<jsp:useBean id="dao" class="bean.v0.BoardDao"/>
<%
     int num = Integer.parseInt(request.getParameter("num"));
     String keyField = request.getParameter("keyField");
     String keyWord = request.getParameter("keyWord");
     
     BoardDto dto = dao.getBoard(num,"read");
%>
<table align=center width=70% border=0 cellspacing=3 cellpadding=0>
<tr>
  <td bgcolor=9CA2EE height=25 align=center class=m>글읽기</td>
</tr>
<tr>
  <td colspan=2>
   <table border=0 cellpadding=3 cellspacing=0 width=100%> 
    <tr> 
     <td align=center bgcolor=#dddddd width=10%> 이 름 </td>
     <td bgcolor=#ffffe8><%=dto.getName()%></td>
     <td align=center bgcolor=#dddddd width=10%> 등록날짜 </td>
     <td bgcolor=#ffffe8><%=dto.getRegdate()%></td>
     </tr>
    <tr>
     <td align=center bgcolor=#dddddd width=10%> 메 일 </td>
     <td bgcolor=#ffffe8 ><%=dto.getEmail()%></td> 
     <td align=center bgcolor=#dddddd width=10%> 홈페이지 </td>
     <td bgcolor=#ffffe8 ><a href="http://<%=dto.getHomepage()%>" target="_new">
                                <%=dto.getHomepage()%></a></td> 
     </tr>
    <tr> 
     <td align=center bgcolor=#dddddd> 제 목</td>
     <td bgcolor=#ffffe8 colspan=3><%=dto.getSubject()%></td>
   </tr>
   <tr> 
    <td colspan=4><%=dto.getContent().replace("\n", "<br/>")%></td>
   </tr>
   <tr>
    <td colspan=4 align=right><%=dto.getName()%>
     로 부터 글을 남기셨습니다./  조회수 : <%=dto.getCount()%>
    </td>
   </tr>
   </table>
  </td>
</tr>
<tr>
  <td align=center colspan=2> 
     <hr size=1>
     [ <a href="javascript:list()">목 록</a> | 
     <a href="Update.jsp?num=<%=dto.getNum()%>">수 정</a> |
     <a href="Delete.jsp?num=<%=dto.getNum()%>">삭 제</a> ]<br>
  </td>
</tr>
</table>
<form name="list" method="post" action="List.jsp">
     <input type="hidden" name="keyWord" value="<%=keyWord%>" />
     <input type="hidden" name="keyField" value="<%=keyField%>" />
</form>
</body>
</html>
-----------------------------------  
3-3
Workspace : ~\JSP\EclipseWork
/BoardApp/WebContent/v1/List.jsp

<%@page import="java.util.Vector"%>
<%@page import="bean.v0.BoardDto"%>
<%@ page contentType="text/html;charset=euc-kr" %>
<html>
<link href="style.css" rel="stylesheet" type="text/css">
<script>
     function check(){
          if(document.search.keyWord.value == ""){
               alert("검색어를 입력하세요.");
               document.search.keyWord.focus();
               return;
          }
          document.search.submit();
     }
     
     function read(num) {
          document.read.num.value = num;
          document.read.submit();
     }
</script>
<body>
<jsp:useBean id="dao" class="bean.v0.BoardDao"/>
<%!
     int totalRecord = 0;          // 전체 글의 갯수
     int numPerPage = 5;               // 한 페이지당 보여질 글의 갯수
     int pagePerBlock = 3;          // 한 블럭당 페이지 수 
     int totalPage = 0;               // 전체 페이지 갯수
     int totalBlock = 0;               // 전체 블럭 수
     int nowPage = 0;               // 현재 페이지 번호
     int nowBlock = 0;               // 현재 블럭 번호
     int beginPerPage = 0;          // 페이지당 시작 번호, 똑같은 글이 중복되서 보여주는 것을 방지
%>
<%
     String keyField = request.getParameter("keyField");
     String keyWord = request.getParameter("keyWord");
     if(keyField == null){
          keyField = "name";
          keyWord = "";
     }
     
     if(request.getParameter("relaod")!=null){
          if(request.getParameter("relaod").equals("true")){
               keyWord = "";
          }
     }
     Vector list = dao.getBoardList(keyField, keyWord);
     
     // 페이징 기능 구현
     totalRecord = list.size();
     totalPage = (int)Math.ceil((double)totalRecord/(double)numPerPage);
     totalBlock = (int)Math.ceil((double)totalPage/(double)pagePerBlock);
     if(request.getParameter("nowPage") != null){
          nowPage = Integer.valueOf(request.getParameter("nowPage"));
     }
     if(request.getParameter("nowBlock") != null){
          nowBlock = Integer.valueOf(request.getParameter("nowBlock"));
     }
     beginPerPage = nowPage * numPerPage;
     
     totalBlock = (int)Math.ceil((double)totalPage/pagePerBlock);
%>
<center><br>
<h2>JSP Board</h2>

<table align=center border=0 width=80%>
<tr>
     <td align=left>Total : <%=totalRecord%> Articles(
          <font color=red>  <%=nowPage+1%> / <%=totalPage%> Pages </font>)
     </td>
</tr>
</table>

<table align=center width=80% border=0 cellspacing=0 cellpadding=3>
<tr>
     <td align=center colspan=2>
          <table border=0 width=100% cellpadding=2 cellspacing=0>
               <tr align=center bgcolor=#D0D0D0 height=120%>
                    <td> 번호 </td>
                    <td width=80%> 제목 </td>
                    <td> 이름 </td>
                    <td> 날짜 </td>
                    <td> 조회수 </td>
               </tr>
               <%
                    if(list.size() == 0){
                         // 등록된 글이 없습니다.
                    }
               %>
               <%
                    if(list.size() != 0){
                         for(int i=beginPerPage;i<beginPerPage+numPerPage;i++){
                              if(i == totalPage)
                                   break; 
                              BoardDto dto = (BoardDto)list.get(i);     
                    
               %>
               <tr align=center height=120%>
                    <td><%=dto.getNum()%></td>
                    <td><a href="javascript:read('<%=dto.getNum()%>')"><%=dto.getSubject()%></a></td>
                    <td> <%=dto.getName()%> </td>
                    <td> <%=dto.getRegdate()%> </td>
                    <td> <%=dto.getCount()%> </td>
               </tr>
               <%          }
                    }%>
          </table>
     </td>
</tr>
<tr>
     <td><BR><BR></td>
</tr>
<tr>
     <td align="left">Go to Page 
     <%if(nowBlock > 0){%>
     <a href="List.jsp?nowBlock=<%=nowBlock-1%>&nowPage=<%=(nowBlock-1) * pagePerBlock%>">이전 <%=pagePerBlock%>개</a> :::&nbsp;&nbsp;
     <%}%>
     <%
          for(int i=0;i<pagePerBlock;i++){
               if(i+(nowBlock * pagePerBlock) == totalPage)
                    break;
          %>
               <a href="List.jsp?nowPage=<%=i+(nowBlock * pagePerBlock)%>&nowBlock=<%=nowBlock%>"/><%=i+1+(nowBlock * pagePerBlock)%></a>&nbsp;&nbsp;
          <%
          }
     %>
     <%if(totalBlock > nowBlock+1){%>
     &nbsp;&nbsp;::: <a href="List.jsp?nowBlock=<%=nowBlock+1%>&nowPage=<%=(nowBlock+1) * pagePerBlock%>">다음 <%=pagePerBlock%>개</a>
     <%}%>
     </td>
     <td align=right>
          <a href="Post.jsp">[글쓰기]</a>
          <a href="List.jsp?reload=true">[처음으로]</a>
     </td>
</tr>
</table>
<BR>
<form action="List.jsp" name="search" method="post">
     <table border=0 width=527 align=center cellpadding=4 cellspacing=0>
     <tr>
          <td align=center valign=bottom>
               <select name="keyField" size="1">
                    <option value="name" <%if(keyField.equals("name")){%>selected="selected"<%}%>> 이름</option>
                    <option value="subject" <%if(keyField.equals("subject")){%>selected="selected"<%}%>> 제목</option>
                    <option value="content" <%if(keyField.equals("content")){%>selected="selected"<%}%>> 내용</option>
               </select>

               <input type="text" size="16" name="keyWord">
               <input type="button" value="찾기" onClick="check()">
               <input type="hidden" name="page" value= "0">
          </td>
     </tr>
     </table>
</form>
<form name="read" metho="post" action="Read.jsp">
     <input type="hidden" name="num" />
     <input type="hidden" name="keyWord" value="<%=keyWord%>" />
     <input type="hidden" name="keyField" value="<%=keyField%>" />
</form>
</center>
</body>
</html>
----------------------------------- 
###################################
4. 과제
-----------------------------------
-----------------------------------
###################################
5. 과제 해결
-----------------------------------
-----------------------------------
###################################
6. 기타
----------------------------------- 
----------------------------------- 


'OpenFrameWork' 카테고리의 다른 글

오픈프레임워크_Day49  (0) 2015.05.22
오픈프레임워크_Day48  (0) 2015.05.21
오픈프레임워크_Day46  (0) 2015.05.19
오픈프레임워크_Day45  (0) 2015.05.18
오픈프레임워크_Day44  (0) 2015.05.15
,