BoardVO.java (Getters and Setters, 생성자 함수)
package edu.global.board.vo;
import java.sql.Timestamp;
/*이름 널? 유형
-------- -------- --------------
BID NOT NULL NUMBER(4)
BNAME VARCHAR2(50)
BTITLE VARCHAR2(100)
BCONTENT VARCHAR2(1000)
BDATE DATE
BHIT NUMBER(4)
BGROUP NUMBER(4)
BSTEP NUMBER(4)
BINDENT NUMBER(4)
*/
public class BoardVO {
private int bid;
private String bname;
private String btitle;
private String bcontent;
private Timestamp bdate; // java.sql.Timestamp import하기
private int bhit;
private int bgroup;
private int bstep;
private int bindent;
/* default constructor */
public BoardVO() {
}
/* constructor using fields */
public BoardVO(int bid, String bname, String btitle, String bcontent, Timestamp bdate, int bhit, int bgroup,
int bstep, int bindent) {
super();
this.bid = bid;
this.bname = bname;
this.btitle = btitle;
this.bcontent = bcontent;
this.bdate = bdate;
this.bhit = bhit;
this.bgroup = bgroup;
this.bstep = bstep;
this.bindent = bindent;
}
/* getters and setters */
public int getBid() {
return bid;
}
public void setBid(int bid) {
this.bid = bid;
}
public String getBname() {
return bname;
}
public void setBname(String bname) {
this.bname = bname;
}
public String getBtitle() {
return btitle;
}
public void setBtitle(String btitle) {
this.btitle = btitle;
}
public String getBcontent() {
return bcontent;
}
public void setBcontent(String bcontent) {
this.bcontent = bcontent;
}
public Timestamp getBdate() {
return bdate;
}
public void setBdate(Timestamp bdate) {
this.bdate = bdate;
}
public int getBhit() {
return bhit;
}
public void setBhit(int bhit) {
this.bhit = bhit;
}
public int getBgroup() {
return bgroup;
}
public void setBgroup(int bgroup) {
this.bgroup = bgroup;
}
public int getBstep() {
return bstep;
}
public void setBstep(int bstep) {
this.bstep = bstep;
}
public int getBindent() {
return bindent;
}
public void setBindent(int bindent) {
this.bindent = bindent;
}
}
BDao.java (이어서 작성하기)
package edu.global.board.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import edu.global.board.vo.BoardVO;
public class BDao {
private DataSource dataSource;
public BDao() {
try {
Context context = new InitialContext();
dataSource = (DataSource) context.lookup("java:comp/env/jdbc/oracle");
} catch (Exception e) {
e.printStackTrace();
}
}
public List<BoardVO> list() {
List<BoardVO> boards = new ArrayList<BoardVO>();
Connection connection = null;
PreparedStatement preparedStatement = null; // 기존 Statement를 보완한 버전
ResultSet resultSet = null;
try {
String query = "select * from mvc_board order by bgroup desc, bstep asc";
connection = dataSource.getConnection();
preparedStatement = connection.prepareStatement(query);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
int bid = resultSet.getInt("bid");
String bname = resultSet.getString("bname");
String btitle = resultSet.getString("btitle");
String bcontent = resultSet.getString("bcontent");
Timestamp bdate = resultSet.getTimestamp("bdate");
int bhit = resultSet.getInt("bhit");
int bgroup = resultSet.getInt("bgroup");
int bstep = resultSet.getInt("bstep");
int bindent = resultSet.getInt("bindent");
BoardVO vo = new BoardVO(bid, bname, btitle, bcontent, bdate, bhit, bgroup, bstep, bindent);
boards.add(vo);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (resultSet != null)
resultSet.close();
if (preparedStatement != null)
preparedStatement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return boards;
}
}
BListCommand.java (이어서 작성)
package edu.global.board.command;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import edu.global.board.dao.BDao;
import edu.global.board.vo.BoardVO;
public class BListCommand implements BCommand{
@Override
public void execute(HttpServletRequest request, HttpServletResponse response) {
BDao dao = new BDao(); // Board DAO 호출
List<BoardVO> vos = dao.list(); // DAO 안의 list()를 호출하여 BoardVO의 List 객체 생성
request.setAttribute("boards", vos); // 요청하여 갖고 오기
}
}
BoardController.java (이어서 작성하기)
package edu.global.board.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import edu.global.board.command.BCommand;
import edu.global.board.command.BListCommand;
/**
* Servlet implementation class BoardController
*/
@WebServlet("*.do")
public class BoardController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public BoardController() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
actionDo(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
actionDo(request, response);
}
private void actionDo(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("actionDo() ... ");
request.setCharacterEncoding("UTF-8");
String viewPage = null;
BCommand command = null; // Board의 커맨드
String uri = request.getRequestURI();
String contextPath = request.getContextPath();
String com = uri.substring(contextPath.length());
System.out.println("uri : " + uri);
System.out.println("contextPath : " + contextPath);
System.out.println("com : " + com);
if (com.equals("/list.do")) {
command = new BListCommand(); // 다형성 적용하여 BListCommand 생성
command.execute(request, response); // 객체 전달하여 게시판 글 가져오기
viewPage = "list.jsp";
}
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPage);
dispatcher.forward(request, response);
}
}
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시판 리스트</title>
</head>
<body>
<table width="500" cellpadding="0" cellspacing="0" border="1">
<tr>
<td>번호</td>
<td>이름</td>
<td>제목</td>
<td>날짜</td>
<td>히트</td>
</tr>
<c:forEach var="board" items="${boards}">
<!-- request.setAttribute에 맞춰서 쓴다 -->
<tr>
<td>${board.bid}</td>
<td>${board.bname}</td>
<td><c:forEach begin="1" end="${board.bindent}">-</c:forEach> <a
href="content_view.do?bid=${board.bid}">${board.btitle}</a></td>
<td>${board.bdate}</td>
<td>${board.bhit}</td>
</tr>
</c:forEach>
<tr>
<td colspan="5"><a href="write_view.do">글작성</a></td>
</tr>
</table>
</body>
</html>
[Console]
actionDo() ...
uri : /servlet_yjy_board/list.do
contextPath : /servlet_yjy_board
com : /list.do
BContentCommand.java
package edu.global.board.command;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import edu.global.board.dao.BDao;
import edu.global.board.vo.BoardVO;
public class BContentCommand implements BCommand {
@Override
public void execute(HttpServletRequest request, HttpServletResponse response) {
String bid = request.getParameter("bid");
BDao dao = new BDao();
BoardVO vo = dao.contentView(bid); // bid번째 글 보기
request.setAttribute("content_view", vo);
}
}
BDao.java (contentView 함수 추가)
public BoardVO contentView(String strId) {
BoardVO board = null;
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
String query = "select * from mvc_board where bid = ?";
connection = dataSource.getConnection();
preparedStatement = connection.prepareStatement(query);
preparedStatement.setInt(1, Integer.valueOf(strId)); // 첫번째 물음표에 원하는 값을 넣기
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
int bid = resultSet.getInt("bid");
String bname = resultSet.getString("bname");
String btitle = resultSet.getString("btitle");
String bcontent = resultSet.getString("bcontent");
Timestamp bdate = resultSet.getTimestamp("bdate");
int bhit = resultSet.getInt("bhit");
int bgroup = resultSet.getInt("bgroup");
int bstep = resultSet.getInt("bstep");
int bindent = resultSet.getInt("bindent");
board = new BoardVO(bid, bname, btitle, bcontent, bdate, bhit, bgroup, bstep, bindent);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (resultSet != null)
resultSet.close();
if (preparedStatement != null)
preparedStatement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return board;
}
BoardController.java (코드 추가)
if (com.equals("/list.do")) {
command = new BListCommand(); // 다형성 적용하여 BListCommand 생성
command.execute(request, response); // 객체 전달하여 게시판 글 가져오기
viewPage = "list.jsp";
} else if (com.equals("/content_view.do")) {
/* http://localhost:8282/servlet_yjy_board/content_view.do?bid=5 */
command = new BContentCommand();
command.execute(request, response);
viewPage = "content_view.jsp";
}
content_view.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Content View</title>
</head>
<body>
<table width="500" cellpadding="0" cellspacing="0" border="1">
<form action="modify.do" method="post">
<input type="hidden" name="bid" value="${content_view.bid}">
<tr>
<td>번호</td>
<td>${content_view.bid}</td>
</tr>
<tr>
<td>히트</td>
<td>${content_view.bhit}</td>
</tr>
<tr>
<td>이름</td>
<td><input type="text" name="bname"
value="${content_view.bname}"></td>
</tr>
<tr>
<td>제목</td>
<td><input type="text" name="btitle"
value="${content_view.btitle}"></td>
</tr>
<tr>
<td>내용</td>
<td><textarea rows="10" name="bcontent">${content_view.bcontent}</textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="수정">
<a href="list.do">목록보기</a> <a
href="delete.do?bid=${content_view.bid}">삭제</a> <a
href="reply_view.do?bid=${content_view.bid}">답변</a></td>
</tr>
</form>
</table>
</body>
</html>
BoardController.java (modify.do 일 때의 조건문 추가)
if (com.equals("/list.do")) {
/* http://localhost:8282/servlet_yjy_board/list.do */
command = new BListCommand(); // 다형성 적용하여 BListCommand 생성
command.execute(request, response); // 객체 전달하여 게시판 글 가져오기
viewPage = "list.jsp";
} else if (com.equals("/content_view.do")) {
/* http://localhost:8282/servlet_yjy_board/content_view.do?bid=5 */
command = new BContentCommand();
command.execute(request, response);
viewPage = "content_view.jsp";
} else if (com.equals("/modify.do")) {
/* http://localhost:8282/servlet_yjy_board/modify.do */
command = new BModifyCommand();
command.execute(request, response);
viewPage = "list.do";
// list.jsp가 아닌 list.do로 설정해야 기존 리스트를 볼 수 있다.
}
BModifyCommand.java
package edu.global.board.command;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import edu.global.board.dao.BDao;
import edu.global.board.vo.BoardVO;
public class BModifyCommand implements BCommand {
@Override
public void execute(HttpServletRequest request, HttpServletResponse response) {
/* 수정할 내용 불러오기 (parameter를 정확히 쓴다) */
String bid = request.getParameter("bid");
String bname = request.getParameter("bname");
String bcontent = request.getParameter("bcontent");
String btitle = request.getParameter("btitle");
BDao dao = new BDao(); // Board DAO 호출
dao.modify(bid, bname, bcontent, btitle); // 순서대로 modify 한다.
}
}
BDao.java (modify 함수 추가)
public int modify(String bid, String bname, String btitle, String bcontent) {
Connection connection = null;
PreparedStatement preparedStatement = null;
// SELECT 문을 쓰는 Query 외에는 ResultSet을 쓰지 않으므로, try~catch에서 지워버린다.
int rn = 0; // return 할 number
try {
String query = "update mvc_board set bname = ?, btitle = ?, bcontent = ? where bid = ?";
connection = dataSource.getConnection();
preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(1, bname);
preparedStatement.setString(2, btitle);
preparedStatement.setString(3, bcontent);
preparedStatement.setInt(4, Integer.valueOf(bid));
rn = preparedStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (preparedStatement != null)
preparedStatement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return rn;
}
BoardController.java (기능 추가)
else if(com.equals("/delete.do")) {
/* http://localhost:8282/servlet_yjy_board/content_view.do?bid=5 */
command = new BDeleteCommand();
command.execute(request, response);
viewPage = "list.do";
}
BDao.java (삭제하는 함수 추가)
public int delete(String bid) {
Connection connection = null;
PreparedStatement preparedStatement = null;
int rn = 0;
try {
String query = "delete mvc_board where bid = ?";
connection = dataSource.getConnection();
preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(1, bid);
rn = preparedStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (preparedStatement != null) {
preparedStatement.close();
}
if (connection != null) {
connection.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return rn;
}
BDeleteCommand.java
package edu.global.board.command;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import edu.global.board.dao.BDao;
import edu.global.board.vo.BoardVO;
public class BDeleteCommand implements BCommand {
@Override
public void execute(HttpServletRequest request, HttpServletResponse response) {
String bid = request.getParameter("bid");
BDao dao = new BDao();
dao.delete(bid);
}
}
package edu.global.board.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import edu.global.board.command.BCommand;
import edu.global.board.command.BContentCommand;
import edu.global.board.command.BDeleteCommand;
import edu.global.board.command.BListCommand;
import edu.global.board.command.BModifyCommand;
/**
* Servlet implementation class BoardController
*/
@WebServlet("*.do")
public class BoardController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public BoardController() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
actionDo(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
actionDo(request, response);
}
private void actionDo(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("actionDo() ... ");
request.setCharacterEncoding("UTF-8");
String viewPage = null;
BCommand command = null; // Board의 커맨드
String uri = request.getRequestURI();
String contextPath = request.getContextPath();
String com = uri.substring(contextPath.length());
System.out.println("uri : " + uri);
System.out.println("contextPath : " + contextPath);
System.out.println("com : " + com);
if (com.equals("/list.do")) {
/* http://localhost:8282/servlet_yjy_board/list.do */
command = new BListCommand(); // 다형성 적용하여 BListCommand 생성
command.execute(request, response); // 객체 전달하여 게시판 글 가져오기
viewPage = "list.jsp";
} else if (com.equals("/content_view.do")) {
/* http://localhost:8282/servlet_yjy_board/content_view.do?bid=5 */
command = new BContentCommand();
command.execute(request, response);
viewPage = "content_view.jsp";
} else if (com.equals("/modify.do")) {
/* http://localhost:8282/servlet_yjy_board/modify.do */
command = new BModifyCommand();
command.execute(request, response);
viewPage = "list.do";
} else if(com.equals("/delete.do")) {
/* http://localhost:8282/servlet_yjy_board/delete.do?bid=5 */
command = new BDeleteCommand();
command.execute(request, response);
viewPage = "list.do";
}
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPage);
dispatcher.forward(request, response);
}
}
package edu.global.board.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import edu.global.board.vo.BoardVO;
public class BDao {
private DataSource dataSource;
/* 0. default constructor */
public BDao() {
try {
Context context = new InitialContext();
dataSource = (DataSource) context.lookup("java:comp/env/jdbc/oracle");
} catch (Exception e) {
e.printStackTrace();
}
}
/* 1. Board List */
public List<BoardVO> list() {
List<BoardVO> boards = new ArrayList<BoardVO>();
Connection connection = null;
PreparedStatement preparedStatement = null; // 기존 Statement를 보완한 버전
ResultSet resultSet = null;
try {
String query = "select * from mvc_board order by bgroup desc, bstep asc";
connection = dataSource.getConnection();
preparedStatement = connection.prepareStatement(query);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
int bid = resultSet.getInt("bid");
String bname = resultSet.getString("bname");
String btitle = resultSet.getString("btitle");
String bcontent = resultSet.getString("bcontent");
Timestamp bdate = resultSet.getTimestamp("bdate");
int bhit = resultSet.getInt("bhit");
int bgroup = resultSet.getInt("bgroup");
int bstep = resultSet.getInt("bstep");
int bindent = resultSet.getInt("bindent");
BoardVO vo = new BoardVO(bid, bname, btitle, bcontent, bdate, bhit, bgroup, bstep, bindent);
boards.add(vo);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (resultSet != null)
resultSet.close();
if (preparedStatement != null)
preparedStatement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return boards;
}
/* 2. Content View */
public BoardVO contentView(String strId) {
BoardVO board = null;
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
String query = "select * from mvc_board where bid = ?";
connection = dataSource.getConnection();
preparedStatement = connection.prepareStatement(query);
preparedStatement.setInt(1, Integer.valueOf(strId)); // 첫번째 물음표에 원하는 값을 넣기
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
int bid = resultSet.getInt("bid");
String bname = resultSet.getString("bname");
String btitle = resultSet.getString("btitle");
String bcontent = resultSet.getString("bcontent");
Timestamp bdate = resultSet.getTimestamp("bdate");
int bhit = resultSet.getInt("bhit");
int bgroup = resultSet.getInt("bgroup");
int bstep = resultSet.getInt("bstep");
int bindent = resultSet.getInt("bindent");
board = new BoardVO(bid, bname, btitle, bcontent, bdate, bhit, bgroup, bstep, bindent);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (resultSet != null)
resultSet.close();
if (preparedStatement != null)
preparedStatement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return board;
}
/* 3. Content Modify */
public int modify(String bid, String bname, String btitle, String bcontent) {
Connection connection = null;
PreparedStatement preparedStatement = null;
// SELECT 문을 쓰는 Query 외에는 ResultSet을 쓰지 않으므로, try~catch에서 지워버린다.
int rn = 0; // return 할 number
try {
String query = "update mvc_board set bname = ?, btitle = ?, bcontent = ? where bid = ?";
connection = dataSource.getConnection();
preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(1, bname);
preparedStatement.setString(2, btitle);
preparedStatement.setString(3, bcontent);
preparedStatement.setInt(4, Integer.valueOf(bid));
rn = preparedStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (preparedStatement != null)
preparedStatement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return rn;
}
/* 4. Content Delete */
public int delete(String bid) {
Connection connection = null;
PreparedStatement preparedStatement = null;
int rn = 0;
try {
String query = "delete mvc_board where bid = ?";
connection = dataSource.getConnection();
preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(1, bid);
rn = preparedStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (preparedStatement != null) {
preparedStatement.close();
}
if (connection != null) {
connection.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return rn;
}
}