
//파일 삭제
public void deleteFile(int board_num)throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
String sql = null;
try {
//커넥션풀로부터 커넥션 할당
conn = DBUtil.getConnection();
//SQL문 작성
sql = "UPDATE zboard SET filename='' WHERE board_num=?";
//PreparedStatement 객체 생성
pstmt = conn.prepareStatement(sql);
//?에 데이터 바인딩
pstmt.setInt(1, board_num);
//SQL문 실행
pstmt.executeUpdate();
}catch(Exception e) {
throw new Exception(e);
}finally {
DBUtil.executeClose(null, pstmt, conn);
}
}
package kr.board.action;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.codehaus.jackson.map.ObjectMapper;
import kr.board.dao.BoardDAO;
import kr.board.vo.BoardVO;
import kr.controller.Action;
import kr.util.FileUtil;
public class DeleteFileAction implements Action{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
Map<String,String> mapAjax =
new HashMap<String,String>();
HttpSession session = request.getSession();
Integer user_num =
(Integer)session.getAttribute("user_num");
if(user_num==null) {//로그인이 되지 않은 경우
mapAjax.put("result", "logout");
}else {//로그인 된 경우
//전송된 데이터 인코딩 타입 지정
request.setCharacterEncoding("utf-8");
//전송된 데이터 반환
int board_num = Integer.parseInt(
request.getParameter("board_num"));
BoardDAO dao = BoardDAO.getInstance();
BoardVO db_board = dao.getBoard(board_num);
//로그인한 회원번호와 작성자 회원번호 일치 여부 체크
if(user_num!=db_board.getMem_num()) {
mapAjax.put("result", "wrongAccess");
}else {
dao.deleteFile(board_num);
//파일 삭제
FileUtil.removeFile(request, db_board.getFilename());
mapAjax.put("result", "success");
}
}
//JSON 데이터 생성
ObjectMapper mapper = new ObjectMapper();
String ajaxData = mapper.writeValueAsString(mapAjax);
request.setAttribute("ajaxData", ajaxData);
return "/WEB-INF/views/common/ajax_view.jsp";
}
}
//글 수정
public void updateBoard(BoardVO board)throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
String sql = null;
String sub_sql = "";
int cnt = 0;
try {
//커넥션풀로부터 커넥션 할당
conn = DBUtil.getConnection();
if(board.getFilename()!=null
&& !"".equals(board.getFilename())) {
sub_sql += ",filename=?";
}
//SQL문 작성
sql = "UPDATE zboard SET title=?,content=?,"
+ "modify_date=SYSDATE,ip=?" + sub_sql
+ " WHERE board_num=?";
//PreparedStatement 객체 생성
pstmt = conn.prepareStatement(sql);
//?에 데이터 바인딩
pstmt.setString(++cnt, board.getTitle());
pstmt.setString(++cnt, board.getContent());
pstmt.setString(++cnt, board.getIp());
if(board.getFilename()!=null
&& !"".equals(board.getFilename())) {
pstmt.setString(++cnt, board.getFilename());
}
pstmt.setInt(++cnt, board.getBoard_num());
//SQL문 실행
pstmt.executeUpdate();
}catch(Exception e) {
throw new Exception(e);
}finally {
DBUtil.executeClose(null, pstmt, conn);
}
}
package kr.board.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import kr.board.dao.BoardDAO;
import kr.board.vo.BoardVO;
import kr.controller.Action;
import kr.util.StringUtil;
public class UpdateFormAction implements Action{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
Integer user_num =
(Integer)session.getAttribute("user_num");
if(user_num == null) {//로그인이 되지 않은 경우
return "redirect:/member/loginForm.do";
}
//로그인 된 경우
int board_num = Integer.parseInt(
request.getParameter("board_num"));
BoardDAO dao = BoardDAO.getInstance();
BoardVO board = dao.getBoard(board_num);
if(user_num!=board.getMem_num()) {
return "/WEB-INF/views/common/notice.jsp";
}
//큰 따옴표 처리
//수정폼의 input 태그에서 큰 따옴표 오류 보정
board.setTitle(StringUtil.parseQuot(board.getTitle()));
//로그인이 되어있고 로그인한 회원번호와 작성자 회원번호 일치
request.setAttribute("board", board);
return "/WEB-INF/views/board/updateForm.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>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css" type="text/css">
<script type="text/javascript">
window.onload=function(){
const myForm = document.getElementById('update_form');
//이벤트 연결
myForm.onsubmit=function(){
const title = document.getElementById('title');
if(title.value.trim()==''){
alert('제목을 입력하세요');
title.value = '';
title.focus();
return false;
}
const content = document.getElementById('content');
if(content.value.trim()==''){
alert('내용을 입력하세요');
content.value = '';
content.focus();
return false;
}
};
};
</script>
</head>
<body>
<div class="page-main">
<jsp:include page="/WEB-INF/views/common/header.jsp"/>
<div class="content-main">
<h2>글 수정</h2>
<form id="update_form" action="update.do" method="post"
enctype="multipart/form-data">
<input type="hidden" name="board_num"
value="${board.board_num}">
<ul>
<li>
<label for="title">제목</label>
<input type="text" name="title" id="title"
value="${board.title}" maxlength="50">
</li>
<li>
<label for="content">내용</label>
<textarea rows="5" cols="40"
name="content"
id="content">${board.content}</textarea>
</li>
<li>
<label for="filename">이미지</label>
<input type="file" name="filename"
id="filename" accept="image/gif,image/png,image/jpeg">
<c:if test="${!empty board.filename}">
<div id="file_detail">
<img src="${pageContext.request.contextPath}/upload/${board.filename}" width="100">
<br>
<input type="button" value="파일 삭제" id="file_del">
</div>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.7.1.min.js"></script>
<script type="text/javascript">
$(function(){
$('#file_del').click(function(){
let choice = confirm('삭제하시겠습니까?');
if(choice){
//서버와 통신
$.ajax({
url:'deleteFile.do',
type:'post',
data:{board_num:${board.board_num}},
dataType:'json',
success:function(param){
if(param.result == 'logout'){
alert('로그인 후 사용하세요');
}else if(param.result == 'success'){
$('#file_detail').hide();
}else if(param.result == 'wrongAccess'){
alert('잘못된 접속입니다.');
}else{
alert('파일 삭제 오류 발생');
}
},
error:function(){
alert('네트워크 오류 발생');
}
});
}
});
});
</script>
</c:if>
</li>
</ul>
<div class="align-center">
<input type="submit" value="수정">
<input type="button" value="목록"
onclick="location.href='list.do'">
</div>
</form>
</div>
</div>
</body>
</html>
package kr.board.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import kr.board.dao.BoardDAO;
import kr.board.vo.BoardVO;
import kr.controller.Action;
import kr.util.FileUtil;
public class UpdateAction implements Action{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
Integer user_num =
(Integer)session.getAttribute("user_num");
if(user_num == null) {//로그인이 되지 않은 경우
return "redirect:/member/loginForm.do";
}
//로그인 된 경우
//전송된 데이터 인코딩 타입 지정
request.setCharacterEncoding("utf-8");
//전송된 데이터 반환
int board_num = Integer.parseInt(
request.getParameter("board_num"));
BoardDAO dao = BoardDAO.getInstance();
//수정전 데이터
BoardVO db_board = dao.getBoard(board_num);
//로그인한 회원번호와 작성자 회원번호 일치 여부 체크
if(user_num != db_board.getMem_num()) {
//로그인한 회원번호와 작성자 회원번호 불일치
return "/WEB-INF/views/common/notice.jsp";
}
//로그인한 회원번호와 작성자 회원번호 일치
BoardVO board = new BoardVO();
board.setBoard_num(board_num);
board.setTitle(request.getParameter("title"));
board.setContent(request.getParameter("content"));
board.setIp(request.getRemoteAddr());
board.setFilename(
FileUtil.createFile(request, "filename"));
dao.updateBoard(board);
if(board.getFilename()!=null &&
!"".equals(board.getFilename())) {
//새 파일로 교체할 때 원래 파일 제거
FileUtil.removeFile(request, db_board.getFilename());
}
return "redirect:/board/detail.do?board_num="+board_num;
}
}
댓글, 좋아요 삭제는 나중에 처리
//글 삭제
public void deleteBoard(int board_num)throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
PreparedStatement pstmt2 = null;
PreparedStatement pstmt3 = null;
String sql = null;
try {
//커넥션풀로부터 커넥션 할당
conn = DBUtil.getConnection();
//오토커밋 해제
conn.setAutoCommit(false);
//좋아요 삭제
//댓글 삭제
//부모글 삭제
sql = "DELETE FROM zboard WHERE board_num=?";
pstmt3 = conn.prepareStatement(sql);
pstmt3.setInt(1, board_num);
pstmt3.executeUpdate();
//예외 발생 없이 정상적으로 SQL문 실행
conn.commit();
}catch(Exception e) {
//예외 발생
conn.rollback();
throw new Exception(e);
}finally {
DBUtil.executeClose(null, pstmt3, null);
DBUtil.executeClose(null, pstmt2, null);
DBUtil.executeClose(null, pstmt, conn);
}
}
package kr.board.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import kr.board.dao.BoardDAO;
import kr.board.vo.BoardVO;
import kr.controller.Action;
import kr.util.FileUtil;
public class DeleteAction implements Action{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
Integer user_num =
(Integer)session.getAttribute("user_num");
if(user_num == null) {//로그인이 되지 않은 경우
return "redirect:/member/loginForm.do";
}
//로그인 된 경우
int board_num = Integer.parseInt(
request.getParameter("board_num"));
BoardDAO dao = BoardDAO.getInstance();
BoardVO db_board = dao.getBoard(board_num);
//로그인한 회원번호와 작성자 회원번호 일치 여부 체크
if(user_num != db_board.getMem_num()) {
return "/WEB-INF/views/common/notice.jsp";
}
//로그인한 회원번호와 작성자 회원번호 일치
dao.deleteBoard(board_num);
//파일 삭제
FileUtil.removeFile(request, db_board.getFilename());
request.setAttribute("notice_msg", "글 삭제 완료");
request.setAttribute("notice_url",
request.getContextPath()+"/board/list.do");
return "/WEB-INF/views/common/alert_view.jsp";
}
}
--좋아요
create table zboard_fav(
board_num number not null,
mem_num number not null,
constraint zboard_fav_fk1 foreign key (board_num)
references zboard (board_num),
constraint zboard_fav_fk2 foreign key (mem_num)
references zmember (mem_num)
);
package kr.board.vo;
public class BoardFavVO {
private int board_num;
private int mem_num;
public BoardFavVO() {}
public BoardFavVO(int board_num, int mem_num) {
this.board_num = board_num;
this.mem_num = mem_num;
}
public int getBoard_num() {
return board_num;
}
public void setBoard_num(int board_num) {
this.board_num = board_num;
}
public int getMem_num() {
return mem_num;
}
public void setMem_num(int mem_num) {
this.mem_num = mem_num;
}
}
//좋아요 개수
public int selectFavCount(int board_num)throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
int count = 0;
try {
//커넥션풀로부터 커넥션 할당
conn = DBUtil.getConnection();
//SQL문 작성
sql = "SELECT COUNT(*) FROM zboard_fav WHERE board_num=?";
//PreparedStatement 객체 생성
pstmt = conn.prepareStatement(sql);
//?에 데이터 바인딩
pstmt.setInt(1, board_num);
//SQL문 실행
rs = pstmt.executeQuery();
if(rs.next()) {
count = rs.getInt(1);
}
}catch(Exception e) {
throw new Exception(e);
}finally {
DBUtil.executeClose(rs, pstmt, conn);
}
return count;
}
//회원번호와 게시물 번호를 이용한 좋아요 정보
//(회원이 게시물을 호출했을 때 좋아요 선택 여부 표시)
public BoardFavVO selectFav(BoardFavVO favVO)
throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
BoardFavVO fav = null;
String sql = null;
try {
//컨넥션풀로부터 커넥션 할당
conn = DBUtil.getConnection();
//SQL문 작성
sql = "SELECT * FROM zboard_fav WHERE board_num=? AND mem_num=?";
//PreparedStatement 객체 생성
pstmt = conn.prepareStatement(sql);
//?에 데이터 바인딩
pstmt.setInt(1, favVO.getBoard_num());
pstmt.setInt(2, favVO.getMem_num());
//SQL문 실행
rs = pstmt.executeQuery();
if(rs.next()) {
fav = new BoardFavVO();
fav.setBoard_num(rs.getInt("board_num"));
fav.setMem_num(rs.getInt("mem_num"));
}
}catch(Exception e) {
throw new Exception(e);
}finally {
DBUtil.executeClose(rs, pstmt, conn);
}
return fav;
}
/board/updateForm.do=kr.board.action.UpdateFormAction
/board/deleteFile.do=kr.board.action.DeleteFileAction
/board/update.do=kr.board.action.UpdateAction
/board/delete.do=kr.board.action.DeleteAction












테이블 설계서 작성 완료, ERD Cloud 이용해서 작성 완료
