본문 바로가기
CLASS/SPRING,JSTL

#5-2 / gallery board delete (spring + I/O + database)

by hingu 2024. 7. 12.

❗ 저장된 파일도 삭제해야함!!

 

- shop_main2.java 에 추가 - @GetMapping("/gallery_delete.do") (Contoller)

public static int m_gidx; //메모리를 사용할거다
@GetMapping("/gallery_delete.do")
public void gallery_delete(
        @RequestParam(required = true) Integer gidx,
        HttpServletResponse res,
        HttpServletRequest req
    ) throws Exception{

    res.setContentType("text/html;charset=utf-8");
    this.pw =res.getWriter();

    try {
        this.m_gidx = gidx;
        
		//module에서 삭제할 실제 웹 디렉토리를 가져와야 해서 인자값으로 req 넘겨줌
        String callback = new gallery_select().del_gal(dbInfo,req);
        if(callback == "Y") {
            this.pw.print("<script>"
                    + "alert('삭제가 완료되었습니다.');"
                    + "location.href='./gallery.do'"
                    + "</script>");
        }else {
            this.pw.print("<script>"
                    + "alert('삭제를 완료하지 못했습니다.');"
                    + "location.href='./gallery.do'"
                    + "</script>");
        }
    }catch(ClassCastException ce) { //=? 비워져있을때
        this.pw.print("<script>"
                + "alert('올바른 접근 방법이 아닙니다');"
                + "location.href='./gallery.do'"
                + "</script>");
    }catch(Exception e) {
        e.printStackTrace();
        System.out.println(e);
    }finally {
        this.pw.close();
    }
}

 

- gallery_select.java 에 추가 (Module) - shop_main2에서 호출하는 모듈

//shop_main2 sm = new shop_main2(); //Controller의 class load

shop_main2 sm; //이렇게 로드해도 됨 - Spring의 강점!
String result =""; //결과값 받을 전역변수 (Y or N)

public String del_gal(BasicDataSource dbinfo,HttpServletRequest req) throws Exception{
    //req : 실제 웹경로를 가져오기 위해 controller에서 인자값으로 던짐
    try {
        this.con = dbinfo.getConnection();

	//--실제파일 삭제
        
        //order by : 좀더 빠르게 처리 가능
        //실제 디렉토리에 저장되어있는 파일명 가져오기 위한 select query문
        String query = "select gfile from gallery where gidx=? order by gidx desc";
        this.ps = this.con.prepareStatement(query);
        this.ps.setInt(1,this.sm.m_gidx);
        this.rs = this.ps.executeQuery();
        this.rs.next();			

        if(this.rs.getString(1) != null) { //첨부파일이 있는 경우
            String filename[] = this.rs.getString(1).split(",");
            String url = req.getServletContext().getRealPath("/upload/");

            int w=0;
            while(w<filename.length) {
                File f = new File(url+filename[w]);
                f.delete();

                w++;
            }

        }

        //--database 삭제
        String sql = "delete from gallery where gidx=? order by gidx desc";
        this.ps = this.con.prepareStatement(sql);
        this.ps.setString(1,String.valueOf(this.sm.m_gidx));
        this.ps.executeUpdate();

        this.result="Y";
    }catch(Exception e) {
        System.out.println(e);
        this.result="N";
        System.out.println("삭제 오류");
    }finally {
        this.ps.close();
        this.con.close();
    }

    return this.result;
}