public class BoardBean
{
private int num; // 자동부여
private String writer; //사용자입력
private String email; //사용자입력
private String subject; //사용자입력
private String passwd; //사용자입력
private String content; //사용자입력
private Timestamp regDate; //자동부여 OR 생성
/*
// 자동부여
private String regDate;
*/
private String ip; // 요청 -> 생성
private int readCount ; // 요청 -> 생성
private int pos; //생성
private int depth; //생성
/*
// 답글 생성시 그룹을 이용한 방법
private int ref;
private int reStep;
private int reLevel;
*/
.
.
생략 setter메소드/getter메소드들 11개 또는 12개
.
.
.
}
======================== writeForm.jsp =========================
<%@ 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>
<%
int num=0,depth=0,pos=0;
%>
<center>글쓰기</center>
<br>
<form method="post" name="writeform" action="writeResult.jsp">
<input type="hidden" name="num" value="<%=num%>">
<input type="hidden" name="depth" value="<%=depth%>">
<input type="hidden" name="pos" value="<%=pos%>">
<table width="400" border="1" cellspacing="0" cellpadding="0" align="center">
<tr>
<td align="right" colspan="2">
<a href="list.jsp">글목록</a>
</td>
</tr>
<tr>
<td width="70" align="center">이름</td>
<td width="330">
<input type="text" name="writer" size="10" maxlength="10">
</td>
</tr>
<tr>
<td width="70" align="center">제목</td>
<td width="330">
<input type="text" name="subject" size="10" maxlength="10">
</td>
</tr>
<tr>
<td width="70" align="center">이메일</td>
<td width="330">
<input type="text" name="email" size="10" maxlength="10">
</td>
</tr>
<tr>
<td width="70" align="center">내용</td>
<td width="330">
<textarea rows="13" cols="40" name="content"></textarea>
</td>
</tr>
<tr>
<td width="70" align="center">비밀번호</td>
<td width="330">
<input type="password" name="passwd" size="10" maxlength="10">
</td>
</tr>
<tr>
<td align="right" colspan="2">
<input type="submit" value="글쓰기">
<input type="reset" value="다시작성">
</td>
</tr>
</table>
</form>
</body>
</html>
======================== writeResult.jsp =========================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="java.util.Vector"%>
<%@ page import="java.sql.*" %>
<%@ page import="testjdbc.BoardBean"%>
<%@ page import="java.util.Enumeration" %>
<%@ page import="java.util.Iterator" %>
<%
request.setCharacterEncoding("euc-kr");
%>
<%@page import="java.util.Enumeration"%><jsp:useBean id="boardBean" class="testjdbc.BoardBean" scope="request" />
<jsp:setProperty name="boardBean" property="*" />
<%
boardBean.setRegDate(new Timestamp(System.currentTimeMillis()));
boardBean.setIp(request.getRemoteAddr());
System.out.println("여기까지 오나!000");
Connection con = null;
Statement stmt = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
Vector<BoardBean> list = new Vector<BoardBean>();
//1. 드라이버를 찾는다
Class.forName("com.mysql.jdbc.Driver");
System.out.println("여기까지 오나!001");
//2. 데이타베이스에 아이디와 패스워드 그리고 데이타베이스의 변형인URL을 통해서 연결한다.
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test", "abc", "1234");
try {
System.out.println("여기까지 오나!002");
// 1,2번 까지는 인스턴스가 필요없지만 3번에서부터는 인스턴스(객체)가 필요하다.
// DriverManager 클래스가 리턴해준다.
//3. sql문장을 만들 준비를 한다.
stmt = con.createStatement();
System.out.println("여기까지 오나!003");
//4. sql문장을 실행 시킨다.
String sql = "insert into board(num,writer,email,subject,passwd,reg_date,read_count,depth,pos,content,ip) values(" + boardBean.getNum()
+ ",'" + boardBean.getWriter() + "','"
+ boardBean.getEmail() + "','" + boardBean.getSubject()
+ "','" + boardBean.getPasswd() + "','"
+ boardBean.getRegDate() + "',0,"
+ boardBean.getDepth() + "," + boardBean.getPos()
+ ",'" + boardBean.getContent() + "','"
+ boardBean.getIp() + "')";
stmt.executeUpdate(sql);
System.out.println("여기까지 오나!004");
/*
//3,4번을 PreparedStatement를 이용해서 다음과 같이 바꾸어 쓸수 있다.
String sql = "insert into board(writer,email,subject,passwd,reg_date,read_count,depth,pos,content,ip) values(?,?,?,?,?,0,?,?,?,?)";
pstmt = con.prepareStatement(sql);
//pstmt.setInt(1,boardBean.getNum());
pstmt.setString(1,boardBean.getWriter());
pstmt.setString(2,boardBean.getEmail());
pstmt.setString(3,boardBean.getSubject());
pstmt.setString(4,boardBean.getPasswd());
pstmt.setTimestamp(5,boardBean.getRegDate());
//pstmt.setInt(6,boardBean.getReadCount()); // read_count 필드는 직접 입력한다. 값: 0
pstmt.setInt(6,boardBean.getDepth());
pstmt.setInt(7,boardBean.getPos());
pstmt.setString(8,boardBean.getContent());
pstmt.setString(9,boardBean.getIp());
System.out.println("여기까지 오나!005");
pstmt.executeUpdate();
System.out.println("여기까지 오나!006");
*/
// 입력작업 완료 이후에 다시 4번부터 다시 시작해서 데이터를 꺼낸다.
//4. sql문장을 실행한다.
sql = "select * from board";
rs = stmt.executeQuery(sql);
// 데이타베이스에서 값을 꺼낸다.
// 레코드가 여러줄 있을 수 있으므로 반복문을 사용한다.
//5. 데이타베이스에 값이 있는지 확인한다.
while (rs.next()) {
//******주의******
BoardBean boardBeanTemp = new BoardBean();
// 템프 자바빈을 while문 안쪽에서 생성해야 데이타베이스에 있는 값을 순서대로 모두 가져 나온다.
// 그렇지 않으면 마지막 레코드만 가져 나오게 된다.
/*
//6. 값을 꺼낸다.
int num = rs.getInt("num");
String writer = rs.getString("writer");
String email = rs.getString("email");
String subject = rs.getString("subject");
String passwd = rs.getString("passwd");
Timestamp regDate = rs.getTimestamp("reg_date");
int readCount = rs.getInt("read_count");
int depth = rs.getInt("depth");
int pos = rs.getInt("pos");
String content = rs.getString("content");
String ip = rs.getString("ip");
//7. 데이타데이스에서 가져온 값은 자바빈에 담는다.
boardBeanTemp.setNum(num);
boardBeanTemp.setWriter(writer);
boardBeanTemp.setEmail(email);
boardBeanTemp.setSubject(subject);
boardBeanTemp.setPasswd(passwd);
boardBeanTemp.setRegDate(regDate);
boardBeanTemp.setReadCount(readCount);
boardBeanTemp.setDepth(depth);
boardBeanTemp.setPos(pos);
boardBeanTemp.setContent(content);
boardBeanTemp.setIp(ip);
*/
//6번과 7번 함께 사용하는 방법이 일반적이다.
boardBeanTemp.setNum(rs.getInt("num"));
boardBeanTemp.setWriter(rs.getString("writer"));
boardBeanTemp.setEmail(rs.getString("email"));
boardBeanTemp.setSubject(rs.getString("subject"));
boardBeanTemp.setPasswd(rs.getString("passwd"));
boardBeanTemp.setRegDate(rs.getTimestamp("reg_date"));
boardBeanTemp.setReadCount(rs.getInt("read_count"));
boardBeanTemp.setDepth(rs.getInt("depth"));
boardBeanTemp.setPos(rs.getInt("pos"));
boardBeanTemp.setContent(rs.getString("content"));
boardBeanTemp.setIp(rs.getString("ip"));
//8. 자반 객체를 배열 객체 Vector 담는다.
list.add(boardBeanTemp);
}
} catch (Exception e) {
e.getStackTrace();
} finally {
//9. ResultSet 객체를 반납한다.
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
}
}
//10. Statement 객체를 반납한다.
if (stmt != null) {
try {
stmt.close();
} catch (Exception e) {
}
}
//11. Connection 객체를 반납한다.
if (con != null) {
try {
con.close();
} catch (Exception e) {
}
}
}
//화면에 출력하는 방법 4가지
//=> 1. 기본for, 2. Enumeration while, 3. Iterator while 4. 향상된for
//첫번째 방법 기본 for
//12. 최대값을 찾는다.
for (int i=0; i<list.size(); i++ ){
//13. 배열에서 자바빈을 꺼낸다.
BoardBean boardBeanTemp = list.get(i);
//14. 자바빈에서 프로퍼티를 꺼낸다.
int num = boardBeanTemp.getNum();
String writer = boardBeanTemp.getWriter();
String email = boardBeanTemp.getEmail();
String subject = boardBeanTemp.getSubject();
String passwd = boardBeanTemp.getPasswd();
Timestamp regDate = boardBeanTemp.getRegDate();
int readCount = boardBeanTemp.getReadCount();
int depth = boardBeanTemp.getDepth();
int pos = boardBeanTemp.getPos();
String content = boardBeanTemp.getContent();
String ip = boardBeanTemp.getIp();
//15. 화면에 출력한다.
out.println(num +" ");
out.println(writer +" ");
out.println(email +" ");
out.println(subject +" ");
out.println(passwd +" ");
out.println(regDate +" ");
out.println(readCount +" ");
out.println(depth +" ");
out.println(pos +" ");
out.println(content +" ");
out.println(ip +" ");
out.println("<br>");
}
//두번째 방법 Enumeration while
//12. 열거형 배열클래스를 생성한다.
Enumeration<BoardBean> enu = (Enumeration<BoardBean>)list.elements();
//13. 배열객체에 자바빈이 있는지 확인한다.
while (enu.hasMoreElements()){
//14. 배열에서 자바빈을 꺼낸다.
BoardBean boardBeanTemp = (BoardBean)enu.nextElement();
//15. 자바빈에서 프로퍼티를 꺼낸다.
int num = boardBeanTemp.getNum();
String writer = boardBeanTemp.getWriter();
String email = boardBeanTemp.getEmail();
String subject = boardBeanTemp.getSubject();
String passwd = boardBeanTemp.getPasswd();
Timestamp regDate = boardBeanTemp.getRegDate();
int readCount = boardBeanTemp.getReadCount();
int depth = boardBeanTemp.getDepth();
int pos = boardBeanTemp.getPos();
String content = boardBeanTemp.getContent();
String ip = boardBeanTemp.getIp();
//16. 화면에 출력한다.
out.println(num +" ");
out.println(writer +" ");
out.println(email +" ");
out.println(subject +" ");
out.println(passwd +" ");
out.println(regDate +" ");
out.println(readCount +" ");
out.println(depth +" ");
out.println(pos +" ");
out.println(content +" ");
out.println(ip +" ");
out.println("<br>");
}
//세번째 방법 Iterator while
//12. 열거형 배열클래스를 생성한다.
Iterator<BoardBean> itr = list.iterator();
//13. 배열객체에 자바빈이 있는지 확인한다.
while (itr.hasNext()){
//14. 배열에서 자바빈을 꺼낸다.
BoardBean boardBeanTemp = (BoardBean)itr.next();
//15. 자바빈에서 프로퍼티를 꺼낸다.
int num = boardBeanTemp.getNum();
String writer = boardBeanTemp.getWriter();
String email = boardBeanTemp.getEmail();
String subject = boardBeanTemp.getSubject();
String passwd = boardBeanTemp.getPasswd();
Timestamp regDate = boardBeanTemp.getRegDate();
int readCount = boardBeanTemp.getReadCount();
int depth = boardBeanTemp.getDepth();
int pos = boardBeanTemp.getPos();
String content = boardBeanTemp.getContent();
String ip = boardBeanTemp.getIp();
//16. 화면에 출력한다.
out.println(num +" ");
out.println(writer +" ");
out.println(email +" ");
out.println(subject +" ");
out.println(passwd +" ");
out.println(regDate +" ");
out.println(readCount +" ");
out.println(depth +" ");
out.println(pos +" ");
out.println(content +" ");
out.println(ip +" ");
out.println("<br>");
}
//네번째 방법 향상된 for
//12.자바빈을 선언한다. 그리고 타입을 자바빈을 꺼내는 배열인스턴스로 지정한다.
for (BoardBean boardBeanTemp:list){
//13. 자바빈에서 프로퍼티를 꺼내고 출력한다.
out.println(boardBeanTemp.getNum() +" ");
out.println(boardBeanTemp.getWriter() +" ");
out.println(boardBeanTemp.getEmail() +" ");
out.println(boardBeanTemp.getSubject() +" ");
out.println(boardBeanTemp.getPasswd() +" ");
out.println(boardBeanTemp.getRegDate() +" ");
out.println(boardBeanTemp.getReadCount() +" ");
out.println(boardBeanTemp.getDepth() +" ");
out.println(boardBeanTemp.getPos() +" ");
out.println(boardBeanTemp.getContent() +" ");
out.println(boardBeanTemp.getIp() +" ");
out.println("<br>");
}
session.setAttribute("list",list);
%>
<script language="javascript"> location.href="writeResult2.jsp";</script>
======================== writeResult2.jsp =========================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="java.util.Vector,testjdbc.BoardBean" %>
<!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>
<%
Vector<BoardBean> list = (Vector<BoardBean>)session.getAttribute("list");
for (BoardBean boardBeanTemp:list){
//13. 자바빈에서 프로퍼티를 꺼내고 출력한다.
out.println(boardBeanTemp.getNum() +" ");
out.println(boardBeanTemp.getWriter() +" ");
out.println(boardBeanTemp.getEmail() +" ");
out.println(boardBeanTemp.getSubject() +" ");
out.println(boardBeanTemp.getPasswd() +" ");
out.println(boardBeanTemp.getRegDate() +" ");
out.println(boardBeanTemp.getReadCount() +" ");
out.println(boardBeanTemp.getDepth() +" ");
out.println(boardBeanTemp.getPos() +" ");
out.println(boardBeanTemp.getContent() +" ");
out.println(boardBeanTemp.getIp() +" ");
out.println("<br>");
}
</body>
</html>



