Q1. 게시판 글쓰기
DB연동으로 게시판에서 작성한 글이 저장되게 한다
[ 게시판 구성 파일 ]
글쓰기에 필요한 1~5까지 사용
1. Board.sql
2. DataBean.java_(class)
3. DBBean.java _(class)
4. writeForm.jsp
5. writePro.jsp
1. Board.sql
게시물 작성 시 필요항목들로 구성된 table을 생성 (오라클)
-- 테이블 board 생성
create table board(
num number(4) primary key,
writer varchar2(10) not null,
email varchar2(30),
subject varchar2(50) not null,
passwd varchar2(12) not null,
reg_date date not null,
readcount number(4) DEFAULT 0,
ref number(2) not null,
re_step number(2) not null,
re_level number(2) not null,
content varchar2(500) not null,
ip varchar2(20) not null
);
-- 시퀀스 seq_board 생성 (게시판 num값 순차적으로 번호 할당)
create sequence seq_board
increment by 1
start with 1
nocycle;
2. DataBean.java_(class)
view에서 클라이언트가 입력할 항목 및 시스템 시간 등 선언
package board;
import java.sql.Timestamp;
public class BoardDataBean {
private int num;
private String writer;
private String subject;
private String email;
private String content;
private String passwd;
private Timestamp reg_date;
private int readcount;
private String ip;
private int ref;
private int re_step;
private int re_level;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
// getter setter 생략. 위 getNum 과 setNum처럼 모두 생성
// source -> getter / setter .... -> select all
}
3. DBBean.java _(class)
커넥션 풀을 이용한 DB연동
web.xml 등 사전 정의를 해두어야 lookup으로 찾을 수 있다.
package board;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class BoardDBBean {
private static BoardDBBean instance = new BoardDBBean();
//.jsp페이지에서 DB연동빈인 BoardDBBean클래스의 메소드에 접근시 필요
public static BoardDBBean getInstance() {
return instance;
}
private BoardDBBean() {}
//커넥션풀로부터 Connection객체를 얻어냄
private Connection getConnection() throws Exception {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/basicjsp");
return ds.getConnection();
}
//board테이블에 글을 추가(inset문)<=writePro.jsp페이지에서 사용
public void insertArticle(BoardDataBean article)
throws Exception {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int num=article.getNum();
int ref=article.getRef();
int re_step=article.getRe_step();
int re_level=article.getRe_level();
int number=0;
String sql="";
try {
conn = getConnection();
pstmt = conn.prepareStatement("select max(num) from board");
rs = pstmt.executeQuery();
if (rs.next())
number=rs.getInt(1)+1;
else
number=1;
if (num!=0) {
sql="update board2 set re_step=re_step+1 ";
sql += "where ref= ? and re_step> ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, ref);
pstmt.setInt(2, re_step);
pstmt.executeUpdate();
re_step=re_step+1;
re_level=re_level+1;
}else{
ref=number;
re_step=0;
re_level=0;
}
// 쿼리를 작성
sql = "insert into board(num,writer,email,subject,passwd,reg_date,";
sql+="ref,re_step,re_level,content,ip) values(seq_board.nextval,?,?,?,?,?,?,?,?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, article.getWriter());
pstmt.setString(2, article.getEmail());
pstmt.setString(3, article.getSubject());
pstmt.setString(4, article.getPasswd());
pstmt.setTimestamp(5, article.getReg_date());
pstmt.setInt(6, ref);
pstmt.setInt(7, re_step);
pstmt.setInt(8, re_level);
pstmt.setString(9, article.getContent());
pstmt.setString(10, article.getIp());
pstmt.executeUpdate();
} catch(Exception e) {
System.out.println("insertArticle(BoardDataBean article) 익셉션 발생");
e.printStackTrace();
} finally {
if (rs != null) try { rs.close(); } catch(SQLException ex) {}
if (pstmt != null) try { pstmt.clearParameters(); } catch(SQLException ex) {}
if (conn != null) try { conn.close(); } catch(SQLException ex) {}
}
}
}
4. writeForm.jsp
클라이언트에게 보여질 form
게시글 번호 등을 위한 java문이 섞여있다 <% %>
action="write.pro.jsp" 이기 때문에 처리하는 로직은 그 곳에서 한다
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>게시판</title>
</head>
<body>
<%
int num = 0, ref = 1, re_step = 0, re_level = 0;
String strV = "";
try{
if(request.getParameter("num")!=null){
num=Integer.parseInt(request.getParameter("num"));
ref=Integer.parseInt(request.getParameter("ref"));
re_step=Integer.parseInt(request.getParameter("re_step"));
re_level=Integer.parseInt(request.getParameter("re_level"));
}
%>
<p>글쓰기</p>
<form method="post" name="writeform" action="writePro.jsp" onsubmit="return writeSave()">
<input type="hidden" name="num" value="<%=num%>">
<input type="hidden" name="ref" value="<%=ref%>">
<input type="hidden" name="re_step" value="<%=re_step%>">
<input type="hidden" name="re_level" value="<%=re_level%>">
<table>
<tr>
<td align="right" colspan="2">
<a href="list.jsp"> 글목록</a>
</td>
</tr>
<tr>
<td width="70" align="center">이 름</td>
<td width="330" align="left">
<input type="text" size="10" maxlength="10" name="writer" >
</td>
</tr>
<tr>
<td width="70" align="center" >제 목</td>
<td width="330" align="left">
<%
if(request.getParameter("num")==null)
strV = "";
else
strV = "[답변]";
%>
<input type="text" size="40" maxlength="50" name="subject" value="<%=strV%>">
</td>
</tr>
<tr>
<td width="70" align="center">Email</td>
<td width="330" align="left">
<input type="text" size="40" maxlength="30" name="email"> </td>
</tr>
<tr>
<td width="70" align="center" >내 용</td>
<td width="330" align="left">
<textarea name="content" rows="13" cols="40"> </textarea> </td>
</tr>
<tr>
<td width="70" align="center" >비밀번호</td>
<td width="330" align="left">
<input type="password" size="8" maxlength="12" name="passwd">
</td>
</tr>
<tr>
<td colspan=2 align="center">
<input type="submit" value="글쓰기" >
<input type="reset" value="다시작성">
<input type="button" value="목록보기" OnClick="window.location='list.jsp'">
</td>
</tr>
</table>
<%
}catch(Exception e){}
%>
</form>
</body>
</html>
5. writePro.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "board.BoardDBBean" %>
<%@ page import = "java.sql.Timestamp" %>
<%
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="article" scope="page" class="board.BoardDataBean">
<jsp:setProperty name="article" property="*"/>
</jsp:useBean>
<%
article.setReg_date(new Timestamp(System.currentTimeMillis()) );
article.setIp(request.getRemoteAddr());
BoardDBBean dbPro = BoardDBBean.getInstance();
dbPro.insertArticle(article);
response.sendRedirect("list.jsp");
%>'DEV Heart' 카테고리의 다른 글
| [ MVC 1 게시판 ] #3 상세 내용 보기(content) (0) | 2021.09.08 |
|---|---|
| [ MVC 1 게시판 ] #2 리스트 출력하기 (List) (0) | 2021.09.08 |
| [ MVC 1 게시판 ] #1 DB연동 (JavaBean) (0) | 2021.09.08 |
| [ HashMap ] #3 HashMap으로 2개 Table 출력하기 (Inner Join) (0) | 2021.09.01 |
| [ HashMap ] #2 HashMap으로 Sql table 출력하기 (0) | 2021.08.31 |