JSP게시판 - BoardWriteProc, 게시글 등록
[게시글 쓰기] 작성 순서
글쓰기 > 글쓰기 처리 > 글쓰기 저장 > 전체게시글 보기
작성한 내용을 jsp에서 읽어들이고 boardDAO로 넘겨 게시글을 등록하기
BoardWriteProc 페이지에서 입력한 데이터를 DB에 저장하는 boardDAO.insertBoard ( BoardBean boardbean ) 메서드를 호출한다.
BoardWriteProc.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <%@page import="model.*"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <body> <!-- 게시글 작성한 데이터를 한번에 읽어들임 (1:1 맵핑) 없는 요소는 null로 들어감--> <jsp:useBean id="boardbean" class="model.BoardBean"> <jsp:setProperty name="boardbean" property="*" /> </jsp:useBean> <% //데이터베이스쪽으로 빈클래스 넘겨주기 //DAO객체 생성 BoardDAO bdao = new BoardDAO(); //데이터 저장(게시판 정보 삽입) 메서드 호출 bdao.insertBoard(boardbean); %> </body> </html> | cs |
insertBoard()에서는
boardbean이 null로 맵핑한 필드들을 알맞은 값으로 초기화해줘야한다.
ref 글 그룹(NUMBER) : 0으로 초기화, 쿼리를 실행시켜서 가장 큰 ref 값에 +1 더하여 글 그룹 번호 부여
re_step 글 스텝(NUMBER) : 1로 초기화, 새 글 = 최상위 글이니 1부터 시작
re_level 글 레벨(NUMBER) : 1로 초기화
BoardDAO.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | package model; 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() { try { // 외부에서 데이터를 읽어들여야한다 Context initctx = new InitialContext(); // 톰캣 서버의 정보를 담아놓은 곳으로 이동 Context envctx = (Context) initctx.lookup("java:comp/env"); // 데이터소스 객체(javax.sql.DataSource)를 선언 // server.xml Context Resource에서 설정한 name을 매개값으로 준다. DataSource ds = (DataSource) envctx.lookup("jdbc/pool"); // Resource이름을 매개값으로 주어 DataResource객체를 리턴 // 외부에서 데이터를 읽어들이는 Context 객체를 생성 // 그 객체의 lookup메서드로 톰캣서버정보를 읽어들이고 // 톰캣서버정보를 읽어들인 객체의 lookup메서드 리소스이름을 매개값으로 주어 // 데이터소스객체(커넥션풀 사용할때 쓰기로한 객체)를 얻는다 // (커넥션풀)데이터소스를 이용하여 접속 con = ds.getConnection(); } catch (Exception e) { e.printStackTrace(); } } //하나의 새로운 게시글이 넘어와서 저장되는 메서드 public void insertBoard(BoardBean boardbean) { getCon(); //빈클래스에 넘어오지 않았던 데이터들을 초기화해주어야한다. //글 그룹: 쿼리를 실행시켜서 가장 큰 red 값에 +1 더하여 글 그룹 번호 부여하면 된다. int ref = 0; //글 int re_step=1; int re_level =1; try { //가장 큰 ref값을 읽어오는 쿼리 준비 String refsql = "select max(ref) from board"; //쿼리 실행 객체 pstmt = con.prepareStatement(refsql); //쿼리 실행 후 결과 리턴, 리턴받은 결과는 ResultSet 객체로 받는다. rs = pstmt.executeQuery(); if(rs.next()) { //쿼리 결과값이 있다면 //DB에 있는 ref 최대값에 1더하여 글그룹 NUMBER 부여 ref = rs.getInt(1)+1; } //실제로 게시글 전체값을 테이블에 저장 //만들어둔 board_seq 시퀀스 사용, //NEXTVALUE : 시퀀스에 들어가 있는 값에 자동으로 1씩(설정한 만큼) 증가시켜 다음 값에 저장 //sysdate : 현재 시스템에서 읽은 날짜 데이터 // ref, re_step, re_level을 ? 대신 넣는게 아니라 pstmt로 데이터 set시켜줘야함 //readcount는 초기값인 0을 준다. //???? String sql = "insert into board values(board_seq.NEXTVAL,?,?,?,?, sysdate,?,?,?,0,?)"; pstmt = con.prepareStatement(sql); //?에 값을 맵핑 pstmt.setString(1,boardbean.getWriter()); pstmt.setString(2,boardbean.getEmail()); pstmt.setString(3,boardbean.getSubject()); pstmt.setString(4,boardbean.getPassword()); pstmt.setInt(5,ref); pstmt.setInt(6,re_step); pstmt.setInt(7,re_level); pstmt.setString(8, boardbean.getContent()); //쿼리 실행 //쿼리 실행 후 결과 리턴은 executeQuery(), //데이터 업데이트는 executeUpdate() pstmt.executeUpdate(); //자원 반납 con.close(); } catch(Exception e) { e.printStackTrace(); } } } | cs |