<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<center> <h2> 글 쓰 기 </h2>
<%
// 해당글이 최신글인지 답변글인지에 대한 정보를 파악 후
// 답글이라면 저장할 변수 선언
int num = 0;
// 글그룹, 글스텝, 글레벨을 초기화함
int ref = 1, re_level=0, re_step = 0;
if(request.getParameter("num") != null){
//답변글이라면
num = Integer.parseInt(request.getParameter("num"));
ref = Integer.parseInt(request.getParameter("ref"));
re_level = Integer.parseInt(request.getParameter("re_level"));
re_step = Integer.parseInt(request.getParameter("re_step"));
}
%>
<form action="BoardWriteProc.jsp" method="post">
<input type="hidden" name="num" value="<%=num%>">
<%-- 새글이라면 1, 1, 1이 넘어가고, 답글이라면 지정한 값이 넘어간다. --%>
<input type="hidden" name="ref" value="<%=ref%>">
<input type="hidden" name="re_level" value="<%=re_level%>">
<input type="hidden" name="re_step" value="<%=re_step%>">
<table width="500" border="1" cellpadding="5" cellspacing="2">
<tr>
<th width="70" align="center" bgcolor="FFFFFFF"> 이 름 </th>
<td width="330"> <input type="text" name="writer" size="25"> </td>
</tr>
<tr>
<th width="70" align="center" bgcolor="FFFFFFF"> 제 목 </th>
<td width="330">
<%
if(request.getParameter("num") == null){
%>
<input type="text" name="subject" size="25">
<%
}
else{
%>
<input type="text" name="subject" size="25" value="┗ [Re] ">
<%
}
%>
</tr>
<tr>
<th width="70" align="center" bgcolor="FFFFFFF"> Email </th>
<td width="330"> <input type="text" name="email" size="25"> </td>
</tr>
<tr>
<th width="70" align="center" bgcolor="FFFFFFF"> 내 용 </th>
<td width="330"> <textarea name="content" rows="13" cols="40"></textarea> </td>
</tr>
<tr>
<th width="70" align="center" bgcolor="FFFFFFF"> 비밀번호 </th>
<td width="330"> <input type="password" name="passwd" size="25"> </td>
</tr>
</table>
<table width="180" border="0" cellpadding="5">
<tr>
<td> <input type="submit" value="쓰기"> </td>
<td> <input type="reset" value="취소"> </td>
<td> <input type="button" value="목록" onclick="window.location='BoardList.jsp'"> </td>
</tr>
</table>
</form>
</center>
</body>
</html>
- BoardWriteProc.jsp 소스
<%@page import="java.util.Calendar"%>
<%@page import="board.BoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<% request.setCharacterEncoding("euc-kr"); %>
<!-- 빈클래스 생성 -->
<jsp:useBean id = "bbean" class = "board.BoardBean"></jsp:useBean>
<!-- 빈클래스에 데이터를 추가 -->
<jsp:setProperty property = "*" name = "bbean"/>
<!-- 데이터를 추가 -->
<%
BoardDao bdao = new BoardDao();
// 데이터를 추가하는 메소드 호출
bdao.insertBoard(bbean);
// 데이터를 추가 후 제어권을 MemberList로 넘겨줌
response.sendRedirect("BoardList.jsp");
%>
</body>
</html>
- BoardBean.java 소스
package board;
import java.util.Date;
public class BoardBean {
private int num;
private String writer;
private String passwd;
private String subject;
private String content;
private String email;
private int ref;
private int re_level;
private int re_step;
private Date reg_date;
private int readcount;
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 getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getRef() {
return ref;
}
public void setRef(int ref) {
this.ref = ref;
}
public int getRe_level() {
return re_level;
}
public void setRe_level(int re_level) {
this.re_level = re_level;
}
public int getRe_step() {
return re_step;
}
public void setRe_step(int re_step) {
this.re_step = re_step;
}
public Date getReg_date() {
return reg_date;
}
public void setReg_date(Date reg_date) {
this.reg_date = reg_date;
}
public int getReadcount() {
return readcount;
}
public void setReadcount(int readcount) {
this.readcount = readcount;
}
}
- BoardDao.java 소스
package board;
import java.sql.*;
import java.util.Vector;
public class BoardDao {
String url="jdbc:oracle:thin:@127.0.0.1:1521:XE";
String id="system";
String pass="123456";
Connection con;
PreparedStatement pstmt;
ResultSet rs;
// 데이터 베이스에 접근하는 메소드
public void con(){
try {
// 1.어느 데이터 베이스를 사용할건지를 설정
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2.실제 데이터 베이스에 접근하기위한 소스를 작성 == 접속완료되면 커넥션을 리턴
con = DriverManager.getConnection(url, id, pass);
} catch(Exception e){
}
}
// 하나의 게시글을 저장하는 메소드
public void insertBoard(BoardBean bbean){
try {
// 데이터 베이스에 접근
this.con();
int num = bbean.getNum();
int ref = bbean.getRef();
int re_level = bbean.getRe_level();
int re_step = bbean.getRe_step();
// num값이 0이 아니라면 즉, 답글 이라면
// 부모값으로 넘어온 ref를 기준으로 re_level, re_step의 값을 증가시킨다.
if(num != 0){
// step을 증가시키는 데 현재 부모의 step보다 큰 것들만 1씩 더한다
// 새로운 댓글을 집어넣으면 그 댓글을 위해서 나머지 글들의 step을 1씩 증가시켜야 함
String sql = "update bboard set re_step=re_step+1 where ref=? and re_step > ?";
pstmt = con.prepareStatement(sql);
// pstmt ?에 값을 대입
pstmt.setInt(1, ref);
pstmt.setInt(2, re_step);
// 쿼리 실행
pstmt.executeUpdate();
// re_step과 re_level을 1씩 증가 = 즉, 현재 re_step과 re_level은 부모의 값이기에
// 부모값에서 1씩 증가시킨다.
re_level+=1;
re_step+=1; // 자신을 증가시킴
}
else{
// 새 글이라면
// 현재 글그룹의 최고값을 가져옴
String sql = "select max(ref) from bboard"; // ref의 최고값을 리턴
pstmt = con.prepareStatement(sql);
// 쿼리 실행 후 결과를 rs가 받아줌
rs = pstmt.executeQuery();
if(rs.next()){
ref = rs.getInt(1)+1; // max(ref)를 가져와서 +1을 수행
}
else{ // 첫 새 글 이라면
ref = 1;
}
re_step = 0; // 새 글이라면
re_level = 0;
}
// 쿼리준비 (nextval를 이용해서 자동적으로 값을 증가시킴, sysdate를 이용해서 현재 날짜를 입력함)
String sql ="insert into bboard values(board_seq.nextval,?,?,?,?,?,?,?,?,sysdate,0)";
// 쿼리 실행객체 준비
pstmt = con.prepareStatement(sql);
// ?에 데이터 입력
pstmt.setString(1, bbean.getWriter());
pstmt.setString(2, bbean.getPasswd());
pstmt.setString(3, bbean.getSubject());
pstmt.setString(4, bbean.getContent());
pstmt.setString(5, bbean.getEmail());
pstmt.setInt(6, ref);
pstmt.setInt(7, re_level);
pstmt.setInt(8, re_step);
// 쿼리를 실행 하시오
pstmt.executeUpdate();
// 자원 반납
pstmt.close();
con.close();
rs.close();
} catch (Exception e) {
}
}
// 모든 게시글의 데이터를 가져오는 메소드
public Vector<BoardBean> getAllBoard(int startRow, int endRow){
// 전체 게시글의 내용을 저장하는 객체
Vector<BoardBean> vector = new Vector<>();
BoardBean bean;
// 커넥션 연결
this.con();
// 쿼리 준비
// String sql = "select * from bboard ORDER BY REF DESC, RE_STEP ASC"; // Order by를 이용해서 정렬
String sql = "select * from (Select A.*, Rownum Rnum from (select * from bboard order by ref Desc, re_step Asc)A) WHERE Rnum > ? and Rnum <= ?";
try {
// 쿼리 실행할 준비
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, startRow-1);
pstmt.setInt(2, endRow);
// 쿼리 실행
rs = pstmt.executeQuery();
// 반복문을 이용하여 데이터를 빈클래스에 담은 후 그 빈클래스를 백터에 저장
while(rs.next()){
bean = new BoardBean();
bean.setNum(rs.getInt(1));
bean.setWriter(rs.getString(2));
bean.setPasswd(rs.getString(3));
bean.setSubject(rs.getString(4));
bean.setContent(rs.getString(5));
bean.setEmail(rs.getString(6));
bean.setRef(rs.getInt(7));
bean.setRe_level(rs.getInt(8));
bean.setRe_step(rs.getInt(9));
bean.setReg_date(rs.getDate(10));
bean.setReadcount(rs.getInt(11));
// 빈클래스에 담은 데이터를 백터에 추가
vector.add(bean);
}
con.close();
pstmt.close();
rs.close();
} catch (Exception e) {
}
return vector;
}
// 한사람의 대한 정보를 모두 얻어오는 메소드
public BoardBean getOneBoard(int num){
// 조회수를 증가시켜주는 메소드 호출
setCount(num);
BoardBean bean = null; // 리턴하기위해서 필요한 객체- 한 게시물에 대한 정보가 저장되는 클래스
// 커넥션 연결
this.con();
// 쿼리 준비
String sql ="select * from bboard where num=?";
try {
// 쿼리를 실행시킬 객체 선언
pstmt = con.prepareStatement(sql);
// ?에 값을 입력
pstmt.setInt(1, num);
// 쿼리 실행후 데이터를 리턴 받음
rs = pstmt.executeQuery();
while(rs.next()){
bean = new BoardBean();
bean.setNum(rs.getInt(1));
bean.setWriter(rs.getString(2));
bean.setPasswd(rs.getString(3));
bean.setSubject(rs.getString(4));
bean.setContent(rs.getString(5));
bean.setEmail(rs.getString(6));
bean.setRef(rs.getInt(7));
bean.setRe_level(rs.getInt(8));
bean.setRe_step(rs.getInt(9));
bean.setReg_date(rs.getDate(10));
bean.setReadcount(rs.getInt(11));
}
con.close();
pstmt.close();
rs.close();
} catch (Exception e) {
}
return bean;
}
// 게시판 정보 수정
public void updateBoard(int num, String subject, String content){
// 커넥션 연결
this.con();
// 쿼리준비
String sql = "update bboard set subject=?, contents=? where num=?";
try {
// 커리를 실행할수 있는 객체 생성
pstmt = con.prepareStatement(sql);
pstmt.setString(1, subject);
pstmt.setString(2, content);
pstmt.setInt(3, num);
// 커리 실행
pstmt.executeUpdate();
pstmt.close();
} catch (Exception e) {
}
}
// 게시판 정보 삭제
public void deleteBoard(int num){
// 커넥션 연결
this.con();
// 쿼리준비
String sql = "delete from bboard where num=?";
try {
// 쿼리를 실행할수 있는 객체 생성
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, num);
// 쿼리 실행
pstmt.executeUpdate();
pstmt.close();
} catch (Exception e) {
}
}
// 조회수를 증가시키기 위한 메소드
public void setCount (int num){
// 커넥션 연결
this.con();
// 현재 선택된 게시글 번호의 조회수를 가져옴
String sql = "update bboard set readcount=readcount+1 where num=?";
try{
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, num);
// 쿼리 실행
pstmt.executeUpdate();
pstmt.close();
con.close();
} catch (Exception e) {
}
}
// 전체 게시글의 수를 리턴
public int getAllCount(){
int count = 0;
try{
this.con();
String sql = "select count(*) from bboard";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
if(rs.next()){
count = rs.getInt(1);
}
con.close();
rs.close();
pstmt.close();
} catch (Exception e){
}
return count;
}
}
import java.util.Vector;
public class BoardDao {
String url="jdbc:oracle:thin:@127.0.0.1:1521:XE";
String id="system";
String pass="123456";
Connection con;
PreparedStatement pstmt;
ResultSet rs;
// 데이터 베이스에 접근하는 메소드
public void con(){
try {
// 1.어느 데이터 베이스를 사용할건지를 설정
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2.실제 데이터 베이스에 접근하기위한 소스를 작성 == 접속완료되면 커넥션을 리턴
con = DriverManager.getConnection(url, id, pass);
} catch(Exception e){
}
}
// 하나의 게시글을 저장하는 메소드
public void insertBoard(BoardBean bbean){
try {
// 데이터 베이스에 접근
this.con();
int num = bbean.getNum();
int ref = bbean.getRef();
int re_level = bbean.getRe_level();
int re_step = bbean.getRe_step();
// num값이 0이 아니라면 즉, 답글 이라면
// 부모값으로 넘어온 ref를 기준으로 re_level, re_step의 값을 증가시킨다.
if(num != 0){
// step을 증가시키는 데 현재 부모의 step보다 큰 것들만 1씩 더한다
// 새로운 댓글을 집어넣으면 그 댓글을 위해서 나머지 글들의 step을 1씩 증가시켜야 함
String sql = "update bboard set re_step=re_step+1 where ref=? and re_step > ?";
pstmt = con.prepareStatement(sql);
// pstmt ?에 값을 대입
pstmt.setInt(1, ref);
pstmt.setInt(2, re_step);
// 쿼리 실행
pstmt.executeUpdate();
// re_step과 re_level을 1씩 증가 = 즉, 현재 re_step과 re_level은 부모의 값이기에
// 부모값에서 1씩 증가시킨다.
re_level+=1;
re_step+=1; // 자신을 증가시킴
}
else{
// 새 글이라면
// 현재 글그룹의 최고값을 가져옴
String sql = "select max(ref) from bboard"; // ref의 최고값을 리턴
pstmt = con.prepareStatement(sql);
// 쿼리 실행 후 결과를 rs가 받아줌
rs = pstmt.executeQuery();
if(rs.next()){
ref = rs.getInt(1)+1; // max(ref)를 가져와서 +1을 수행
}
else{ // 첫 새 글 이라면
ref = 1;
}
re_step = 0; // 새 글이라면
re_level = 0;
}
// 쿼리준비 (nextval를 이용해서 자동적으로 값을 증가시킴, sysdate를 이용해서 현재 날짜를 입력함)
String sql ="insert into bboard values(board_seq.nextval,?,?,?,?,?,?,?,?,sysdate,0)";
// 쿼리 실행객체 준비
pstmt = con.prepareStatement(sql);
// ?에 데이터 입력
pstmt.setString(1, bbean.getWriter());
pstmt.setString(2, bbean.getPasswd());
pstmt.setString(3, bbean.getSubject());
pstmt.setString(4, bbean.getContent());
pstmt.setString(5, bbean.getEmail());
pstmt.setInt(6, ref);
pstmt.setInt(7, re_level);
pstmt.setInt(8, re_step);
// 쿼리를 실행 하시오
pstmt.executeUpdate();
// 자원 반납
pstmt.close();
con.close();
rs.close();
} catch (Exception e) {
}
}
// 모든 게시글의 데이터를 가져오는 메소드
public Vector<BoardBean> getAllBoard(int startRow, int endRow){
// 전체 게시글의 내용을 저장하는 객체
Vector<BoardBean> vector = new Vector<>();
BoardBean bean;
// 커넥션 연결
this.con();
// 쿼리 준비
// String sql = "select * from bboard ORDER BY REF DESC, RE_STEP ASC"; // Order by를 이용해서 정렬
String sql = "select * from (Select A.*, Rownum Rnum from (select * from bboard order by ref Desc, re_step Asc)A) WHERE Rnum > ? and Rnum <= ?";
try {
// 쿼리 실행할 준비
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, startRow-1);
pstmt.setInt(2, endRow);
// 쿼리 실행
rs = pstmt.executeQuery();
// 반복문을 이용하여 데이터를 빈클래스에 담은 후 그 빈클래스를 백터에 저장
while(rs.next()){
bean = new BoardBean();
bean.setNum(rs.getInt(1));
bean.setWriter(rs.getString(2));
bean.setPasswd(rs.getString(3));
bean.setSubject(rs.getString(4));
bean.setContent(rs.getString(5));
bean.setEmail(rs.getString(6));
bean.setRef(rs.getInt(7));
bean.setRe_level(rs.getInt(8));
bean.setRe_step(rs.getInt(9));
bean.setReg_date(rs.getDate(10));
bean.setReadcount(rs.getInt(11));
// 빈클래스에 담은 데이터를 백터에 추가
vector.add(bean);
}
con.close();
pstmt.close();
rs.close();
} catch (Exception e) {
}
return vector;
}
// 한사람의 대한 정보를 모두 얻어오는 메소드
public BoardBean getOneBoard(int num){
// 조회수를 증가시켜주는 메소드 호출
setCount(num);
BoardBean bean = null; // 리턴하기위해서 필요한 객체- 한 게시물에 대한 정보가 저장되는 클래스
// 커넥션 연결
this.con();
// 쿼리 준비
String sql ="select * from bboard where num=?";
try {
// 쿼리를 실행시킬 객체 선언
pstmt = con.prepareStatement(sql);
// ?에 값을 입력
pstmt.setInt(1, num);
// 쿼리 실행후 데이터를 리턴 받음
rs = pstmt.executeQuery();
while(rs.next()){
bean = new BoardBean();
bean.setNum(rs.getInt(1));
bean.setWriter(rs.getString(2));
bean.setPasswd(rs.getString(3));
bean.setSubject(rs.getString(4));
bean.setContent(rs.getString(5));
bean.setEmail(rs.getString(6));
bean.setRef(rs.getInt(7));
bean.setRe_level(rs.getInt(8));
bean.setRe_step(rs.getInt(9));
bean.setReg_date(rs.getDate(10));
bean.setReadcount(rs.getInt(11));
}
con.close();
pstmt.close();
rs.close();
} catch (Exception e) {
}
return bean;
}
// 게시판 정보 수정
public void updateBoard(int num, String subject, String content){
// 커넥션 연결
this.con();
// 쿼리준비
String sql = "update bboard set subject=?, contents=? where num=?";
try {
// 커리를 실행할수 있는 객체 생성
pstmt = con.prepareStatement(sql);
pstmt.setString(1, subject);
pstmt.setString(2, content);
pstmt.setInt(3, num);
// 커리 실행
pstmt.executeUpdate();
pstmt.close();
} catch (Exception e) {
}
}
// 게시판 정보 삭제
public void deleteBoard(int num){
// 커넥션 연결
this.con();
// 쿼리준비
String sql = "delete from bboard where num=?";
try {
// 쿼리를 실행할수 있는 객체 생성
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, num);
// 쿼리 실행
pstmt.executeUpdate();
pstmt.close();
} catch (Exception e) {
}
}
// 조회수를 증가시키기 위한 메소드
public void setCount (int num){
// 커넥션 연결
this.con();
// 현재 선택된 게시글 번호의 조회수를 가져옴
String sql = "update bboard set readcount=readcount+1 where num=?";
try{
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, num);
// 쿼리 실행
pstmt.executeUpdate();
pstmt.close();
con.close();
} catch (Exception e) {
}
}
// 전체 게시글의 수를 리턴
public int getAllCount(){
int count = 0;
try{
this.con();
String sql = "select count(*) from bboard";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
if(rs.next()){
count = rs.getInt(1);
}
con.close();
rs.close();
pstmt.close();
} catch (Exception e){
}
return count;
}
}
- BoardList.jsp 소스
<%@page import="board.BoardBean"%>
<%@page import="java.util.Vector"%>
<%@page import="board.BoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<center>
<%
// 화면에 보여질 개수를 저장하는 변수 선언
int pageSize = 10;
// 화면에 표시해야할 페이지의 넘버를 읽어드림
String pageNum = request.getParameter("pageNum");
// 전체 글의 개수를 저장할 변수 선언
int count = 0;
// 현재 페이지에 표시할 레코드 수
int number = 0;
// 새로쓴 글, 삭제, 또는 수정시 호출되었는지 아니면 페이징 처리되었는지를 파악해주어야 함
if(pageNum == null){ // 미 페이징 처리라면
pageNum = "1";
}
// pageNum를 숫자로 바꾸어줌
int currentPage = Integer.parseInt(pageNum);
// 디비로부터 데이터를 받아야할 저장 객체 선언
Vector<BoardBean> vector = new Vector();
// 데이터 베이스 연결
BoardDao bdao = new BoardDao();
// 전체 게시글의 데이터를 얻어옴
count = bdao.getAllCount();
// 현재 페이지에 보여줄 시작 번호와 끝번호를 설정
int startRow = (currentPage-1) * pageSize+1;
int endRow = currentPage*pageSize; // 10개씩 게시글을 보여줌
if(count > 0){
// 총게시글에서 원하는 부분의 데이터를 가져옴
vector = bdao.getAllBoard(startRow, endRow);
// 테이플에 표시해야할 번호를 지정하기 위해서 사용하는 변수
number = count - (currentPage-1) * pageSize;
%>
<h2> 게 시 판 목 록 </h2>
<form action = "BoardWrite.jsp" method = "post">
<table border = "1" width = "740" cellpadding="4" cellspacing="2">
<tr bgcolor = "FFFFFFF">
<th width = "50"> 번호 </th>
<th width = "330"> 제목 </th>
<th width = "130"> 작성자 </th>
<th width = "130"> 날짜 </th>
<th width = "80"> 조회수 </th>
</tr>
<%
for(int i = 0 ; i < vector.size() ; i++){
// 백터에 담긴 BoardBean 클래스를 추출
BoardBean bean = vector.get(i);
%>
<tr>
<th width = "50"> <%=number--%> </th>
<td width = "330" align = "left">
<%
int wid=0; // 답글인지를 파악해서 들여쓰기를 하기위한 변수
if(bean.getRe_level() > 0){
wid = 5*bean.getRe_level();
for(int j=0 ; j<wid ; j++){
out.print(" ");
}
}
%>
<a href = "BoardInfo.jsp?num=<%=bean.getNum()%>"><%=bean.getSubject()%></a> </td>
<td width = "130"> <%=bean.getWriter()%> </td>
<td width = "130"> <%=bean.getReg_date()%> </td>
<td width = "80"> <%=bean.getReadcount()%></td>
</tr>
<%
}
}
%>
</table>
<table border = "0" width = "740" cellpadding="4">
<tr>
<td colspan = "5" align = "right"> <input type = "submit" value = "글쓰기"> </td>
</tr>
</table>
</form>
<!-- 페이지 처리 -->
<%
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;
}
// 화면에 보여질 페이징 처리 숫자 즉, [1][2]... 이런 숫자를 의미
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 m = startPage ; m<=endPage ; m++){
%>
<a href = "BoardList.jsp?pageNum=<%=m%>">[<%=m%>]</a>
<%
}
if(endPage < pageCount){
%>
<a href = "BoardList.jsp?pageNum=<%=startPage+10%>">[다음]</a>
<%
}
}
%>
</center>
</body>
</html>
<%@page import="board.BoardBean"%>
<%@page import="java.util.Vector"%>
<%@page import="board.BoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<center>
<%
// 화면에 보여질 개수를 저장하는 변수 선언
int pageSize = 10;
// 화면에 표시해야할 페이지의 넘버를 읽어드림
String pageNum = request.getParameter("pageNum");
// 전체 글의 개수를 저장할 변수 선언
int count = 0;
// 현재 페이지에 표시할 레코드 수
int number = 0;
// 새로쓴 글, 삭제, 또는 수정시 호출되었는지 아니면 페이징 처리되었는지를 파악해주어야 함
if(pageNum == null){ // 미 페이징 처리라면
pageNum = "1";
}
// pageNum를 숫자로 바꾸어줌
int currentPage = Integer.parseInt(pageNum);
// 디비로부터 데이터를 받아야할 저장 객체 선언
Vector<BoardBean> vector = new Vector();
// 데이터 베이스 연결
BoardDao bdao = new BoardDao();
// 전체 게시글의 데이터를 얻어옴
count = bdao.getAllCount();
// 현재 페이지에 보여줄 시작 번호와 끝번호를 설정
int startRow = (currentPage-1) * pageSize+1;
int endRow = currentPage*pageSize; // 10개씩 게시글을 보여줌
if(count > 0){
// 총게시글에서 원하는 부분의 데이터를 가져옴
vector = bdao.getAllBoard(startRow, endRow);
// 테이플에 표시해야할 번호를 지정하기 위해서 사용하는 변수
number = count - (currentPage-1) * pageSize;
%>
<h2> 게 시 판 목 록 </h2>
<form action = "BoardWrite.jsp" method = "post">
<table border = "1" width = "740" cellpadding="4" cellspacing="2">
<tr bgcolor = "FFFFFFF">
<th width = "50"> 번호 </th>
<th width = "330"> 제목 </th>
<th width = "130"> 작성자 </th>
<th width = "130"> 날짜 </th>
<th width = "80"> 조회수 </th>
</tr>
<%
for(int i = 0 ; i < vector.size() ; i++){
// 백터에 담긴 BoardBean 클래스를 추출
BoardBean bean = vector.get(i);
%>
<tr>
<th width = "50"> <%=number--%> </th>
<td width = "330" align = "left">
<%
int wid=0; // 답글인지를 파악해서 들여쓰기를 하기위한 변수
if(bean.getRe_level() > 0){
wid = 5*bean.getRe_level();
for(int j=0 ; j<wid ; j++){
out.print(" ");
}
}
%>
<a href = "BoardInfo.jsp?num=<%=bean.getNum()%>"><%=bean.getSubject()%></a> </td>
<td width = "130"> <%=bean.getWriter()%> </td>
<td width = "130"> <%=bean.getReg_date()%> </td>
<td width = "80"> <%=bean.getReadcount()%></td>
</tr>
<%
}
}
%>
</table>
<table border = "0" width = "740" cellpadding="4">
<tr>
<td colspan = "5" align = "right"> <input type = "submit" value = "글쓰기"> </td>
</tr>
</table>
</form>
<!-- 페이지 처리 -->
<%
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;
}
// 화면에 보여질 페이징 처리 숫자 즉, [1][2]... 이런 숫자를 의미
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 m = startPage ; m<=endPage ; m++){
%>
<a href = "BoardList.jsp?pageNum=<%=m%>">[<%=m%>]</a>
<%
}
if(endPage < pageCount){
%>
<a href = "BoardList.jsp?pageNum=<%=startPage+10%>">[다음]</a>
<%
}
}
%>
</center>
</body>
</html>
- BoardInfo.jsp 소스
<%@page import="board.BoardBean"%>
<%@page import="board.BoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<center>
<h2> 게 시 글 보 기 </h2>
<%
BoardDao bdao = new BoardDao();
// 게시판 빈클래스 선언
BoardBean board = new BoardBean();
int num = Integer.parseInt(request.getParameter("num").trim()); // trim()을 이용해서 공백 제거
board = bdao.getOneBoard(num); // 하나의 게시판에대한 정보를 가져옴
%>
<form action = "BoardUpdate.jsp" method = "post" name = "form">
<table border = "1" width = "500" height = "380" cellpadding="5" cellspacing="2">
<tr>
<th width = "100" bgcolor="FFFFFFF"> 글번호 </th>
<td width = "250"> <input type = "text" size = "40" name = "num" value = "<%=board.getNum()%>" disabled> </td>
</tr>
<tr>
<th width = "100" bgcolor="FFFFFFF"> 작성자 </th>
<td width = "250"> <input type = "text" size = "40" name = "writer" value = "<%=board.getWriter()%>" disabled> </td>
</tr>
<tr>
<th width = "100" bgcolor="FFFFFFF"> 글 제목 </th>
<td width = "250"> <input type = "text" size = "40" name = "subject" value = "<%=board.getSubject()%>"> </td>
</tr>
<tr>
<th width = "100" bgcolor="FFFFFFF"> 내용 </th>
<td width = "250"> <textarea cols = "40" rows = "10" name = "content"><%=board.getContent()%></textarea> </td>
</tr>
<tr>
<th width = "100" bgcolor="FFFFFFF"> 비밀번호 </th>
<td width = "250"> <input type = "password" size = "40" name = "passwd"> </td>
</tr>
</table>
<table border = "0" width = "250" cellpadding = "5">
<tr>
<td> <input type = "submit" value = "수정"> </td>
<td> <input type = "button" value = "삭제" onclick = "window.location='BoardDelete.jsp?num=<%=board.getNum()%>'"> </td>
<td> <input type = "button" value = "답글" onclick = "window.location='BoardWrite.jsp?num=<%=board.getNum()%>&ref=<%=board.getRef()%>&re_level=<%=board.getRe_level()%>&re_step=<%=board.getRe_step()%>'"> </td>
<td> <input type = "button" value = "목록" onclick = "window.location='BoardList.jsp'"> </td>
</tr>
</table>
<input type = "hidden" name = "num2" value = "<%=board.getNum()%>">
<input type = "hidden" name = "passwd2" value = "<%=board.getPasswd()%>">
</form>
</center>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<center>
<h2> 게 시 글 보 기 </h2>
<%
BoardDao bdao = new BoardDao();
// 게시판 빈클래스 선언
BoardBean board = new BoardBean();
int num = Integer.parseInt(request.getParameter("num").trim()); // trim()을 이용해서 공백 제거
board = bdao.getOneBoard(num); // 하나의 게시판에대한 정보를 가져옴
%>
<form action = "BoardUpdate.jsp" method = "post" name = "form">
<table border = "1" width = "500" height = "380" cellpadding="5" cellspacing="2">
<tr>
<th width = "100" bgcolor="FFFFFFF"> 글번호 </th>
<td width = "250"> <input type = "text" size = "40" name = "num" value = "<%=board.getNum()%>" disabled> </td>
</tr>
<tr>
<th width = "100" bgcolor="FFFFFFF"> 작성자 </th>
<td width = "250"> <input type = "text" size = "40" name = "writer" value = "<%=board.getWriter()%>" disabled> </td>
</tr>
<tr>
<th width = "100" bgcolor="FFFFFFF"> 글 제목 </th>
<td width = "250"> <input type = "text" size = "40" name = "subject" value = "<%=board.getSubject()%>"> </td>
</tr>
<tr>
<th width = "100" bgcolor="FFFFFFF"> 내용 </th>
<td width = "250"> <textarea cols = "40" rows = "10" name = "content"><%=board.getContent()%></textarea> </td>
</tr>
<tr>
<th width = "100" bgcolor="FFFFFFF"> 비밀번호 </th>
<td width = "250"> <input type = "password" size = "40" name = "passwd"> </td>
</tr>
</table>
<table border = "0" width = "250" cellpadding = "5">
<tr>
<td> <input type = "submit" value = "수정"> </td>
<td> <input type = "button" value = "삭제" onclick = "window.location='BoardDelete.jsp?num=<%=board.getNum()%>'"> </td>
<td> <input type = "button" value = "답글" onclick = "window.location='BoardWrite.jsp?num=<%=board.getNum()%>&ref=<%=board.getRef()%>&re_level=<%=board.getRe_level()%>&re_step=<%=board.getRe_step()%>'"> </td>
<td> <input type = "button" value = "목록" onclick = "window.location='BoardList.jsp'"> </td>
</tr>
</table>
<input type = "hidden" name = "num2" value = "<%=board.getNum()%>">
<input type = "hidden" name = "passwd2" value = "<%=board.getPasswd()%>">
</form>
</center>
</body>
</html>
- BoardUpdate.jsp 소스
<%@page import="board.BoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("euc-kr");
int num = Integer.parseInt(request.getParameter("num2"));
String subject = request.getParameter("subject");
String content = request.getParameter("content");
// 디비 연결객체 생성
BoardDao bdao = new BoardDao();
if(request.getParameter("passwd").equals(request.getParameter("passwd2"))){
// 게시판 글을 수정하는 메소드 호출
bdao.updateBoard(num, subject, content);
response.sendRedirect("BoardList.jsp"); // 게시판 리스트로 보냄
}
else{
%>
<script type="text/javascript">
alert("비밀번호를 확인해 주십시오.");
history.go(-1); // -1은 이전페이지로 이동하라는 의미
</script>
<%
}
%>
</body>
</html>
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("euc-kr");
int num = Integer.parseInt(request.getParameter("num2"));
String subject = request.getParameter("subject");
String content = request.getParameter("content");
// 디비 연결객체 생성
BoardDao bdao = new BoardDao();
if(request.getParameter("passwd").equals(request.getParameter("passwd2"))){
// 게시판 글을 수정하는 메소드 호출
bdao.updateBoard(num, subject, content);
response.sendRedirect("BoardList.jsp"); // 게시판 리스트로 보냄
}
else{
%>
<script type="text/javascript">
alert("비밀번호를 확인해 주십시오.");
history.go(-1); // -1은 이전페이지로 이동하라는 의미
</script>
<%
}
%>
</body>
</html>
- BoardDelete.jsp 소스
<%@page import="board.BoardDao"%>
<%@page import="board.BoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("euc-kr");
int num = Integer.parseInt(request.getParameter("num"));
// 디비 연결객체 생성
BoardDao bdao = new BoardDao();
// 게시판 글을 수정하는 메소드 호출
bdao.deleteBoard(num);
response.sendRedirect("BoardList.jsp"); // 게시판 리스트로 보냄
%>
</body>
</html>
- 결과
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("euc-kr");
int num = Integer.parseInt(request.getParameter("num"));
// 디비 연결객체 생성
BoardDao bdao = new BoardDao();
// 게시판 글을 수정하는 메소드 호출
bdao.deleteBoard(num);
response.sendRedirect("BoardList.jsp"); // 게시판 리스트로 보냄
%>
</body>
</html>
- 결과