카테고리 없음
[Mybatis + Ajax] 게시물 삭제 구현해보기
Egu99
2021. 6. 1. 12:58
** 이전 단순 서블릿 프로젝트에서 Mybatis와 Ajax를 도입했다.
[Servlet] 게시물 삭제 구현하기
** 이전에 JSP로 만들었던 코드를 이용해 이를 서블릿으로 구현해보았다. deleteAction.jsp -> bbsD" data-og-host="egu99.tistory.com" data-og-source-url="https://egu99.tistory.com/43" data-og-url="https:..
egu99.tistory.com
2. 삭제하기
(1) View.jsp
<e:if test="${sessionScope.user.userID == b.userID}">
<a href="update2?bbsID=${b.bbsID}" class="btn btn-info">수정</a>
<a onclick= "bbsDelete(); return false" href='javascript:void(0);' class="btn btn-danger">삭제</a>
</e:if>
<script type="text/javascript">
var bbsDelete = function () {
if (confirm("정말 삭제하시겠습니까?") == false){ //확인
return;
}
var bbsID = "<e:out value='${b.bbsID}' />";
var data = encodeURIComponent(bbsID);
$.ajax({
url: "./delete2?bbsID="+bbsID,
type: "Get",
dataType: "json"
}).done(function(data) {
if(data.chk == 1){
alert("글이 삭제되었습니다.");
location.href ="bbs2";
}else{
alert("삭제가 실패하였습니다.");
}
}).fail(function(err) {
console.log(err);
});
}
</script>
- a태그의 수정 버튼을 누르면 아래 javascript 함수인 bbsDelete가 실행됨.
- 정말 삭제할지 confrim창으로 확인하여 취소시 retern, 확인시 진행하도록한다.
- view서 b라는 키로 VO객체를 받은 상태이고 그 객체의 bbsID가 필요하므로 JSTL을 이용해 자바스크립트에서 받는다.
- bbsID를 Ajax로 보내는데 이번엔 Get방식으로 보내고 Json으로 받는다.
- 응답받은 값이 1인 경우 삭제 성공, 아닐 경우 실패.
(2) 컨트롤러로 오기 전
- 삭제를 하려면 우선 권한이 있어야하는데 그럴려면 로그인이 되어있는지를 먼저 확인하고, 이 글이 삭제 가능한 상태(유효한 게시물)이어야하며, 마지막으로 글쓴이와 로그인한 회원이 같은지 검증해야한다.
- 서블릿 필터를 만들어 모두 순서대로 체크하였으며 로그인 확인은 여기, 유효 게시물 확인은 여기, 권한 검증은 여기 코드를 참조.
[ServletFilter] 로그인 필터 구현해보기
[JavaScript] 로그인과 세션 그리고 웹스토리지 ** 부처님 오신날에 쉬는 동안 문득 세션 확인에 대한 문제점이 떠올랐다. ** 기존의 로그인 확인은 컨트롤러에서 세션을 확인했다. 그도 그럴 것이
egu99.tistory.com
(3) DeleteControl.java
@WebServlet("/delete2")
public class DeleteControl2 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//필터 통해서 로그인 확인, 삭제 권한 확인, 게시물 상태 확인 후 이쪽으로
String bbsID_ = request.getParameter("bbsID");
int bbsID = Integer.parseInt(bbsID_);
int result = BbsDAO2.getInstance().delete(bbsID);
HashMap<String, Integer>map = new HashMap<String, Integer>();
map.put("chk", result);
String gson = new Gson().toJson(map);
response.getWriter().write(gson);
}
}
- bbsID를 받고 BbsDAO의 delete 메서드의 인자로 넣어 호출하고 int형을 반환 받는다.
- HashMap을 <String, Integer>로 해두고 바로 result값을 넣었더니 코드가 줄었다.
- map을 Gson라이브러리로 json화 시킨 후 ajax 응답으로 보낸다.
(4) BbsDAO.java + bbsDelete.xml
public class BbsDAO2 {
private static BbsDAO2 bao;
SqlSessionFactory factory;
private BbsDAO2() {
factory = MybatisConnector.getInstance().getFactory();
}
public static BbsDAO2 getInstance() {
if(bao == null) {
bao = new BbsDAO2();
}
return bao;
}
//게시물 삭제하기
public int delete(int bbsID) {
SqlSession session = factory.openSession(true);
int result = session.delete("bbs.delete", bbsID);
return result;
}
}
<!-- 삭제하기 -->
<update id="delete" parameterType="int">
update BBS set bbsAvailable = 0 where bbsID = #{bbsID};
</update>
- delete문을 써서 아예 레코드를 삭제하는 것이 아니라 bbsAvailable을 0으로 바꾸어 이용불가하게끔 update한다.
- mapper에서 update 성공시 DAO에 1을 반환할 것이고 DAO는 다시 컨트롤러에 1을 반환할 것이다.
(5) 결과 화면