[Spring] STS / file upload 파일 올리기 _ 2. delete

2021. 3. 4. 14:41Web_Back-end/Spring

 

2021/03/04 - [Web_Back-end/Spring] - [Spring] STS / lombok 사용

2021/03/04 - [Web_Back-end/Spring] - [Spring] STS / file upload 파일 올리기 _ 1. select

1번 게시물에 이어서, goods테이블의 상품을 삭제(delete)하는 코드를 작성해본다

 


a태그로 상품 수정, 삭제 페이지로 이동하는 코드 추가

--> 쿼리스트링으로 상품번호를 보낸다

 

detailGoods.jap
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>상품상세</h2>
상품번호 : ${g.no }<br>
상품이름 : ${g.name }<br>
상품수량 : ${g.qty }<br>
상품가격 : ${g.price }<br>
<img  src="img/${g.fname }">
<hr>
<a href="updateGoods.do?n=${g.no }">상품수정</a>
<a href="deleteGoods.do?n=${g.no }">상품삭제</a>
</body>
</html>

 

DELETE


Controller에 method추가 + 파일을 삭제하는 일

  • deleteGoods.do 를 요청하면, 일어나는 일을 정의한다
  • 파일이 있는 실 경로를 아는 곳은 컨트롤러이기 때문에 파일을 삭제하는 일을 컨트롤러에서 처리한다

 

GoodsController.java 에 추가
/**
	 * @param no DB의 데이터를 삭제하기 위한 기준
	 * @param request 파일을 삭제하기 위해 사용하는 객체
	 * @return
	 */
	@RequestMapping("/deleteGoods.do")
	public ModelAndView delete(int no, HttpServletRequest request) {
		ModelAndView mav = new ModelAndView();
		// 파일의 실 경로를 담는다
		String path = request.getRealPath("/img");
		
		// dao 가 레코드를 삭제하면 파일명을 알 수 없다
		// 따라서, 해당 레코드를 삭제하기 전에 파일명을 미리 알아둔다 _ 파일삭제를 위해
		// vo를 반환해주는 selectGoods(해당상품번호)를 사용한다
		String oldFname = dao.selectGoods(no).getFname(); 
		
		// dao에서 삭제할 method 이름 = deleteGoods(int no)
		int re = dao.deleteGoods(no);
		if(re == 1) {// 삭제에 성공한 경우
			// 파일 객체를 생성하여, 파일 지우기
			File file = new File(path + "/" + oldFname);
			file.delete();
			
			// _ 상품목록 요청
			mav.setViewName("redirect:/listGoods.do");
		}else {
			mav.addObject("msg", "상품삭제에 실패하였습니다");
			mav.setViewName("error");
		}
		
		return mav;
	}

dao에 컨트롤러에서 불러온 method를 만든다

 

GoodsDao.java 에 deleteGoods(int no) 추가
	public int deleteGoods(int no) {
		// TODO Auto-generated method stub
		return DBManager.deleteGoods(no);
	}

DBManager에 method추가

 

DBManager.java 에 deleteGoods(int no) 추가 _ xml에 추가할 deleteGoods 를 호출
	public static int deleteGoods(int no) {
		// TODO Auto-generated method stub
		SqlSession session = factory.openSession();
		int re = session.delete("goods.deleteGoods", no);
		// commit
		session.commit();
		session.close();
		return 0;
	}

GoodsMapper.xml 에 id 가 deleteGoods 인 노드 추가

 

여기까지의 과정을 거꾸로 해도 된다

 


server가동하여 test해보기