차근차근 개발자 되기

JSP

67일차: JSP 자료실 게시판(글 삭제) / Model1과 Model2 / 자바 서블릿_ 2021.09.16

wellow 2021. 9. 16. 15:01

 

목차

1.     자료실 게시판: 글 삭제

2.     Model 1 Model 2

3.     자바 서블릿(Java Servlet)

 

 

1. 자료실 게시판: 글 삭제

 

- 글 삭제 폼에서 DAO 객체를 생성하고 글 삭제 메소드를 호출할 때, 매개변수에 상세 정보의 주소 값을 가진 DTO 객체와 업로드 된 파일이 저장되는 디렉토리 경로를 전달한다.

 

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
32
33
34
35
36
37
38
39
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="upload.BoardDBBean"%>
<%@ page import="upload.BoardDataBean"%>
 
<% request.setCharacterEncoding("utf-8"); %>
 
<jsp:useBean id="upload" class="upload.BoardDataBean" />
<jsp:setProperty name="upload" property="*" />
 
<% 
    String nowpage = request.getParameter("page");
 
    String path = request.getRealPath("upload");
    System.out.println("path="+path);
 
    // 비밀번호 비교
    BoardDBBean dao = BoardDBBean.getInstance();        // DAO 객체 생성(DB 연동)    
    BoardDataBean old = dao.getContent(upload.getNum());
    
    if(old.getPasswd().equals(upload.getPasswd())){        // 비밀번호 일치시
        int result = dao.delete(old, path);                // 글 삭제, 첨부파일 삭제
        if(result == 1){
%>        
        <script>
            alert("글 삭제 성공");
            location.href="list.jsp?page=<%=nowpage%>";
        </script>
<%         }  
            
    }else{          // 비밀번호 불일치시  %>
        <script>
            alert("비밀번호가 일치하지 않습니다.");
            history.go(-1);
        </script>        
<%    }  %>
    
cs

 

- 글 삭제 폼에서 호출한 삭제 메소드에서는 게시글과 함께 첨부파일도 삭제해야 하는데, 이 때 File 객체를 생성한다.

 

<DAO 클래스에서 delete() 메소드>

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
32
33
34
35
36
37
38
39
40
41
42
// 글 삭제 + 첨부 파일 삭제
    public int delete(BoardDataBean upload, String path) {
        int result = 0;
        
        Connection con =  null;
        PreparedStatement pstmt = null;
        
        try {
            con = getConnection();
            
            String sql = "delete from upload where num = ?";
            
            pstmt = con.prepareStatement(sql);
            pstmt.setInt(1, upload.getNum());
            result = pstmt.executeUpdate();        // delete SQL문 실행
            
            
            if(upload.getUpload() != null) {    // 첨부파일 삭제
                File file =    new File(path);        // File 객체 생성 (java.io 패키지 import)
                
                // upload 디렉토리의 모든 파일을 읽어온다.
                File[] f = file.listFiles();
                
                for(int i=0; i<f.length; i++) {
                    
                    // upload 디렉토리에 저장된 파일 중에서 DB에 저장된 파일 삭제한다.
                    if(f[i].getName().equals(upload.getUpload())) {
                        f[i].delete();        // 첨부파일 삭제 실행
                    }            
                } // for end
                
            } // if end
            
        }catch(Exception e) {
            e.printStackTrace();
        }finally {
            if(pstmt != nulltry { pstmt.close(); } catch(Exception e){}
            if(con != nulltry { con.close(); } catch(Exception e){}
        }
        
        return result;
    }
cs

 

 

2. Model 1과 Model 2

 

- JSP로 구현할 수 있는 웹 어플리케이션의 아키텍쳐는 크게 Model 1과 Model 2로 나뉜다. 이 두 방식의 차이점은 JSP가 하는 역할에 있다. Model 1은 JSP가 출력과 로직(요청)을 모두 처리하는 반면, Model 2에서 JSP는 출력만을 담당한다.   

 

1) MVC 패턴

- ‘Model’, ‘View’, ‘Controller’를 합친 단어로, 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴

 

Model : 비즈니스 영역의 로직을 처리

View : 사용자가 보게 될 결과 화면(프레젠테이션 뷰)을 출력

Controller : 사용자의 입력 처리와 흐름 제어를 담당

 

2) Model 1과 Model 2

① Model 1

- 비즈니스 로직 영역과 프레젠테이션 영역을 함께 구현하는 방식

- 사용자의 요청을 JSP가 모두 처리

 

② Model 2

- 비즈니스 로직 영역과 프레젠테이션 영역이 분리되어 있는 구현 방식

- MVC(Model-View-Controller) 패턴을 웹 개발에 도입한 구조

- 컨트롤러(Controler)인 서블릿(Servlet)이 사용자의 요청을 받고, View로 보여줄지 아니면 Model로 보낼지를 정하여 전송한다.

 

3) 장단점

Model 1 – 장점) 빠르고 쉽게 개발 가능

                      단점) 유지ᆞ보수가 어려움

 

• Model 2 – 장점) 유지ᆞ보수 용이

                      단점) 개발 난이도가 높음

 

 

3. 자바 서블릿(Java Servlet)

1) 서블릿(Servlet)

- 자바(Java)를 사용하여 동적인 처리를 하는 프로그램으로, 클라이언트의 요청을 처리하고, 그 결과를 반환한다.

- MVC 패턴에서 Controller의 역할을 한다.

- 서블릿은 HttpServlet 클래스를 상속받는다.

- 자바 서블릿 클래스 생성을 위해서는 Apache Tomcat 라이브러리 하위 ‘servlet-api.jar’ 라이브러리 필요

 

2) 어노테이션(Annotation) : @WebServlet

- Servlet 매핑하는 방법에는 ① 어노테이션(Annotation)을 이용하는 방법과 ② web.xml에 설정하는 방법이 있다.

- 이클립스에서 서블릿을 생성할 경우, 어노테이션(Annotation) 형식으로 자동으로 매핑되기 때문에 이 방법이 더욱 간편하다.

- 어노테이션의 이름은 보통 클래스 이름과 같지만, 같지 않아도 상관 없다.

- ex) @WebServlet("/test")