글쓰기 기능 구현하기

민주·2021년 2월 8일
[write.jsp]
<div class="container">
    <div class="row">
	<form action="writeAction.jsp" method="post">
	  <table class="table table-striped" style="border: 1px solid #dddddd">
	    <thead>
		<tr>
		  <th colspan="2" style="background-color: #eeeeee; 
          		text-align: center;">게시판글쓰기 양식</th>
		</tr>
	    </thead>
	    <tbody>
		<tr>
		  <td><input type="text" class="form-control"
			placeholder="글 제목" name="bbsTitle" maxlength="50" /></td>
		</tr>
		<tr>
		  <td><textarea class="form-control" placeholder="글 내용" 
          		name="bbsContent" maxlength="2048" style="height: 350px;">
                      </textarea></td>
		</tr>
	    </tbody>
	</table>
	<input type="submit" class="btn btn-primary pull-right" value="글쓰기"/>
      </form>
    </div>
  </div>
- 글쓰기 버튼을 눌렀을때 보여지는 화면
- 코드 위쪽 네비게이션 부분은 main.jsp와 같다.
- 글쓰기의 내용은 writeAction.jsp로 보내진다.
[BbsDAO.java]
public String getDate() { //현재시간을 가져오는 함수
    String SQL = "SELECT NOW()"; //현재시간을 가져오는 MYsql 문장
    try {
	PreparedStatement pstmt = conn.prepareStatement(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); 
	rs= pstmt.executeQuery();
	if(rs.next()) {
	    return rs.getInt(1)+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); 
	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; //데이터베이스 오류발생
}
- getDate()
    - 현재시간은 가져오는 SELECT문을 사용하여 ResultSet으로 현재시간을 반환해준다.
    - write()함수에 작성날짜를 넣는 부분에서 사용된다.
- getNext()
    - SELECT문으로 bbsID를 내림차순으로 가져와서 인덱스 1번은 제일 마지막작성번호
    - write()함수에 게시글번호를 넣는 부분에서 사용된다.
- write()
    - 실직적으로 writeAction.jsp에서 사용하는 함수이다.
    - bbsTitle과 bbsContent는 write.jsp에서 받아와 name과 자바빈의 property명과 동일한 것에 
      대응하여 데이터베이스에 값을 넣는다.
    - executeUpdate()는 쿼리 성공개수를 int로 반환
<%@ 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");
	  }
	  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>
- write.jsp에서 글을 작성하고 글쓰기버튼을 눌렀을 때  writeActon.jsp로 오게 되는데
  이 때 로그인을 안해서 session값이 없으면 alert을 띄우고 login.jsp로 이동하게 한다.
- 로그인을 해서 세션값이 있는 경우에는 BbsTitle과 BbsContent값이 정상적으로 
  들어오지 않았다면 전페이지로 돌려보낸다. 
- BbsTitle과 BbsContent값이 정상적으로 들어왔다면 BbsDAO를 객체화 시켜 write함수를 사용한다.
profile
개발이좋아요

0개의 댓글