2020. 6. 23. 13:35ㆍjsp ,oracle 을 이용한 게시판 만들기
주제 : 글쓰기 기능 구현하기
우선 글쓰기 페이지를 만들기 위해 bbs.jsp 파일을 복사하여 write.jsp 파일을 생성해준다.
본래 4개 이던 테이블 데이터 두개를 삭제해 두개만 남겨주고 , 위에 보이는 코드와 같이 수정
<input type ="text" class="form-control" placeholder="글 제목".........> (글작성 폼의 제목 부분)
<textarea ...............></textarea> (글작성 폼의 내용 부분)
이제 글 작성후 글쓰기 버튼을 눌렀을시 액션이 실행될수 있도록 BbsDAO 클래스를 생성한다.
그리고 나서 아래와 같이 UserDAO 에서 데이터베이스 연결하는 부분을 그대로 복사하여 붙여넣기 해준다.
(참고로 private preparedStatement pstmt; 부분은 삭제해줬습니다.)
이제는 우리가 게시판 글쓰기에 필요한 기능들을 실행시키 위한 함수를 작성해 줄것이다.
public String getDate() { //현재시간 가져오는 함수
String SQL = "SELECT NOW()";
try {
PreparedStatement pstmt = conn.prepareStatement(SQL); //sql실행준비 단계
rs = pstmt.executeQuery(); //실행시 나오는 결과 가져옴
if(rs.next()) {
return rs.getString(1);
}
}catch(Exception e) {
e.printStackTrace();
}
return ""; //데이터베이스 오류
}
public int getNext() { //글의 번호 정해주는 함수
String SQL = "SELECT bbsID FROM BBS ORDER BY bbsID DESC"; //마지막에 쓰인글 번호 겟
try {
PreparedStatement pstmt = conn.prepareStatement(SQL); //sql실행준비 단계
rs = pstmt.executeQuery(); //실행시 나오는 결과 가져옴
if(rs.next()) {
return rs.getInt(1) + 1;
}
return 1; //첫번째 게시물인 경우
}catch(Exception e) {
e.printStackTrace();
}
return -1; //데이터베이스 오류
}
public int write(String bbsTitle, String userID, String bbsContent) {
String SQL = "INSERT INTO BBS VALUES (?,?,?,?,?,?)"; //마지막에 쓰인글 번호 겟
try {
PreparedStatement pstmt = conn.prepareStatement(SQL); //sql실행준비 단계
pstmt.setInt(1, getNext());
pstmt.setString(2, bbsTitle);
pstmt.setString(3, userID);
pstmt.setString(4, getDate());
pstmt.setString(5, bbsContent);
pstmt.setInt(6, 1); //첫 작성시 글은 삭제가 안된 형태
return pstmt.executeUpdate(); //첫번째 게시물인 경우
}catch(Exception e) {
e.printStackTrace();
}
return -1; //데이터베이스 오류
}
}
코드를 다 작성했으면 bbs빈즈를 이용하는 jsp 페이지 writeAction.jsp 페이지를 만들어준다.
Bbs빈즈를 사용할것이기 때문에 다음과 같이 수정해준다.
하고 나서 아래와 같이 코르 작성
<%@ page import="bbs.BbsDAO" %>
<%@ page import ="java.io.PrintWriter" %>
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:useBean id="bbs" class="bbs.Bbs" scope="page" />
<jsp:setProperty name="bbs" property="bbsTitle" />
<jsp:setProperty name="bbs" property="bbsContent" />
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>>JSP 게시판 웹 사이트</title>
</head>
<body>
<%
String userID = null;
if(session.getAttribute("userID") !=null){
userID = (String)session.getAttribute("userID"); //session id담는 변수
}
if(userID == null){ //로그아웃 상태로 글작성 시도시
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('로그인을 하세요.')");
script.println("location.href = 'login.jsp'");
script.println("</script>");
}else {
if(bbs.getBbsTitle() == null || bbs.getBbsContent() == null){//입력폼을 완성하지 않은경우
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('입력이 안 된 사항이 있습니다.')");
script.println("history.back()");
script.println("</script>");
} else {
BbsDAO bbsDAO = new BbsDAO();
int result = bbsDAO.write(bbs.getBbsTitle(), userID, bbs.getBbsContent());
if(result == -1){ //동일한 아이디 데이터가 존재할때
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('글쓰기에 실패했습니다.')");
script.println("history.back()");
script.println("</script>");
}
else { //회원가입이 되었을때 바로 로그인 동작.
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
}
}
}
%>
</body>
</html>
여기까지하면 게시판글쓰기 기능과, 글쓰기 버튼을 눌렀을때 DB에 연동되서 MySQL의 bbs테이블에 기록이 남는다.
이제 터미널에서 SELECT * FROM BBS; 를 입력하게 되면
이렇게 우리가 작성한 글이 데이터 베이스에 담겨져 있는걸 볼 수 있다.
출처: https://www.youtube.com/watch?v=EmbxlHakkfY&list=PLRx0vPvlEmdAZv_okJzox5wj2gG_fNh_6&index=10