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 저장
'JSP(Java Server Pages)' 카테고리의 다른 글
14. JSTL SQL QUERY, update, dataParam, function (0) | 2017.02.28 |
---|---|
13. JSTL(JSP Standard Tag Library), EL(Expression Language) (0) | 2017.02.27 |
12. Java Beans, 회원관리 시스템, 로그인 및 관리자 시스템 (0) | 2017.02.24 |
11. Java Beans StudentDataBase 를 이용한 테이블 STUDENT 조회 프로그램 (0) | 2017.02.23 |
10. Oracle Database 연동 테스트 (0) | 2017.02.22 |