model
controller
-> 세 영역으로 구분하고, 영역간 결합도를 최소화
Model1
웹 어플리케이션을 개발할 때 JSP만을 사용 하는 설계방법
클라이언트의 요청처리, DB 연동,
세션 관리, 응답 처리 등과 같은 작업을 JSP만으로 구현하는 방법
Model2
Client -> controller -> model dao/vo
controller -> view -> client
Presentation Logic과 BusinessLogic 처리를 명확하게 분리
model1
view와 controller가 같은 jsp에서 실행
개발기간 단축
model2
view와 Controller가 엄격히 구분
View는 어떠한 처리 Logic도 포함x




alt x 누르면 해당문 실행
package Model;
public class DTO {
//DTO: Data Transfer Object 데이터 전달 객체
// : 보통 테이블형태를 그대로 따라감
private String id;
private String pw;
private String name;
// 생성자 메소드 -> 데이터를 담는가방
// 생성자 : 객체를 초기화 하기 위한 메소드
// this : 현재 객체
public DTO(String id, String pw, String name) {
//전역변수 확실히 지정하기 위해서 this를 사용함
this.id = id;
this.pw = pw;
this.name = name;
}
//getter setter
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package Model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DAO {
// DAO : Data Access Object => db에 접근하는 객체
// 회원가입 기능
// 회원가입 : 입력받은 데이터를 회원table에 삽입
// sql : insert into Member values(id,pw,name)
public int join(String id, String pw, String name) {
// jdbc api
// DB랑 join메소드랑 연결 -> OracleDriver라는 클래스가 필요
// 1. Oracle에서 제공하는 ojdbc6.jar 라이브러리 import해야함
// 프로젝트 webapp - web-inf - lib 폴더에 넣기
// 2. DB연결을 도와주는 class 불러오기
// 3. DB접속하기 위해서 카드키 설정
Connection conn = null;
PreparedStatement psmt = null;
int row = 0;
try {
// OracleDriver : DB-Java 사이에 통로를 만들어주는 역할
Class.forName("oracle.jdbc.driver.OracleDriver");
// 3-1. DB접속하기 위해서 카드키 설정(주소, 계정, 비번)
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String db_user = "hr";
String db_pw = "hr";
// 3-2. 카드키로 DB에 접속 -> 접속 성공 시 Connection객체로 반환
conn = DriverManager.getConnection(url, db_user, db_pw);
// 4. sql문장 작성 : DB연결 후 행할 행위
// ? : 바인드변수 -> 계속 변하는 값
String sql = "insert into Member values(?,?,?)";
//5.sql문을 DB에 전달 -> 전달 성공시에는 PrepareStatement 객체로 반환
psmt = conn.prepareStatement(sql);
//6. ?에 값 채우기 -> sql문장 온전하게 만들기
// psmt.set데이터타입(몇 번째 물음표인가?, ?에 들어갈 값);
psmt.setString(1, id);
psmt.setString(2, pw);
psmt.setString(3, name);
// 7. sql문 실행
//excuteUpdate : select 구문을 제외한 모든 구문을 수행할 때 사용
// int형태로 반환하는데 -> 숫자의 의미는 몇개의 행이 변화되었는가(1 row affected)
row = psmt.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
// 8. DB연결 종료
// psmt, conn, try문 안에 선언-> 전역변수로 만들어주기
// 열리지 않은 객체를 Close하라고 하면 오류가 나기 때문ㅇ
// 꼭 null이 아닐때만 Close실행
try {
if(psmt != null) psmt.close();
if(conn != null) conn.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
return row;
}
}