일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- gcloud.gabia
- 설치
- server
- interface
- configration
- centos7
- board
- servlet
- 게시판
- vmware
- comand
- 무농약
- 패킷트레이서
- 한글
- 언어
- eclipse
- 시스코
- 설정
- cisco
- 홈가든
- centos
- 이클립스
- 서버
- JSP
- CLI
- packet-tracer
- tomcat
- war
- java
- nppFTP
- Today
- Total
넓고얕은지식사전
JSP & Servlet 게시판 구현하기(게시글 삭제) 본문
지난번에 게시글 내용 수정 기능을 구현 하였다.
이번엔 작성된 내용 삭제 기능을 구현해 보도록 하자
1. ArticleDao 에 게시글 삭제관련 기능 추가(특정번호에 해당하는 게시글 delete)
경로 : article.dao> ArticleDao.java
public int delete(Connection conn, int articleNo1) throws SQLException {
try (PreparedStatement pstmt =
conn.prepareStatement(
"delete from article where article_no = ?")) {
pstmt.setInt(1, articleNo1);
return pstmt.executeUpdate();
}
}
1-1. ArticleDao의 전체코드
package article.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import article.model.Article;
import article.model.Writer;
import jdbc.JdbcUtil;
public class ArticleDao {
public Article insert(Connection conn, Article article) throws SQLException {
PreparedStatement pstmt = null;
Statement stmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement("insert into article "
+ "(writer_id, writer_name, title, regdate, moddate, read_cnt) "
+ "values (?,?,?,?,?,0)");
pstmt.setString(1, article.getWriter().getId());
pstmt.setString(2, article.getWriter().getName());
pstmt.setString(3, article.getTitle());
pstmt.setTimestamp(4, toTimestamp(article.getRegDate()));
pstmt.setTimestamp(5, toTimestamp(article.getModifiedDate()));
int insertedCount = pstmt.executeUpdate();
if (insertedCount > 0) {
stmt = conn.createStatement();
rs = stmt.executeQuery("select last_insert_id() from article");
if (rs.next()) {
Integer newNo = rs.getInt(1);
return new Article(newNo,
article.getWriter(),
article.getTitle(),
article.getRegDate(),
article.getModifiedDate(),
0);
}
}
return null;
} finally {
JdbcUtil.close(rs);
JdbcUtil.close(stmt);
JdbcUtil.close(pstmt);
}
}
private Timestamp toTimestamp(Date date) {
return new Timestamp(date.getTime());
}
public int selectCount(Connection conn) throws SQLException {
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery("select count(*) from article");
if (rs.next()) {
return rs.getInt(1);
}
return 0;
} finally {
JdbcUtil.close(rs);
JdbcUtil.close(stmt);
}
}
public List<Article> select(Connection conn, int startRow, int size) throws SQLException {
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement("select * from article " +
"order by article_no desc limit ?, ?");
pstmt.setInt(1, startRow);
pstmt.setInt(2, size);
rs = pstmt.executeQuery();
List<Article> result = new ArrayList<>();
while (rs.next()) {
result.add(convertArticle(rs));
}
return result;
} finally {
JdbcUtil.close(rs);
JdbcUtil.close(pstmt);
}
}
private Article convertArticle(ResultSet rs) throws SQLException {
return new Article(rs.getInt("article_no"),
new Writer(
rs.getString("writer_id"),
rs.getString("writer_name")),
rs.getString("title"),
toDate(rs.getTimestamp("regdate")),
toDate(rs.getTimestamp("moddate")),
rs.getInt("read_cnt"));
}
private Date toDate(Timestamp timestamp) {
return new Date(timestamp.getTime());
}
public Article selectById(Connection conn, int no) throws SQLException {
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement(
"select * from article where article_no = ?");
pstmt.setInt(1, no);
rs = pstmt.executeQuery();
Article article = null;
if (rs.next()) {
article = convertArticle(rs);
}
return article;
} finally {
JdbcUtil.close(rs);
JdbcUtil.close(pstmt);
}
}
public void increaseReadCount(Connection conn, int no) throws SQLException {
try (PreparedStatement pstmt =
conn.prepareStatement(
"update article set read_cnt = read_cnt + 1 "+
"where article_no = ?")) {
pstmt.setInt(1, no);
pstmt.executeUpdate();
}
}
public int update(Connection conn, int no, String title) throws SQLException {
try (PreparedStatement pstmt =
conn.prepareStatement(
"update article set title = ?, moddate = now() "+
"where article_no = ?")) {
pstmt.setString(1, title);
pstmt.setInt(2, no);
return pstmt.executeUpdate();
}
}
public int delete(Connection conn, int articleNo1) throws SQLException {
try (PreparedStatement pstmt =
conn.prepareStatement(
"delete from article where article_no = ?")) {
pstmt.setInt(1, articleNo1);
return pstmt.executeUpdate();
}
}
}
2. ArticleContentDao 에 게시글 삭제 관련 기능 추가(특정번호에 해당하는 게시글 delete)
경로 : article.dao> ArticleContentDao.java
public int delete(Connection conn, int articleNo2) throws SQLException {
try (PreparedStatement pstmt =
conn.prepareStatement(
"delete from article_content where article_no = ?")) {
pstmt.setInt(1, articleNo2);
return pstmt.executeUpdate();
}
}
2-1. ArticleContentDao의 전체코드
package article.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import article.model.ArticleContent;
import jdbc.JdbcUtil;
public class ArticleContentDao {
public ArticleContent insert(Connection conn, ArticleContent content)
throws SQLException {
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(
"insert into article_content " +
"(article_no, content) values (?,?)");
pstmt.setLong(1, content.getNumber());
pstmt.setString(2, content.getContent());
int insertedCount = pstmt.executeUpdate();
if (insertedCount > 0) {
return content;
} else {
return null;
}
} finally {
JdbcUtil.close(pstmt);
}
}
public ArticleContent selectById(Connection conn, int no) throws SQLException {
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement(
"select * from article_content where article_no = ?");
pstmt.setInt(1, no);
rs = pstmt.executeQuery();
ArticleContent content = null;
if (rs.next()) {
content = new ArticleContent(
rs.getInt("article_no"), rs.getString("content"));
}
return content;
} finally {
JdbcUtil.close(rs);
JdbcUtil.close(pstmt);
}
}
public int update(Connection conn, int no, String content) throws SQLException {
try (PreparedStatement pstmt =
conn.prepareStatement(
"update article_content set content = ? "+
"where article_no = ?")) {
pstmt.setString(1, content);
pstmt.setInt(2, no);
return pstmt.executeUpdate();
}
}
public int delete(Connection conn, int articleNo2) throws SQLException {
try (PreparedStatement pstmt =
conn.prepareStatement(
"delete from article_content where article_no = ?")) {
pstmt.setInt(1, articleNo2);
return pstmt.executeUpdate();
}
}
}
3. DeleteRequest 작성(삭제할 게시글 번호를 담기위함)
경로 : article.service > DeleteRequest.java
package article.service;
public class DeleteRequest {
private int articleNumber;
public int getArticleNumber() {
return articleNumber;
}
public void setArticleNumber(int articleNumber) {
this.articleNumber = articleNumber;
}
}
4. DeleteArticleService작성(삭제기능 구현)
경로 : article.service > DeleteArticleService.java
package article.service;
import java.sql.Connection;
import java.sql.SQLException;
import article.dao.ArticleContentDao;
import article.dao.ArticleDao;
import jdbc.JdbcUtil;
import jdbc.connection.ConnectionProvider;
public class DeleteArticleService {
private ArticleDao articleDao = new ArticleDao();
private ArticleContentDao contentDao = new ArticleContentDao();
public void delete(DeleteRequest deleteReq) {
Connection conn = null;
try {
conn = ConnectionProvider.getConnection();
conn.setAutoCommit(false);
int articleNo1 = articleDao.delete(conn, deleteReq.getArticleNumber());
int articleNo2 = contentDao.delete(conn, deleteReq.getArticleNumber());
articleDao.delete(conn, articleNo1);
contentDao.delete(conn, articleNo2);
conn.commit();
} catch (SQLException e) {
JdbcUtil.rollback(conn);
throw new RuntimeException(e);
} finally {
JdbcUtil.close(conn);
}
}
}
5. DeleteArticleHandler작성
경로 : article.command > DeleteArticleHandler.java
package article.command;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import article.service.ArticleNotFoundException;
import article.service.DeleteArticleService;
import article.service.DeleteRequest;
import article.service.PermissionDeniedException;
import member.service.DuplicateIdException;
import mvc.command.CommandHandler;
public class DeleteArticleHandler implements CommandHandler {
private static final String FORM_VIEW = "/WEB-INF/view/deleteArticleForm.jsp";
private DeleteArticleService deleteService = new DeleteArticleService();
@Override
public String process(HttpServletRequest req, HttpServletResponse res) throws Exception {
if (req.getMethod().equalsIgnoreCase("GET")) {
return processForm(req, res);
} else if (req.getMethod().equalsIgnoreCase("POST")) {
return processSubmit(req, res);
} else {
res.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
return null;
}
}
private String processForm(HttpServletRequest req, HttpServletResponse res) {
return FORM_VIEW;
}
private String processSubmit(HttpServletRequest req, HttpServletResponse res) throws IOException {
String noVal = req.getParameter("no");
int no = Integer.parseInt(noVal);
DeleteRequest deleteReq = new DeleteRequest();
deleteReq.setArticleNumber(no);
Map<String, Boolean> errors = new HashMap<>();
req.setAttribute("errors", errors);
if (!errors.isEmpty()) {
System.out.println(errors);
return "/WEB-INF/view/deleteArticleFail.jsp";
}
try {
deleteService.delete(deleteReq);
return "/WEB-INF/view/deleteArticleSuccess.jsp";
} catch (DuplicateIdException e) {
errors.put("duplicateId", Boolean.TRUE);
return FORM_VIEW;
}
}
}
6. deleteArticleForm.jsp작성
경로 : WebContent > WEB-INF > view > deleteArticleForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>업무일지 삭제</title>
</head>
<body>
<form id="delete_form" action="delete.do" method="post">
<p>
<input type="hidden" name="no" value="${param.no}"><!-- 업무일지 번호: -->
</p>
<input type="submit" value="삭제">
</form>
<script type="text/javascript">
this.document.getElementById("delete_form").submit();
</script>
</body>
</html>
7. deleteArticleSuccess.jsp작성
경로 : WebContent > WEB-INF > view > deleteArticleSuccess.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<c:set var="pageNo" value="${empty modReq.pageNumber ? '1' : modReq.pageNumber}" />
<meta http-equiv="refresh" content="0; url=/board/article/list.do?pageNo=${pageNo}"></meta>
<title>업무일지 삭제</title>
<script>
alert('업무일지 삭제 성공.');
</script>
</head>
<body>
</body>
</html>
8. deleteArticleFail.jsp작성
경로 : WebContent > WEB-INF > view > deleteArticleFail.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<c:set var="pageNo" value="${empty modReq.pageNumber ? '1' : modReq.pageNumber}" />
<meta http-equiv="refresh" content="0; url=/board/article/list.do?pageNo=${pageNo}"></meta>
<title>업무일지 삭제</title>
<script>
alert('업무일지 삭제 실패.');
</script>
</head>
<body>
</body>
</html>
</html>
9. commandHandlerURI.properties 수정. DeleteArticleHandler가 /article/delete.do 요청을 처리하도록 매핑 설정에 추가한다.
/join.do=member.command.JoinHandler
/login.do=auth.command.LoginHandler
/logout.do=auth.command.LogoutHandler
/changePwd.do=member.command.ChangePasswordHandler
/article/write.do=article.command.WriteArticleHandler
/article/list.do=article.command.ListArticleHandler
/article/read.do=article.command.ReadArticleHandler
/article/modify.do=article.command.ModifyArticleHandler
/article/delete.do=article.command.DeleteArticleHandler
이상으로 게시판 구현 작업을 마무리 한다. 수고들 많았다!
'IT > JSP & Servlet' 카테고리의 다른 글
JSP & Servlet 게시판 구현하기(게시글 내용 수정) (0) | 2023.02.06 |
---|---|
JSP & Servlet 게시판 구현하기(게시글 내용 조회) (0) | 2023.02.06 |
JSP & Servlet 게시판 구현하기(게시글 목록 조회) (0) | 2023.02.06 |
JSP & Servlet 게시판 구현하기(게시글 쓰기) (0) | 2023.01.14 |
JSP & Servlet 게시판 구현하기(암호 변경) (0) | 2023.01.14 |