MVC

1·2023년 2월 8일
0

MVC

목록 보기
1/2
post-thumbnail

🤔1. MVC (MODEL VIEW CONTROLLER) 란?

  • Design Pattern : 소프트웨어 설계에 있어 공통된 문제들에 대한 표준적인 해결책
  • MVC : 시각적으로 보여지는 부분과 데이터를 처리하는 부분을 분리하여 유연한 구조를 설계

2. MVC 기본구조

Model : 뷰에 출력할 데이터를 담아둠 (실행에 직접적 관여 X)

View : 모델에 담겨있는 데이터를 사용해서 화면에 그리는 일을 하는데, HTML을 생성하는 부분

Controller : HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행합니다. 그리고 뷰에 전달할 결과 데이터를 조회해서 모델에 담습니다.


3. MVC 종류

- MODEL 1

  • JSP에서 출력과 로직을 전부 컨트롤 (Web 어플리케이션을 개발할 때 JSP만 사용하는 설계 방법)

- MODEL 2

  • JSP 에서는 출력만 처리(View와 Controller를 명확하게 분리)
  • View만 JSP, Model과 Controller는 java파일로 생성

- MODEL1 VS MODEL2


4. Model에 db추가

  • ojdbc8파일 찾은 후 WEBAPP > WEB-INF > lib 안에 붙여넣기

5. Model1 이클립스 구조(회원가입,로그인)

  • DTO 구조
package Model;

public class DTO {
	
	// 사용하고자 하는 데이터의 설계를 정리하는 부분
	
	private String id;
	private String pw;
	private String name;
	
	// 생성자 메소드 - 회원가입용
	public DTO(String id, String pw, String name) {
		this.id=id;
		this.pw=pw;
		this.name=name;
	}

	// setter / getter 메소드 생성(Alt+Shift+S)
	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;
	}
}
  • DAO 구조
package Model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DAO {
	
	// 데이터베이스 연결을 위한 로직 작업
	
	Connection conn=null;//(1-2) 전역변수 작업
	PreparedStatement psmt = null;//(2)
	ResultSet rs = null;//(2)import 작업
	
	int result= 0; // 결과값 전체적으로 사용하기위한 전역변수 선언
	
	// 1. 데이터베이스 연결 메소드 만들기(만든 후 try/catch 로 잡아주기)
	public void getCon( ) {
		try {
			// 1-1 드라이버 연결
			Class.forName("oracle.jdbc.driver.OracleDriver");
			// 1-3 심부름꾼 권한 부여
			String db_url ="jdbc:oracle:thin:@localhost:1521:xe";
			String db_id ="c##오라클ID";
			String db_pw ="오라클 비밀번호";
			// 1-2 왔다갔다 할 수 있는 심부름꾼 생성(import작업!)
			//conn- 전역에서 사용해야하기때문에 전역변수 미리선언
			conn = DriverManager.getConnection(db_url,db_id,db_pw);
			
		// *catch문 Exception 통일후 하나만 작성가능*
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	// 2. DB 연결을 종료하는 메소드 -> 사용 객체의 역순으로 닫기!
	public void close() {
		// rs,psmt,conn이 사용됐다면 null값이 아니기때문에
		//여기서도 try/catch 사용try안으로 if문넣기
			try {
				if(rs != null) {
				rs.close();
				}if(psmt != null) {
					psmt.close();
				}if(conn != null) {
						conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
	}
	
	
	// 3. 회원가입을 위한 메소드 생성
	public int join(DTO dto) {
		// getCon 연결
		getCon();
		// 무엇이 들어올지 모르기때문에 일단 ? 채워넣기
		String sql = "INSERT INTO MEMBERINFO VALUES(?,?,?)";
		// sql 문법 작성에서도 문제될수도 있으니 try/catch 사용
		try {
			// 심부름꾼 일시키기
			psmt =conn.prepareStatement(sql);
			// ? 값을 채워줘야 하니 데이터 집어넣는 작업
			// dto안에 3개 있기때문에 각각 집어넣기 위한 작업
			psmt.setString(1,dto.getId());
			psmt.setString(2,dto.getPw());
			psmt.setString(3,dto.getName());
			
			// sql 실행 메소드
			// - excuteQuery() : 데이터가 바뀌지않는다면,ex)조회(select).. 
			// - excuteUpdate() : 데이터가 바뀐다면, ex)삽입,수정,삭제..
			result =psmt.executeUpdate();// int형으로 결과값 확인가능
			// 회원가입 위한 메소드 join 실행하기위해 result 사용,지역변수이기 때문에미리 result 선언해주기
		} catch (SQLException e) {
			e.printStackTrace();
		}
		//catch 기준으로 추가(닫아줘야하기때문)
		finally {
			close();
		}
		return result;//맨 마지막에 선언
		
	}

	// 1. 드라이버 동적로딩 -> Class.forName()
	// 2. DB 연결  
	// 3. SQL문 작성 및 전송
	// 4. 사용 객체 닫아주기
	
}
profile
🧐🤔

0개의 댓글