○ SQL
- 테이블(tb_bbs) 생성
create table tb_bbs(
bbsno number(5) not null -- 일련번호 -99999~99999
,wname varchar2(20) not null -- 작성자
,subject varchar2(100) not null -- 글제목
,content varchar2(2000) not null -- 글내용
,passwd varchar2(10) not null -- 글비밀번호
,readcnt number(5) default 0 not null -- 글조회수
,regdt date default sysdate -- 글작성일
,grpno number(5) not null -- 글 그룹번호
,indent number(5) default 0 -- 들여쓰기
,ansnum number(5) default 0 -- 글순서
,ip varchar2(15) not null -- 글 IP
,primary key(bbsno) -- bbsno 기본키
);
- 시퀀스(bbs_seq) 생성
create sequence bbs_seq;
○ 데이터 전송 객체 (DTO; Data Transfer Object)
package net.bbs;
public class BbsDTO {//전송객체
//멤버변수 field (tb_bbs테이블 칼럼명 기준)
private int bbsno;
private String wname;
private String subject;
private String content;
private String passwd;
private int readcnt;
private String regdt;
private int grpno;
private int indent;
private int ansnum;
private String ip;
//생성자함수 constructor
public BbsDTO() { }
//getters and setters
public int getBbsno() {
return bbsno;
}
public void setBbsno(int bbsno) {
this.bbsno = bbsno;
}
public String getWname() {
return wname;
}
public void setWname(String wname) {
this.wname = wname;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public int getReadcnt() {
return readcnt;
}
public void setReadcnt(int readcnt) {
this.readcnt = readcnt;
}
public String getRegdt() {
return regdt;
}
public void setRegdt(String regdt) {
this.regdt = regdt;
}
public int getGrpno() {
return grpno;
}
public void setGrpno(int grpno) {
this.grpno = grpno;
}
public int getIndent() {
return indent;
}
public void setIndent(int indent) {
this.indent = indent;
}
public int getAnsnum() {
return ansnum;
}
public void setAnsnum(int ansnum) {
this.ansnum = ansnum;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
@Override
public String toString() {
return "BbsDTO [bbsno=" + bbsno + ", wname=" + wname + ", subject=" + subject
+ ", content=" + content + ", passwd=" + passwd + ", readcnt=" + readcnt
+ ", regdt=" + regdt + ", grpno=" + grpno + ", indent=" + indent
+ ", ansnum=" + ansnum + ", ip=" + ip + "]";
}
}//class end
○ 데이터 접근 객체 (DAO; Data Access Object)
package net.bbs;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import net.utility.DBclose;
import net.utility.DBopen;
public class BbsDAO {//데이터베이스 관련 작업
private DBopen dbopen=null;
private Connection con=null;
private PreparedStatement pstmt=null;
private ResultSet rs=null;
private StringBuilder sql=null;
public BbsDAO() {
dbopen=new DBopen();
}//default constructor
public int create(BbsDTO dto) {
int cnt=0; //성공 또는 실패 여부 반환
try {
con=dbopen.getConnection();//DB연결
sql=new StringBuilder();
sql.append(" INSERT INTO tb_bbs(bbsno, wname, subject, content, passwd, ip, grpno) ");
sql.append(" VALUES(bbs_seq.nextval, ?, ?, ?, ?, ?, (SELECT NVL(MAX(bbsno), 0)+1 FROM tb_bbs)) ");
pstmt = con.prepareStatement(sql.toString());
pstmt.setString(1, dto.getWname());
pstmt.setString(2, dto.getSubject());
pstmt.setString(3, dto.getContent());
pstmt.setString(4, dto.getPasswd());
pstmt.setString(5, dto.getIp());
cnt=pstmt.executeUpdate();
} catch (Exception e) {
System.out.println("행추가 실패: " + e);
}finally{
DBclose.close(con, pstmt);
}//try end
return cnt;
}//create() end
}//class end
○ 공통 코드 (ssi.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- ssi.jsp 공통코드 --%>
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="net.bbs.*" %>
<jsp:useBean id="dao" class="net.bbs.BbsDAO" scope="page"></jsp:useBean>
<jsp:useBean id="dto" class="net.bbs.BbsDTO" scope="page"></jsp:useBean>
<% request.setCharacterEncoding("UTF-8"); %>
○ 게시글 쓰기
① 게시글 작성폼 (bbsForm.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp"%>
<%@ include file="../header.jsp"%>
<!-- 본문시작 bbsForm.jsp -->
<img src="../images/bbsForm.png" style="margin: auto;" >
<p><a href="bbsList.jsp">[글목록]</a></p>
<div class="container">
<form name="bbsfrm" id="bbsfrm" method="post" action="bbsIns.jsp" onsubmit="return bbsCheck()">
<table class="table">
<tr>
<th>작성자</th>
<td>
<input type="text" name="wname" id="wname" class="form-control"
maxlength="20" required>
</td>
</tr>
<tr>
<th>제목</th>
<td>
<input type="text" name="subject" id="subject" class="form-control"
maxlength="100" required>
</td>
</tr>
<tr>
<th>내용</th>
<td>
<textarea rows="5" class="form-control" name="content" id="content"></textarea>
</td>
</tr>
<tr>
<th>비밀번호</th>
<td>
<input type="password" name="passwd" id="passwd" class="form-control"
maxlength="10" required>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input id="bbsBtn" type="submit" value="쓰기" class="btn">
<input id="bbsBtn" type="reset" value="취소" class="btn">
</td>
</tr>
</table>
</form>
</div>
<!-- 본문끝 -->
<%@ include file="../footer.jsp"%>
② 게시글 작성 프로세스 (bbsIns.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp"%>
<%@ include file="../header.jsp"%>
<!-- 본문시작 bbsIns.jsp -->
<h3> 글 작 성 결 과</h3>
<p><a href="bbsForm.jsp">[글쓰기]</a></p>
<p><a href="bbsList.jsp">[글목록]</a></p>
<%
//사용자가 입력 요청한 정보를 가져오기
String wname = request.getParameter("wname").trim();
String subject = request.getParameter("subject").trim();
String content = request.getParameter("content").trim();
String passwd = request.getParameter("passwd").trim();
String ip = request.getRemoteAddr(); //요청 PC의 IP
//dto 객체에 담기
dto.setWname(wname);
dto.setSubject(subject);
dto.setContent(content);
dto.setPasswd(passwd);
dto.setIp(ip);
int cnt=dao.create(dto);
if(cnt==0){
out.println("<p>글 작성이 실패했습니다</p>");
out.println("<p><a href='javascript:history.back()'>[다시시도]</a></p>");
}else{
out.println("<script>");
out.println(" alert('게시글이 추가되었습니다');");
out.println(" location.href='bbsList.jsp';");
out.println("</script>");
}//if end
%>
<!-- 본문끝 -->
<%@ include file="../footer.jsp"%>
③ 게시글 작성 유효성 검사 (myscript.js)
function bbsCheck(){//게시판 유효성 검사
//1) 작성자 2글자 이상 입력
var wname=document.getElementById("wname").value; //작성자 가져오기
wname=wname.trim(); //좌우 공백 제거하기
if(wname.length<2){
alert("작성자는 2글자 이상 입력해 주세요");
document.getElementById("wname").focus(); //작성자 칸에 커서 생성
return false; //전송하지 않음
}//if end
//2) 제목 2글자 이상 입력
var subject=document.getElementById("subject").value; //제목 가져오기
subject=subject.trim(); //좌우 공백 제거하기
if(subject.length<2){
alert("제목은 2글자 이상 입력해 주세요");
document.getElementById("subject").focus(); //제목 칸에 커서 생성
return false; //전송하지 않음
}//if end
//3) 내용 2글자 이상 입력
var content=document.getElementById("content").value; //내용 가져오기
content=content.trim(); //좌우 공백 제거하기
if(content.length<2){
alert("제목은 2글자 이상 입력해 주세요");
document.getElementById("content").focus(); //내용 칸에 커서 생성
return false; //전송하지 않음
}//if end
//4) 비밀번호는 4글자 이상이면서, 숫자형 기호만 입력
var passwd=document.getElementById("passwd").value;
passwd=passwd.trim();
if(passwd.length<4 || isNaN(passwd)){
alert("비밀번호는 4글자 이상 숫자로 입력해 주세요");
document.getElementById("passwd").focus(); //비밀번호 칸에 커서 생성
return false;
}//if end
return true; //onsubmit 이벤트에서 서버로 전송
}//bbsCheck() end
'Project > myweb_JAVA' 카테고리의 다른 글
05. 답변형 게시판 ③ (게시글 삭제, 게시글 수정, 답변 쓰기) (0) | 2022.07.26 |
---|---|
04. 답변형 게시판 ② (게시글 목록, 게시글 상세보기) (0) | 2022.07.21 |
02. 인덱스 페이지 및 템플릿 작성 (0) | 2022.07.19 |
01. JAVA기반 My Web 미니 프로젝트 (프로젝트 생성, 환경 설정) (0) | 2022.07.18 |
00. myweb프로젝트 관련, Maria DB와 Oracle DB 쿼리 차이 (0) | 2022.05.21 |
댓글