JSP - 게시글 삭제 / 작성 , 페이지네이션

RYU·2025년 5월 18일

JSP

목록 보기
3/5

DELETE

servlet


//			해당 번호를 삭제하기 위해 id 생성
			int id = Integer.parseInt(request.getParameter("id"));

//			해당 번호 지우기
			SecSql sql = SecSql.from("DELETE");
			sql.append("FROM article");
			sql.append("WHERE id = ?;", id);

//			가져온 걸 제거
			DBUtil.delete(conn, sql);

//			제거가 성공했다면, 알림창 활성화
			response.getWriter()
					.append(String.format("<script>alert('%d번 글이 삭제됨'); location.replace('list');</script>", id));

JSP

<td>
	<a onclick="if ( confirm('정말 삭제하시겠습니까?') == false ) { return false; }" 
    href="doDelete?id=<%=articleRow.get("id")%>">del</a>
</td>

페이지 네이션

servlet

//			page 초기값 1로 설정
			int page = 1;

			if (request.getParameter("page") != null && request.getParameter("page").length() != 0) {
				page = Integer.parseInt(request.getParameter("page"));
			}

//			한 페이지당 10개의 항목만 보여지게 설정
			int itemsInAPage = 10;
			int limitFrom = (page - 1) * itemsInAPage;

//			article 테이블에 있는 모든 행의 총 갯수
			SecSql sql = SecSql.from("SELECT COUNT(*)");
			sql.append("FROM article;");

			int totalCnt = DBUtil.selectRowIntValue(conn, sql);
			int totalPage = (int) Math.ceil(totalCnt / (double) itemsInAPage);

//			article 테이블에 자료들을 불러오는데 위에 정한 limitFrom부터 itemsInAPage까지만 불러오기
			sql = SecSql.from("SELECT *");
			sql.append("FROM article");
			sql.append("ORDER BY id DESC");
			sql.append("LIMIT ?, ?;", limitFrom, itemsInAPage);

			List<Map<String, Object>> articleRows = DBUtil.selectRows(conn, sql);

			request.setAttribute("page", page);
			request.setAttribute("articleRows", articleRows);
			request.setAttribute("totalCnt", totalCnt);
			request.setAttribute("totalPage", totalPage);

			
			request.getRequestDispatcher("/jsp/article/list.jsp").forward(request, response);

JSP

list.jsp에 추가

/* 페이지네이션을 하기 위해 필요한 정보들  */
int cPage = (int) request.getAttribute("page");
int totalCnt = (int) request.getAttribute("totalCnt");
int totalPage = (int) request.getAttribute("totalPage");

	<style type="text/css">
.page {
	font-size: 1.4rem;
}

.page>a {
	color: black;
	text-decoration: none;
}

.page>a.cPage {
	color: red;
	text-decoration: underline;
}
</style>

	<div class="page">
		<%
		for (int i = 1; i <= totalPage; i++) {
		%>
		<a class="<%=cPage == i ? "cPage" : ""%>" href="list?page=<%=i%>"><%=i%></a>
		<%
		}
		%>

	</div>

INSERT(WRITE)

DoWriteServlet


//			제목과 내용을 입력한 것을 가져오기
			String title = request.getParameter("title");
			String body = request.getParameter("body");

//			가져온 제목과 내용을 DB에 저장
			SecSql sql = SecSql.from("INSERT INTO article");
			sql.append("SET regDate = NOW(),");
			sql.append("updateDate = NOW(),");
			sql.append("title = ?,", title);
			sql.append("`body` = ?;", body);

			int id = DBUtil.insert(conn, sql);

			response.getWriter()
					.append(String.format("<script>alert('%d번 글이 작성됨'); location.replace('list');</script>", id));

writerServlet


@WebServlet("/article/write")
public class ArticleWriteServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		request.getRequestDispatcher("/jsp/article/write.jsp").forward(request, response);
	}

}

JSP


<title>글쓰기</title>
</head>
<body>
	<h2>글쓰기</h2>

	<a href="../home/main">메인으로 이동</a>

	<form action="doWrite" method="post">
		<div>
			제목 : <input type="text" placeholder="제목 입력" name = "title"/>
		</div>
		<div>
			내용 :
			<textarea type="text" placeholder="내용 입력" name = "body"></textarea>
		</div>
		<button type="submit">작성</button>
	</form>
</body>

0개의 댓글