자바개발과정/JSP&Servlet

MVC 패턴

경진 2008. 7. 15. 14:17
MVC 패턴

조회 버튼을 눌러 DB에 있는 값을 읽어 오려면, 조회를 누르면 selectDB()에 있는 메소드를 호출하여 결과를 받으려면,
public MemberVO  selectDB(){
    …
    return MemberVO;
}
SELECT한 결과가 1건일때 mVO에 넣으면 된다.

그러나, 1건 이상 여런 건일때는 컬렉션을 이용한다.
public List/ArrayList/컬렉션 프레임워크에있는 어떠한 오브젝트도 올수 있다.  selectDB(){
    /*
    LIst는 인터페이스(추상메서드)이다.
    List를 구현하기 위해서 new를 해서 생성할 수 없다. (List list = new List (X))
    List를 구현하기 위해서는 자식 클래스를 사용하면 된다. (List list = new ArrayList(O))
    */
    List list = new ArrayList();  // 아빠 = 아들
    while(rs.next()) {
    // rs.next()는 다음 커서르 이동한다 다음 커서에 값이 있으면 true를 반환한다.
    // 커서가 I/O블럭안에서 데이터가 존재할때까지 반복한다.
        list.add(rs.getString("mem_name")); // 으로 값을 읽어온다.

        list.put(key,value) // put을 사용한 값을 읽어오는 방법 (Hashtable, HashMap 등)
                                  // 이렇게 하면 VO에 있는 값을 컬렉션을 이용해서 담을 수 있다.
        list.get(i); // 해쉬 맵에 값을 읽어온다.
    return List;
}

select * from table; 이라는 쿼리를 자바에서 실행하려면
ResultSet rs = pstmt.executeQuery(); 이라는 구문을 사용하면 된다.

MemberVO mVO =  new MemberVO();
위의 예제를 통해 DB에서 값을 불러올때 이렇게 선언해주면 안된다.
이 의미는 MemberVO초기화  한다는 의미다. (모든 변수에 NULL을 저장한다)

MemberCtrl mCtrl = new MemberCtrl();
selectDB()를 호출하기 위한 인스턴스화이다.
해당하는 셀렉트 구문을 처리해주는 메소드, 참조변수를 사용하기 위한 메소드이다.

MemberVO mVO = mCtrl.selectDB();
selectDB() 를 호출 하여 DB에서 얻은 값을mVO에 넣는다.
참조 변수를 이용해서 셀렉트 구문을 호출 시킨다.

mVO의 로컬변수를 다른 클래스에서 변경 사용하기 위해서는  getter와 setter를 이용한다.
다음은 setter를 이용한 변수의 값을 변경하는 예제이다.
mVO.setMem_name(rs.getString("mem_name");

화면에 이름과 아이디의 라벨이 있고 각각 텍스트 필드가 있다
화면에다 값을 출력하기 위한 표현식 <%= %>이 있다.
<td><%= mVO.getMemberName()%></td> // 이름 출력한다.

컬렉션 프레임워크에서 백터나 ArrayList 같은경우 첫번째 방부터 차례로 데이터가 들어간다.
이전 회원정보를 가져올때 ArrayList를 사용하여 전체 데이터를 4로 나눴다. 그 이유는 데이타를 4개만 가져와야하기 때문이다.

Hashtable을 이용한다면,
List list = new ArrayList();
list.get(해당하는 인덱스);
를 사용한다.

수정을 구현한다.
List.jsp(전체조회)부터 생각한다.
여러가지의 글 중 어떤 것을 클릭하느냐에 따라 클릭했을 때 <a href=Detail.jsp(상세보기)></a>를 이용한다.
이때 Detail은 어떤 글이 클릭되었는지 아직 모른다 그래서 Detail 뒤에 ?(Get방식) 표를 붙이고 그 뒤에 변수를 붙인다. <a href=Detail.jsp?num=1></a>(select * from borad where num=1) 또는 사용자에게 숨기고 싶을때 즉, 주소창에 ?를 안붙이고 몰래 값을 넘기는 경우 <input type=hidden name=num value=1>을 사용한다. (주의할 점은 form tag안에 와야한다. 또한 sumit이 되야 전송된다.)
Deail.jsp은 앞 페이지에서 어떤 값을 받아야하는지 어떤 값을 넘겨야 하는지 생각하고 전체적인 흐름을 알고 작성한다.

조회는 excuteQuery();를 사용하며 DB의 값을 가져와야 함으로 rs를 사용한다.
입력, 수정, 삭제의 경우에는 excuteUpdate()를 사용하면 리턴 타입이 int형으로 처리된 갯수를 받아 인트형의 카운터 수를 받아 처리된 결과를 출력한다. (결과를 출력해야 하지 않기 때문이다.)