0
 19   2   1
  View Articles

Name  
   손병목  (2003-05-05 22:07:14, Hit : 53766, Vote : 1622)
Homepage  
   http://www.itmembers.net
Subject  
   게시판 실습(9) - 글 목록 보기 소스(list.jsp)
글 목록 보기 프로그램(list.jsp) 소스입니다.
중간중간 주석을 달아놓긴 했으나 바로 이해하기에는 좀 무리일 것 같구요,
다음 시간부터 조금씩 나눠서 설명드리겠습니다.

  1. 〈!--
  2. ■ 파  일  명 : list.jsp
  3. ■ 작  성  자 : 손병목 (www.itmembers.net)
  4. ■ 최초작성일 : 2003.3.16(일)
  5. ■ 최종수정일 : 2003.3.20(목)
  6. ■ www.itmembers.net의 JSP 게시판 만들기 강좌를 위한 소스입니다.
  7. --〉

  8. 〈%@ page language="java" import="java.sql.*" contentType="text/html;charset=KSC5601" %〉
  9. 〈%@ include file="conn_db.jsp" %〉

  10. 〈%

  11. String s_mail_addr; // 메일 주소가 있을 경우 작성자 이름에 메일 주소를 링크할 때 사용
  12. String s_subject, s_name, s_email, s_sql;
  13. int i_number, i_count;

  14. int i_cur_num=0, i_total_no=0, i_total_page=0; // 가상 글 번호
  15. int i_page_num = 10; // 한 화면에 보여줄 페이지 링크 갯수 -〉 블록
  16. int i_list_num = 10 ; // 한 페이지에 보여줄 게시물의 수
  17. int i_total_block, i_block;
  18. int i_first, i_last, i_block_prev, i_block_next, i_page_link;
  19. int i_page, i_prev, i_next;
  20. String s_page, s_writetime ;

  21. s_page = request.getParameter("page"); // list.jsp?page=3 과 같이 넘어온 값 "3"을 넘겨받음.
  22. if(s_page==null) s_page="1"; // 그냥 list.jsp로 했을 경우
  23. i_page = Integer.parseInt(s_page);

  24. int i_offset = i_list_num*(i_page-1); //한 페이지의 시작 글 번호(i_listnum 수만큼 나누었을 때 시작하는 글의 번호)

  25. %〉


  26. 〈html〉
  27. 〈head〉
  28. 〈meta http-equiv=content-type content=text/html; charset=euc-kr〉
  29. 〈title〉JSP 게시판 - 글목록보기〈/title〉
  30. 〈STYLE TYPE=text/css〉
  31. BODY,TD,SELECT,input,DIV,form,TEXTAREA,center,option,pre,i_blockquote {font-family:굴림;font-size:9pt;color:#555555;}
  32. A:link    {color:black;text-decoration:none;}
  33. A:visited {color:black;text-decoration:none;}
  34. A:active  {color:black;text-decoration:none;}
  35. A:hover   {color:gray; text-decoration:none;}
  36. 〈/STYLE〉
  37. 〈/head〉
  38. 〈body background=./images/body_bg.gif〉
  39. 〈img src=./images/maintitle.gif〉
  40. 〈table border=1 cellspacing=0 width=680 bordercolordark=white bordercolorlight=#999999〉
  41.     〈tr〉
  42.         〈td width=30 bgcolor=#CCCCCC〉
  43.             〈p align=center〉no〈/p〉
  44.         〈/td〉
  45.         〈td bgcolor=#CCCCCC width=490〉
  46.             〈p align=center〉subject〈/p〉
  47.         〈/td〉
  48.         〈td width=60 bgcolor=#CCCCCC〉
  49.             〈p align=center〉name〈/p〉
  50.         〈/td〉
  51.         〈td width=70 bgcolor=#CCCCCC〉
  52.             〈p align=center〉date〈/p〉
  53.         〈/td〉
  54.         〈td width=30 bgcolor=#CCCCCC〉
  55.             〈p align=center〉hit〈/p〉
  56.         〈/td〉
  57.     〈/tr〉

  58. 〈%

  59. try {

  60.         rs=stmt.executeQuery("select count(number) from bbs");
  61.         if(rs.next()) {
  62.                 i_total_no=rs.getInt(1);  //총 글수
  63.         }

  64.         if(i_total_no%i_list_num==0) { // 전체 글 수를 페이지당 글 수로 나눈 값의 올림 값 = 전체 페이지 수를 구합니다.
  65.                 i_total_page = i_total_no/i_list_num;
  66.         } else {
  67.                 i_total_page = (i_total_no/i_list_num)+1; // 올림 수 구하기
  68.         }

  69.         i_cur_num = i_total_no - i_list_num*(i_page-1); // 현재 글의 가상 번호(실제 테이블의 number 값과는 다릅니다.)

  70.         s_sql = "select number,subject,name,from_unixtime(writetime,'%Y/%m/%d'),count,email from bbs order by number desc limit "+i_offset+","+i_list_num;  
  71.         // 목록 조회를 위한 SQL 문

  72.         rs = stmt.executeQuery(s_sql); // 쿼리문 실행 결과 값을 담을 객체

  73.         while(rs.next()) {
  74.                 i_number = rs.getInt(1);
  75.                 s_subject = rs.getString(2);
  76.                 s_name = rs.getString(3);
  77.                 s_writetime = rs.getString(4);
  78.                 i_count = rs.getInt(5);
  79.                 s_email = rs.getString(6);

  80.                 if(!s_email.equals("")) {
  81.                         s_mail_addr="〈a href=mailto:"+s_email+"〉"+s_name+"〈/a〉";
  82.                 } else {
  83.                         s_mail_addr=s_name;
  84.                 }

  85. %〉

  86.     〈tr〉
  87.         〈td width=30〉
  88.             〈p align=center〉〈%=i_cur_num %〉〈/p〉
  89.         〈/td〉
  90.         〈td width=490〉
  91.             〈a href="view.jsp?page=〈%= i_page %〉&number=〈%= i_number %〉"〉〈%=s_subject %〉〈/a〉
  92.         〈/td〉
  93.         〈td width=60〉
  94.             〈p align=center〉〈%=s_mail_addr %〉〈/p〉
  95.         〈/td〉
  96.         〈td width=70〉
  97.             〈p align=center〉〈%=s_writetime %〉〈/p〉
  98.         〈/td〉
  99.         〈td width=30〉
  100.             〈p align=center〉〈%=i_count %〉〈/p〉
  101.         〈/td〉
  102.     〈/tr〉

  103. 〈%

  104.                 i_cur_num --;

  105.         } //while문 닫음

  106.         stmt.close(); // 인클루드 파일(db_conn.jsp)에서 생성한 stmt 닫기
  107.         Conn.close(); // 인클루드 파일(db_conn.jsp)에서 생성한 Conn 닫기

  108. } catch (Exception e) {
  109.                 out.println(e);
  110. }

  111. %〉

  112.     〈tr〉
  113.         〈td width=100% colspan=5〉


  114. 〈%
  115. /*************************************
  116. *페이지 링크
  117. **************************************/

  118. if (i_total_page%i_page_num==0) { // 전체 블록의 수 : 전체 페이지 수를 한 화면에 보이는 페이지 수로 나눔
  119.         i_total_block = i_total_page/i_page_num;
  120. } else {
  121.         i_total_block = (i_total_page/i_page_num)+1;
  122. }

  123. if (i_page%i_page_num==0) {
  124.         i_block = i_page/i_page_num; // 현재 블록의 번호 :
  125. }
  126.         else {
  127.         i_block = (i_page/i_page_num)+1;
  128. }

  129. i_first = (i_block-1)*i_page_num; // 현재 블록이 시작하는 첫 페이지
  130. i_last = i_block*i_page_num; // 현재 블록의 끝 페이지

  131. if(i_block 〉= i_total_block) {
  132.         i_last = i_total_page;
  133. }

  134. out.println("〈p align=center〉");

  135. if(i_block 〉1) {
  136.         i_block_prev = i_first -1;
  137.         out.println("〈a href='list.jsp?page=1'〉[처음]〈/a〉 ");
  138.         out.println("〈a href='list.jsp?page="+i_block_prev+"'〉["+i_page_num+"개 앞]〈/a〉");
  139. }

  140. if(i_page〉1) {
  141.         i_prev = i_page-1;
  142.         out.println("〈a href='list.jsp?page="+i_prev+"'〉[이전]〈/a〉         ");
  143. }

  144. for (i_page_link=i_first+1;i_page_link〈=i_last;i_page_link++) {
  145.         if(i_page_link==i_page) {
  146.                 out.println("〈font color=green〉〈b〉"+i_page_link+"〈/b〉〈/font〉");
  147.         } else {
  148.                 out.println("〈a href='list.jsp?page="+i_page_link+"'〉["+i_page_link+"]〈/a〉");
  149.         }
  150. }

  151. if (i_total_page 〉 i_page) {
  152.         i_next = i_page+1;
  153.         out.println(" 〈a href='list.jsp?page="+i_next+"'〉[다음]〈/a〉");
  154. }

  155. if (i_block 〈 i_total_block) {
  156.         i_block_next = i_last + 1;
  157.         out.println("〈a href='list.jsp?page="+i_block_next+"'〉["+i_page_num+"개 뒤]〈/a〉 ");
  158.         out.println("〈a href='list.jsp?page="+i_total_page+"'〉[마지막]〈/a〉 ");
  159. }


  160. %〉
  161.         〈/td〉
  162.     〈/tr〉
  163.     〈tr〉
  164.         〈td width=100% colspan=5〉
  165.             〈p align=center〉〈a href='write.html'〉[글쓰기]〈/a〉〈/p〉
  166.         〈/td〉
  167.     〈/tr〉
  168. 〈/table〉
  169. 〈/body〉
  170. 〈/html〉

올 들어 가장 더웠다고 하네요.
오늘은 어린이날, 동주아빠 손병목이었습니다.

Next
   게시판 실습(8) - 글 목록 페이지 모양 만들기

손병목


Copyright 1999-2021 Zeroboard / skin by Zetyx