1. 게시판 만들기


create table board_1(

id    number(20) not null,

name   varchar2(20) not null,

passwd   varchar2(20) not null,

title   varchar2(100) not null,

email   varchar2(30) not null,

regdate   date  null,

content   varchar2(20) not null,

primary key(id))



create sequence board_1_seq

start with 1

increment by 1

maxvalue 100000

nocache




package univ;


import java.util.Date;


public class BoardEntity {

private int id;

private String name;

private String passwd;

private String title;

private String email;

private Date regdate;

private String content;

//자동으로 생성된, 모든 필드에 대한 getter와 setter

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPasswd() {

return passwd;

}

public void setPasswd(String passwd) {

this.passwd = passwd;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

public Date getRegdate() {

return regdate;

}

public void setRegdate(Date regdate) {

this.regdate = regdate;

}

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

}

BoardEntity.java 저장




package univ;


import java.sql.*;

import java.util.*;

import javax.sql.*;

import javax.naming.*;


//DBCP를 이용한 테이블 board 처리 데이터베이스 연동 자바빈즈 프로그램

public class BoardDBCP {

// 데이터베이스 연결관련 변수 선언

private Connection con = null;

private PreparedStatement pstmt = null;

private DataSource ds = null;

// JDBC 드라이버 로드 메소드

public BoardDBCP(){

try{

InitialContext ctx = new InitialContext();

ds = (DataSource) ctx.lookup("java:comp/env/jdbc/OracleDB");

}catch(Exception e){

e.printStackTrace();

}

}

// 데이터베이스 연결 메소드

public void connect(){

try{

con = ds.getConnection();

}catch(Exception e){

e.printStackTrace();

}

}

// 데이터베이스 연결 해제 메소드

public void disconnect(){

if(pstmt !=null){

try{

pstmt.close();

}catch(SQLException e){

e.printStackTrace();

}

}

if(con != null){

try{

con.close();

}catch (SQLException e) {

e.printStackTrace();

}

}

}

// 게시판의 모든 레코드를 반환 메서드

public ArrayList<BoardEntity> getBoardList(){

connect();

ArrayList<BoardEntity> list= new ArrayList<BoardEntity>();

String SQL = "select * from board_1";

try{

pstmt = con.prepareStatement(SQL);

ResultSet rs = pstmt.executeQuery();

while (rs.next()) {

BoardEntity brd = new BoardEntity();

brd.setId(rs.getInt("id"));

brd.setName(rs.getString("name"));

brd.setPasswd(rs.getString("passwd"));

brd.setTitle(rs.getString("title"));

brd.setEmail(rs.getString("email"));

brd.setRegdate(rs.getTimestamp("regdate"));

brd.setContent(rs.getString("content"));

//리스트에 추가

list.add(brd);

}

rs.close();

}catch(SQLException e){

e.printStackTrace();

}

finally {

disconnect();

}

return list;

}

// 주 키 id의 레코드를 반환하는 메서드

public BoardEntity getBoard(int id){

connect();

String SQL = "select * from board_1 where id = ?";

BoardEntity brd = new BoardEntity();

try{

pstmt = con.prepareStatement(SQL);

pstmt.setInt(1, id);

ResultSet rs = pstmt.executeQuery();

rs.next();

brd.setId(rs.getInt("id"));

brd.setName(rs.getString("name"));

brd.setPasswd(rs.getString("passwd"));

brd.setTitle(rs.getString("title"));

brd.setEmail(rs.getString("email"));

brd.setRegdate(rs.getTimestamp("regdate"));

brd.setContent(rs.getString("content"));

rs.close();

}catch(SQLException e){

e.printStackTrace();

}finally{

disconnect();

}

return brd;

}

// 게시물 등록 메서드

public boolean insertDB(BoardEntity board){

boolean success = false;

connect();

String sql = "insert into board_1 values(board_1_seq.nextval, ?, ?, ?, ?, sysdate, ?)";

try{

pstmt = con.prepareStatement(sql);

pstmt.setString(1, board.getName());

pstmt.setString(2, board.getPasswd());

pstmt.setString(3, board.getTitle());

pstmt.setString(4, board.getEmail());

pstmt.setString(5, board.getContent());

pstmt.executeUpdate();

success = true;

}catch (SQLException e) {

e.printStackTrace();

return success;

}

finally {

disconnect();

}

return success;

}

// 데이터 갱신을 위한 메서드

public boolean updateDB(BoardEntity board){

boolean success = false;

connect();

String sql = "update board_1 set name=?, title=?, email=?, content=?, where id=?";

try{

pstmt = con.prepareStatement(sql);

// 인자로 받은 GuestBook 객체를 이용해 사용자가 수정한 값을 가져와 SQL문 완성

pstmt.setString(1, board.getName());

pstmt.setString(2, board.getTitle());

pstmt.setString(3, board.getEmail());

pstmt.setString(4, board.getContent());

pstmt.setInt(5, board.getId());

int rowUdt = pstmt.executeUpdate();

//System.out.println(rowUdt);

if(rowUdt == 1) success = true;

}catch(SQLException e){

e.printStackTrace();

return success;

}

finally {

disconnect();

}

return success;

}

// 게시물 삭제를 위한 메서드

public boolean deleteDB(int id){

boolean success = false;

connect();

String sql = "delete from board_1 where id=?";

try{

pstmt = con.prepareStatement(sql);

// 인자로 받은 주 키인 id 값을 이용해 삭제

pstmt.setInt(1, id);

pstmt.executeUpdate();

success = true;

}catch(SQLException e){

e.printStackTrace();

return success;

}

finally {

disconnect();

}

return success;

}

// 데이터베이스에서 인자인 id와 passwd가 일치하는지 검사하는 메서드

public boolean isPasswd(int id, String passwd){

boolean success = false;

connect();

String sql = "select passwd from board_1 where id=?";

try{

pstmt = con.prepareStatement(sql);

pstmt.setInt(1, id);

ResultSet rs = pstmt.executeQuery();

rs.next();

String orgPasswd = rs.getString(1);

if(passwd.equals(orgPasswd)) success = true;

System.out.println(success);

rs.close();

}catch(SQLException e){

e.printStackTrace();

return success;

}

finally {

disconnect();

}

return success;

}

}

BoardDBCP.java 저장




<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>게시판 기본 예제 : 게시 폼 작성</title>

</head>


<!-- 파일 boardform.js : 폼의 각 입력 값이 있는지를 검토하는 함수 구현 -->

<script language=JavaScript src="boardform.js"></script>


<body>


<%@ page import="univ.*" %>

<%

String name = "";

String email = "";

String title = "";

String content = "";

String headline = "등록";

String id = request.getParameter("id");

if(id != null){

//등록이 아닌 경우, 출력을 위해 선택한 게시의 각 필드 내용을 저장

int idnum = Integer.parseInt(id);

BoardDBCP brddb = new BoardDBCP();

BoardEntity brd = brddb.getBoard(idnum);

name = brd.getName();

email = brd.getEmail();

title = brd.getTitle();

content = brd.getContent();

headline = "수정 삭제";

};

%>

<h2>게시판 <%=headline %> 프로그램 </h2> <hr>


<center><form name = boardform method=post action ="processboard.jsp">

<!-- menu : 등록, 수정 또는 삭제 구분을 위한 매개변수로 이용 -->

<input type=hidden name="menu" value="insert">

<!-- 수정 또는 삭제를 위한 게시 id를 hidden으로 전송 -->

<input type=hidden name="id" value=<%=id %>>


<table width=100% border=0 cellspacing=0 cellpadding=7>

<tr><td align=center>


<table border=0>

<tr><td colspan=2>

<table>

<tr>

<td width=50>이 름 : </td>

<td width=100>

<input type=text name=name value="<%=name %>" size=20 maxlength=20></td>

<td width=80>전자메일 : </td>

<td width=100>

<input type=text name=email size=20 value="<%=email%>" maxlength=30></td>

</tr>

<tr>

<td width=50>제 목 : </td>

<td colspan=3>

<input type=text name=title size=80 value="<%=title%>" maxlength=80></td>

</tr>

</table>

</td></tr>


<tr><td colspan=2>

<textarea name=content rows=10 cols=80><%=content%></textarea></td></tr>

<tr>

<td colspan=2>비밀번호 : 

<input type=password name=passwd size=20 maxlength=15><font color=red>


현재 게시 내용을 수정 또는 삭제하려면 이미 등록한 비밀번호가 필요합니다.</font></td>

</tr>

<tr>

<td colspan=2 height=5><hr size=2></td>

</tr>

<tr>

<td colspan=2>

<% if (id == null) { %>

<!-- 버튼을 누르면 boardform.js의 함수를 실행하여 processboard.jsp로 이동 -->

<input type=button value="등록" onClick="insertcheck()">

<% } else { %>

<!-- 버튼을 누르면 boardform.js의 각 함수를 실행하여 processboard.jsp로 이동 -->

<input type=button value="수정완료" onClick="updatecheck()">

<input type=button value="삭제" onClick="deletecheck()">

<%} %>

<!-- 목록보기 버튼은 listboard.jsp로 이동 -->

<input type=button value="목록보기" onClick="location.href='listboard.jsp'">

<input type=reset value="취소">

</td>

</tr>

</table>

</td></tr>

</table>

</form>

</center>


</body>

</html>

editboard.jsp 저장




<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>게시판 기본 예제 : 게시 등록 수정 삭제 처리</title>

</head>

<body>

<!-- 게시의 등록, 수정, 삭제를 위한 자바빈즈 이용 선언 -->

<jsp:useBean id="brd" class="univ.BoardEntity" scope="page" />

<jsp:useBean id="brddb" class="univ.BoardDBCP" scope="page" />


<%

//한글 처리를 위해 문자인코딩 지정

request.setCharacterEncoding("UTF-8");

//등록(inser), 수정(update), 삭제(delete) 중 하나를 저장

String menu = request.getParameter("menu");

// 등록 또는 수정 처리 모듈

if(menu.equals("delete") || menu.equals("update")){

String id = request.getParameter("id");

String passwd = request.getParameter("passwd");

int idnum = Integer.parseInt(id);

//데이터베이스 자바빈즈에 구현된 메소드 isPasswd()로 id와 암호가 일치 하는지 검사

if(!brddb.isPasswd(idnum, passwd)){

%>

<!-- 암호가 틀리면 이전 화면으로 이동 -->

<script>alert("비밀번호가 다릅니다."); history.go(-1);</script>

<%

}else{

if(menu.equals("delete")){

//삭제를 위해 데이터베이스 자바빈즈에 구현된 메소드 deleteDB() 실행

brddb.deleteDB(idnum);

}else if(menu.equals("update")){

%>

<!-- 수정 시 BoardEntity에 지정해야 하는 필드 id -->

<jsp:setProperty name="brd" property="id"/>

<jsp:setProperty name="brd" property="name"/>

<jsp:setProperty name="brd" property="title"/>

<jsp:setProperty name="brd" property="email"/>

<jsp:setProperty name="brd" property="content"/>

<%

//수정을 위해 데이터베이스 자바빈즈에 구현된 메소드 updateDB() 실행

brddb.updateDB(brd);

}

//기능 수행 후 다시 게시 목록 보기로 이동

response.sendRedirect("listboard.jsp");

}

}else if(menu.equals("insert")){

%>

<!-- 등록 시 BoardEntity에 지정해야 하는 필드 passwd -->

<jsp:setProperty name="brd" property="name"/>

<jsp:setProperty name="brd" property="title"/>

<jsp:setProperty name="brd" property="email"/>

<jsp:setProperty name="brd" property="content"/>

<jsp:setProperty name="brd" property="passwd"/>

<%

//등록을 위해 데이터베이스 자바빈즈에 구현된 메소드 insertDB() 실행

brddb.insertDB(brd);

//기능 수행 후 다시 게시 목록 보기로 이동

response.sendRedirect("listboard.jsp");

}

%>

</body>

</html>

processboard.jsp 저장




<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>게시판 기본 예제 : 게시 목록 표시</title>

</head>

<body>

<center>

<h2>게시판 목록 표시 프로그램</h2>

</center>

<hr width="90%" size="5" color="green">

<center>

<%@ page import="java.util.ArrayList, univ.BoardEntity, java.text.SimpleDateFormat" %>

<jsp:useBean id="brddb" class="univ.BoardDBCP" scope="page" />

<%

//게시 목록을 위한 배열리스트를 자바빈즈를 이용하여 확보

ArrayList<BoardEntity> list = brddb.getBoardList();

int counter = list.size();

int row = 0;

if (counter > 0){

%>

<table width=800 border=0 cellpadding=1 cellspacing=3>


<tr>

<th><font color=blue><b>번호</b></font></th>

<th><font color=blue><b>제목</b></font></th>

<th><font color=blue><b>작성자</b></font></th>

<th><font color=blue><b>작성일</b></font></th>

<th><font color=blue><b>전자메일</b></font></th>

</tr>

<%

//게시 등록일을 2010-3-15 10:33:21 형태로 출력하기 위한 클래스

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

for(BoardEntity brd : list){

//홀짝으로 다르게 색상 지정

String color = "papayawhip";

if(++row % 4 == 0) color = "red";

else if(row % 4 == 1) color = "green";

else if(row % 4 == 2) color = "blue";

%>

<tr bgcolor=<%=color %>

onmouseover="this.style.backgroundColor='SkyBlue'"

onmouseout="this.style.backgroundColor='<%=color %>'" style="opacity: <%=0.5%>;">

<!-- 수정과 삭제를 위한 링크로 id를 전송 -->

<td align=center><a href="editboard.jsp?id=<%= brd.getId()%>"><%= brd.getId()%></a></td>

<td align=left><%= brd.getTitle() %></td>

<td align=center><%= brd.getName() %></td>

<!-- 게시 작성일을 2010-3-15 10:33:21 형태로 출력 -->

<td align=center><%= df.format(brd.getRegdate()) %></td>

<td align=center><%= brd.getEmail() %></td>

</tr>

<%

}

%>

</table>

<% }

%>

<hr width="90%" size="5" color="darkgray">

<p>죄회된 게시판 목록 수가 <%=counter %>개 입니다.

</center><hr>

<center>

<form name=form method=post action=editboard.jsp>

<input type=submit value="게시등록">

</form>

</center>


</body>

</html>

listboard.jsp 저장




function deletecheck(){

if(document.boardform.passwd.value=="" ){

alert("암호를 입력해 주세요.");

document.boardform.passwd.focus();

return;

}

ok = confirm("삭제하시겠습니까?");

if(ok){

document.boardform.menu.value='delete';

document.boardform.submit();

}else{

return;

}

}

function insertcheck(){

if(document.boardform.name.value==""){

alert("이름을 입력해 주세요.");

document.boardform.name.focus();

return;

}

if(document.boardform.passwd.value==""){

alert("암호를 입력해 주세요.");

document.boardform.passwd.focus();

return;

}

document.boardform.menu.value='insert';

document.boardform.submit();

}


function updatecheck(){

if(document.boardform.name.value==""){

alert("이름을 입력해 주세요.");

document.boardform.name.focus();

return;

}

if(document.boardform.passwd.value==""){

alert("암호를 입력해 주세요.");

document.boardform.passwd.focus();

return;

}

document.boardform.menu.value='update';

document.boardform.submit();

}

boardform.js 저장


+ Recent posts