네이버 클라우드 부트캠프/복습 정리

46일차 JSP [ 게시판 만들기 ]

유정♡ 2024. 4. 25. 18:15

DB설계 -> 자바빈 생성 -> server.xml에서 DBCP 환경설정 -> DAO클래스에 DB 연결 -> JSP 파일 폼 생성 (BoardForm.jsp) -> 폼에 입력한 값을 BoardWriterForm.jsp서버에 값 넘기기 (=폼에 쓴 내용을 자바빈즈에 저장하고 디비애도 삽입을 해야함) -> 

 

ref=글 re_step=대댓글 re_level=최신대댓글 / 

ref는 1은 가장 기존글 다음글2 그다음글3 ...

re_step은 원글은1 댓글은2 대댓글은3 대대댓글은4 ...

re_level을 일단 re_step이랑 똑같이 쓰고 최신꺼 설정할때 기존댓글에 +1을 더해줌 

번호     제목                     ref      re_step     re_level
1         배고파                     1             1                  1
2        공부한다                  2             1                  1
3        [re]나도 배고파        1             2                 3
4        [re]놀러가고싶은데   1             2                 2
---------------------------------------------------------------
2        공부한다                  2             1                  1 -> 원글중 ref가 가장 큰 값이 가장 최신글 ref같으면 (댓글먼저x) 원글먼저 
1         배고파                     1             1                  1
4        [re]놀러가고싶은데   1             2                 2 -> 나도배고파보다 최신댓글 
3        [re]나도 배고파        1             2                 3
번호     제목                     ref      re_step     re_level
1         파묘보고싶다           1             1                   1
2        [re]난 파묘봄           1             2                  2 -> 파묘보고싶다의 댓글
3             [re]재밌었어?     1             3                  3 -> 난 파묘봄의 대댓글 
---------------------------------------------------------------------
1         파묘보고싶다           1             1                   1
4        [re]난 파묘못봤어    1             2                  2 -> 파묘보고싶다의 난 파묘봄보다 최신 댓글 !! 그래서 순서가 바뀜
                                                                                     최신댓글이 re_level 2번으로 바뀌고 나머진 오름차순으로 밀림
2        [re]난 파묘봄           1             2                  3 -> 파묘보고싶다의 댓글
3             [re]재밌었어?     1             3                  4 -> 난 파묘봄의 대댓글 

 

1) DB 설계 -> board table 생성 

    reg_date - 등록 날짜 

    ref - 답글이라는 뜻 게시판 만들 때 사용 됨 re_step 대댓글 , re_level 대댓글도 댓글과 관련 된 것 원글에다한건지 ...

    readcount - 조회수

    content - 게시판 내용

create table board(
	num int primary key auto_increment,
    writer varchar(20),
    email varchar(20),
    subject varchar(20),
    password varchar(10),
    reg_date date,
    ref int, 
    re_step int,
    re_level int,
    readcount int,
    content varchar(500));

 

2) Bean package 생성 -> BoardBean 클래스 생성 -> 필드 선언 ( date는 String으로 ) -> Getter & Setter 생성 

package bean;

public class BoardBean {
	
	private int num;
	private String writer;
	private String email;
	private String subject;
	private String password;
	private String reg_date;
	private int ref;
	private int re_step;
	private int re_level;
	private int readcount;
	private String content;
	
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getReg_date() {
		return reg_date;
	}
	public void setReg_date(String reg_date) {
		this.reg_date = reg_date;
	}
	public int getRef() {
		return ref;
	}
	public void setRef(int ref) {
		this.ref = ref;
	}
	public int getRe_step() {
		return re_step;
	}
	public void setRe_step(int re_step) {
		this.re_step = re_step;
	}
	public int getRe_level() {
		return re_level;
	}
	public void setRe_level(int re_level) {
		this.re_level = re_level;
	}
	public int getReadcount() {
		return readcount;
	}
	public void setReadcount(int readcount) {
		this.readcount = readcount;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	
}

 

3) 이 상태에서 BoardJSP project File을 Run 하면 오류가 뜨지만 Servers File에 server.xml에 BoardJSP에 대한 서버가 저장 됨

     밑에 코드에서 프로젝트명, DB 정보 수정 후 server.xml에 DBCP 환경 설정

      <Context docBase="BoardJSP" path="/BoardJSP" reloadable="true" source="org.eclipse.jst.jee.server:BoardJSP">
        <Resource auth="Container" driverClassName="com.mysql.cj.jdbc.Driver"
            name="jdbc/pool" password="00000000" type="javax.sql.DataSource"
            url="jdbc:mysql://localhost:3306/yujung" username="root"/>
     </Context>

 

4) bean package에 BoardDAO 클래스 생성 -> DB연결 작업 (DBCP)

     lookup뒤에 들어오는 name 값은 sever.xml에 name 값이랑 똑같음 !! => "java:comp/env/jdbc/pool"

package bean;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class BoardDAO {

	Connection con;
	PreparedStatement pstmt;
	ResultSet rs;

	public void getCon() { // DB에 연결하는 작업 (DBCP)

		try {

			Context init = new InitialContext();
			DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/pool");
			con = ds.getConnection();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

5) JSP 파일에 폼 생성 (이때 JSP 파일은 항상 webapp에 위치해야 함) -> BoardForm.jsp 파일 생성 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<form action="BoardWriteForm.jsp" method="post">
	<table width="600" border="1"> <!-- table width가 600이므로 tr&td width도 600안으로 맞춰줘야 함 -->
		<tr height="40">
			<td align="center" width="150">작성자</td>
			<td width="450" align="center"><input type="text" name="writer" size="50"></td>
		</tr>
		
		<tr height="40">
			<td align="center" width="150">제목</td>
			<td width="450" align="center"><input type="text" name="subject" size="50"></td>
		</tr>
		
		<tr height="40">
			<td align="center" width="150">이메일</td>
			<td width="450" align="center"><input type="email" name="email" size="50"></td>
		</tr>
		
		<tr height="40">
			<td align="center" width="150">비밀번호</td>
			<td width="450" align="center"><input type="password" name="password" size="50"></td>
		</tr>
		
		<tr height="40">
			<td align="center" width="150">글내용</td>
			<td width="450" align="center"><textarea rows="10" cols="60" name="content"></textarea></td>
		</tr>
		
		<tr height="40">
			<td align="center" colspan="2">
			    <input type="submit" value="글쓰기">
			    <input type="reset" value="재작성">
			    <button onclick="location.href='BoardList.jsp'">전체글보기</button>
			</td>
		</tr>
	</table>
</form>
</body>
</html>

6) BoardWriteForm.jsp JSP 파일 생성 -> 폼에서 넘어온 정보 서버에 저장 -> 폼에 쓴 내용을 자바빈즈에 저장하고 디비에도 삽입

<%@page import="bean.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<%
	request.setCharacterEncoding("UTF-8");
%>
	<jsp:useBean id="boardbean" class="bean.BoardBean">
		<jsp:setProperty property="*" name="boardbean" />
	</jsp:useBean>

<%
	BoardDAO bdao=new BoardDAO();
	bdao.insertBoard(boardbean);
	
	response.sendRedirect("BoardList.jsp"); //글쓰기 한 후 바로 글쓴 목록 보기 위해
%>



</body>
</html>

 

7) BoardDAO.java 파일에 insertBoard 쿼리문 작성 하기 

    num은 고정값이여서 바인드변수(=?)로 설정하지 않아도 됨. date는 현재날짜 now()함수 사용, 조회수는 0으로 설정

    bean으로부터 getWriter값 꺼내서 table에 insert

    댓글을 나타내는 ref, re_step, re_level은 int로 설정하고 변수로 가져옴 

댓글은 보통 최신댓글이 맨위에 먼저 뜸 ! 그걸 가져오기 위한 코드 !! 
String rsql="select max(ref) from board"; //가장 최신댓글을 찾아내는 쿼리문

pstmt=con.prepareStatement(rsql);
rs=pstmt.executeQuery();

if(rs.next()) {
         ref=rs.getInt(1)+1;
}
package bean;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class BoardDAO {

	Connection con;
	PreparedStatement pstmt;
	ResultSet rs;

	public void getCon() { // DB에 연결하는 작업 (DBCP)

		try {

			Context init = new InitialContext();
			DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/pool");
			con = ds.getConnection();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void insertBoard(BoardBean bean) {
		getCon();

		int ref=0;
		int re_step=1;
		int re_level=1;
		
		try {
			
			String rsql="select max(ref) from board"; //가장 최신댓글을 찾아내는 쿼리문 
			
			pstmt=con.prepareStatement(rsql);
			rs=pstmt.executeQuery();
			
			if(rs.next()) {
				ref=rs.getInt(1)+1;
			}
			
			// num은 고정값이여서 바인드변수(=?)로 설정하지 않아도 됨 , date는 현재날짜 now()로 설정 , 조회수는 0으로 설정
			String sql = "insert into board values(num,?,?,?,?,now(),?,?,?,0,?)";
			pstmt = con.prepareStatement(sql);

			pstmt.setString(1, bean.getWriter()); // bean으로부터 writer값 꺼내서 table에 insert
			pstmt.setString(2, bean.getEmail());
			pstmt.setString(3, bean.getSubject());
			pstmt.setString(4, bean.getPassword());
			pstmt.setInt(5, ref); // ref는 폼이없음 댓글 작업 ->
			pstmt.setInt(6, re_step);
			pstmt.setInt(7, re_level);
			pstmt.setString(8, bean.getContent());

			pstmt.executeUpdate();
			con.close();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

8) BoardList.jsp JSP 전체 게시글 파일 만들기 

<%@page import="bean.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<h2>전체 게시글</h2>
<%
	int count=0; //전체글 개수 알아내기 위해
	int number=0;
	
	BoardDAO bdao=new BoardDAO();
	count=bdao.getAllCount(); //전체 게시글 갯수 읽어온다

%>
</body>
</html>

 

9) BoardDAO.java 파일에 getAllCount 작성 하기 

	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;
	}

 

10) 다시 BoardList.jsp JSP 파일로 돌아와서 table 작성하기 (+vector를 활용하여 반복문으로 출력하기)

 

 

11) BoardIn.jsp JSP 파일 생성 -> 게시글 상세보기 작업(제목을 누르면 제목에 대한 글번호 알아내서 int num에 저장)

<%@page import="bean.BoardBean"%>
<%@page import="bean.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>

<%
	//게시글 상세보기 작업(제목을 누르면 제목에대한 글번호를 알아내서 int num에 저장)
	int num=Integer.parseInt(request.getParameter("num").trim()); 
	BoardDAO bdao=new BoardDAO();
	BoardBean bean = bdao.oneBoard(num); //한 게시물만 볼 거임 
	
%>
</body>
</html>

 

12) BoardDAO.java 파일에 oneBoard 작성 하기 - 조회수증가, 번호를 기준으로 한 게시글에 대한 정보 가져오기 

	public BoardBean oneBoard(int num) {
		// 조회수 증가, 번호를 기준으로 한 게시글에 대한 정보 가져오기
		BoardBean bean = new BoardBean();

		getCon();

		try {

			String readsql = "update board set readcount=readcount+1 where num=?";
			pstmt = con.prepareStatement(readsql);
			pstmt.setInt(1, num);

			pstmt.executeUpdate();

			String sql = "select * from board where num=?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, num);

			rs = pstmt.executeQuery();

			if (rs.next()) {
				bean.setNum(rs.getInt(1));
				bean.setWriter(rs.getString(2));
				bean.setEmail(rs.getString(3));
				bean.setSubject(rs.getString(4));
				bean.setPassword(rs.getString(5));
				bean.setReg_date(rs.getDate(6).toString());
				bean.setRef(rs.getInt(7));
				bean.setRe_step(rs.getInt(8));
				bean.setRe_level(rs.getInt(9));
				bean.setReadcount(rs.getInt(10));
				bean.setContent(rs.getString(11));
			}
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return bean;
	}

 

13) 다시 BoardIn.jsp JSP 파일로 돌아와서 table 작성하기 (댓글쓰기 버튼 만들기)

<%@page import="bean.BoardBean"%>
<%@page import="bean.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>

<%
	//게시글 상세보기 작업(제목을 누르면 제목에 대한 글번호를 알아내서 int num에 저장)
	int num = Integer.parseInt(request.getParameter("num").trim()); 
	BoardDAO bdao = new BoardDAO();
	BoardBean bean = bdao.oneBoard(num); // 한 게시물만 볼 거임 
%>

<h2>하나의 게시글</h2>
<table width="600" border="1">

	<tr height="40">
		<td width="120" align="center">번호</td> 
		<td width="120" align="center"><%= bean.getNum() %></td>
		<td width="120" align="center">조회수</td> 
		<td width="120" align="center"><%= bean.getReadcount() %></td>
	</tr>
	
	<tr height="40">
		<td width="120" align="center">작성자</td> 
		<td width="120" align="center"><%= bean.getWriter() %></td>
		<td width="120" align="center">작성날짜</td> 
		<td width="120" align="center"><%= bean.getReg_date() %></td>
	</tr>
	
	<tr height="40">
		<td width="120" align="center">이메일</td>
		<td width="480" colspan="3" align="center"><%= bean.getEmail() %></td> 
	</tr>
	
	<tr height="40">
		<td width="120" align="center">제목</td>
		<td width="480" colspan="3" align="center"><%= bean.getSubject() %></td> 
	</tr>
	
	<tr height="40">
		<td width="120" align="center">글내용</td>
		<td width="480" colspan="3" align="center"><%= bean.getContent() %></td> 
	</tr>
	
	<tr height="40">
		<td width="200" align="center" colspan="4" >
		<input type="button" value="댓글쓰기"
         onclick="location.href='ReWriteForm.jsp?num=<%=bean.getNum() %>&ref=<%=bean.getRef() %>&re_step=<%=bean.getRe_step() %>&re_level=<%=bean.getRe_level() %>'">
         
        <input type="button" value="수정" onclick="location.href='UpdateForm.jsp?num=<%=bean.getNum()%>'"> 
        <input type="button" value="삭제" onclick="location.href='DeleteForm.jsp?num=<%=bean.getNum()%>'"> 
        <input type="button" value="목록" onclick="location.href='BoardList.jsp'"> 
	</tr>
</table>
</body>
</html>

 

14) UpdateFrom.jsp JSP 파일 작성 

<%@page import="bean.BoardBean"%>
<%@page import="bean.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
	<h2>게시글 수정</h2>
	<%
		int num=Integer.parseInt(request.getParameter("num"));
	
		BoardDAO dao=new BoardDAO();
		BoardBean bean=dao.oneUpdateBoard(num);
	%>
</body>
</html>

15) BoardDAO.java 파일에 oneUpdateBoard 작성 하기 

	public BoardBean oneUpdateBoard(int num) {
		BoardBean bean = new BoardBean();
		getCon();

		try {
			
			String sql = "select * from board where num=?";
			pstmt = con.prepareStatement(sql);

			pstmt.setInt(1, num);

			rs = pstmt.executeQuery();
			
			if (rs.next()) {
				bean.setNum(rs.getInt(1));
				bean.setWriter(rs.getString(2));
				bean.setEmail(rs.getString(3));
				bean.setSubject(rs.getString(4));
				bean.setPassword(rs.getString(5));
				bean.setReg_date(rs.getDate(6).toString());
				bean.setRef(rs.getInt(7));
				bean.setRe_step(rs.getInt(8));
				bean.setRe_level(rs.getInt(9));
				bean.setReadcount(rs.getInt(10));
				bean.setContent(rs.getString(11));
			}
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return bean;
	}

 

 

16) 다시 UpdateForm.jsp JSP 파일로 돌아와서 table 작성하기 

<%@page import="bean.BoardBean"%>
<%@page import="bean.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
	<h2>게시글 수정</h2>
	<%
		int num=Integer.parseInt(request.getParameter("num"));
	
		BoardDAO dao=new BoardDAO();
		BoardBean bean=dao.oneUpdateBoard(num);
	%>
	<form action="UpdateProc.jsp" method="post">
		<table width="600" border="1">
		
			<tr height="40">
				<td align="center" width="150">작성자</td>
				<td align="center" width="150"><%=bean.getWriter() %></td>
				<td align="center" width="150">작성일</td>
				<td align="center" width="150"><%=bean.getReg_date() %></td>
			</tr>
			
			<tr height="40">
				<td align="center" width="150">제목</td>
				<td width="150" colspan="3">&nbsp;
				<input type="text" name="subject" value="<%=bean.getSubject() %>">
				</td>
			</tr>
			
			<tr height="40">
				<td align="center" width="150">비밀번호</td>
				<td width="150" colspan="3">&nbsp;
				<input type="password" name="password" value="<%=bean.getPassword() %>">
				</td>
			</tr>
			
			<tr height="40">
				<td align="center" width="150">글내용</td>
				<td width="150" colspan="3">&nbsp;
				<textarea rows="10" cols="50" name="content">
					<%=bean.getContent() %>
				</textarea>
				</td>
			</tr>	
			
			<tr height="40">
				<td width="150" colspan="4">&nbsp;
					<input type="hidden" name="num" value="<%=bean.getNum() %>">
					<input type="submit" value="글수정">&nbsp;
					 <input type="button" value="전체글보기" onclick="location.href='BoardList.jsp'">
				</td>
			</tr>	
							
		</table>
	</form>
</body>
</html>

 

17) UpdateProc.jsp JSP 파일 작성 

<%@page import="bean.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
<%
	request.setCharacterEncoding("UTF-8");
%>

<jsp:useBean id="boardbean" class="bean.BoardBean">
	<jsp:setProperty property="*" name="boardbean"/>
</jsp:useBean>

<%
	BoardDAO bdao=new BoardDAO();
	String pass=bdao.getPass(boardbean.getNum()); //hidden으로 넘긴 값 받는다 
	//앞에pass는 DB에들어잇는값 / getPass는 폼에입력한값 
	if(pass.equals(boardbean.getPassword())) {
		bdao.updateBoard(boardbean);
		response.sendRedirect("BoardList.jsp");
	}
	else{
%>

	<script type="text/javascript">
		alert("비밀번호가 일치하지 않는다. 다시 입력해라");
		history.go(-1);
	</script>
<%
	}
%>
</body>
</html>

 

18) BoardDAO.java 파일에 getPass와 updateBoard 작성 하기 

 

	public String getPass(int num) {
		String pass = "";
		getCon();

		try {
			String sql = "select password from board where num=?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, num);

			rs = pstmt.executeQuery();

			if (rs.next()) {
				pass = rs.getString(1);
			}
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return pass;
	}
    	
	public void updateBoard(BoardBean bean) {
		getCon();
		
		try {
			
			String sql="update board set subject=?,content=?, where num=?";
			pstmt=con.prepareStatement(sql);
			
			pstmt.setString(1, bean.getSubject());
			pstmt.setString(2, bean.getContent());
			pstmt.setInt(3, bean.getNum());
			
			pstmt.executeUpdate();
			con.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 

19) BoardLis.jsp JSP 파일로 돌아와서 pageCount 총 페이지수 작성 - 이미 존재하는 수식들이라서 짜기보단 이해 하기 !!!

      글이 66개가 있으면 한페이지에 10개의 글이 들어갈 수 있다면 총 페이지가 7페이지가 필요함 !

      66을 10으로 나누고 ! 6에다가 나머지가 0이 아니라면 한페이지가 더 필요하니까 6에다 +1 더해서 7! 

      즉, 총 7페이지가 필요 !!!

      한페이지에 10개씩 보면 1페이지에는 1부터~10까지 / 2페이지에서부터는 11부터~20까지

<%@page import="java.util.Vector"%>
<%@page import="bean.BoardBean"%>
<%@page import="bean.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<body>
	<h2>전체 게시글</h2>
	<%
	int pageSize=10;
	
	String pageNum=request.getParameter("pageNum");
	if(pageNum==null) {
		pageNum="1";	
	}
	
	int count = 0; //전체글 개수 알아내기 위해
	int number = 0;

	BoardDAO bdao = new BoardDAO();
	count = bdao.getAllCount(); //전체 게시글 갯수 읽어온다
	
	int currentPage=Integer.parseInt(pageNum); //현재 페이지 인덱스 번호
	
	int startRow=(currentPage-1)*pageSize+1;
				//		1 - 1 *  10 + 1
	int endRow=currentPage * pageSize; //1 * 10
	
	Vector<BoardBean> vec = bdao.allBoard(startRow, endRow);
	
	number = count-(currentPage-1)*pageSize;
	
	%>
	<table width="800" border="1">
		<tr height="40">
			<td width="50" align="center">번호</td>
			<td width="420" align="center">제목</td>
			<td width="100" align="center">작성자</td>
			<td width="150" align="center">작성날짜</td>
			<td width="80" align="center">조회수</td>
		</tr>

		<%
		//vector객체를 만들어서 전체게시물의 갯수만큼 가져와서 bean에 담기(브라우저에 전체 게시글을 출력해야 하기 떄문에)
		//벡터에 있는거 꺼내와서 BoardBean에 저장
		for (int i = 0; i < vec.size(); i++) {
			BoardBean bean = vec.get(i);
		%>

		<tr height="40">
			<td width="50" align="center"><%=number--%></td>
			<td width="420" align="center"><a
				href="BoardIn.jsp?num=<%=bean.getNum()%>"
				style="text-decoration: none"></a></td>
			<td width="100" align="center"><%=bean.getWriter()%></td>
			<td width="150" align="center"><%=bean.getReg_date()%></td>
			<td width="80" align="center"><%=bean.getReadcount()%></td>
		</tr>

		<%
		}
		%>

		<tr height="40">
			<td colspan="5" align="center"><input type="button" value="글작성"
				onclick="location.href='BoardForm.jsp'"></td>
		</tr>

	</table>

	<%
	if (count > 0) { //  127/10 + (127 % 10)
		int pageCount = count / pageSize + (count % pageSize == 0 ? 0 : 1);
		//총 페이지 수

		int startPage = 1;

		//현재페이지가 5면 맨처음 시작페이지는 1부터 시작한다는 뜻
		if (currentPage % 10 != 0) { //currentPage가 11일 때 라고 생각해 보면 
			startPage = (int) (currentPage / 10) * 10 + 1; //답은 11 	
		} else { //currentPage가 10일 때 
			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>
	<%
		}
	}
	%>
</body>
</html>

 

20) BoardDAO.java 파일에 allBoard 작성 하기 

	
	public Vector<BoardBean> allBoard(int startRow, int endRow){
		
		Vector<BoardBean> v=new Vector<BoardBean>();
		getCon();
		
		try {
			String sql="select * from board order by ref desc, re_step asc limit ?,?";
			
			pstmt=con.prepareStatement(sql);
			pstmt.setInt(1, startRow-1);
			pstmt.setInt(2, endRow);
			
			rs=pstmt.executeQuery();
			
			while(rs.next()) {
				BoardBean bean=new BoardBean();
				
				bean.setNum(rs.getInt(1));
				bean.setWriter(rs.getString(2));
				bean.setEmail(rs.getString(3));
				bean.setSubject(rs.getString(4));
				bean.setPassword(rs.getString(5));
				bean.setReg_date(rs.getDate(6).toString());
				bean.setRef(rs.getInt(7));
				bean.setRe_step(rs.getInt(8));
				bean.setRe_level(rs.getInt(9));
				bean.setReadcount(rs.getInt(10));
				bean.setContent(rs.getString(11));
				
				v.add(bean);
			}
				con.close();
			}catch(Exception e) {
				e.printStackTrace();
			}
			return v;
	}

 

21) ReWriteForm.jsp JSP 파일 작성

 

) DeleteForm.jsp JSP 파일 작성 

) DeleteProc.jsp JSP 파일 작성 

) BoardDAO.java 파일에 deleteBoard 작성 하기 

728x90