[JSP] DTO DAO VO 개념

UnKnown12·2022년 10월 19일
0

JSP

목록 보기
4/7

📌 [ VO ] - Value Object

데이터 교환를 위해 사용되는 객체
[외부 페이지 <-> 외부 페이지] 간의 데이터를 담고있는 객체를 담은 Object , [데이터 포장 객체] 이다

[ ❗ - 이것을 JSP 에서 Beans 라고 불린다]

read-Only ( 오직 읽기만 가능한 기능) 을 가진다
( Setter 불가능 )

📌 [ DTO ] - Data Transfer Object

VO 와 같이 [ 외부 페이지 <-> 외부 페이지 ] 간의 데이터를 담고 있는 객체 Object 이다

VO 와의 차이점은 읽고 쓰기 ( Getter & Setter ) 가 가능하다는 점이다.
사용자의 요청이 담긴 데이터를 DTO 에 담아

Controller , View , Model , DB 등 외부 영역으로 이동하며
사용자의 요청에 필요한 정보들을 담고 저장한 후
사용자의 요청을 수행하는데에 사용되는 객체 덩어리이다.

📌 [ DAO ] - Data Access Object

데이터 접근 객체

데이터를 담당하는 Model 영역 <-> DB 영역 간의
데이터 송수신을 하기위한 덩어리 객체 이다

DB 접근 및 관리를 주 목적으로 한다

DB 에 사용되는 입력, 제거, 변경, 선택 [ insert / delete / update / select ],
레코드 처리를 담당한다.

.Java* 파일에서 SQL(DB)를 직접 실행하는 기능을 가진다

📌 예제


사용자(클라이언트)가 회원가입을 위해 로그인 폼 ( View 영역) 에 접근
사용자가 id, pw, name, gender, phoneNumber 정보를 입력하여 회원가입을 하려고 한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>join_view</title>
</head>
<body>
	<form name="joinForm" method="post" action="join_db.jsp">
		<p id="text">사용할 수 있는 아이디입니다.</p>
		<p>
			<label>아이디<input type="text" name="userid"></label>
			<input type="button" value="중복확인" onclick="">
		</p>
		<p>
			<label>비밀번호 <input type="password" name="userpw"> </label>
		</p>
		<p>
			<label>비밀번호확인 <input type="password" name="userpw_re"> </label>
		</p>
		<p>
			<label>이름 <input type="text" name="username"> </label>
		</p>
		<p>
			성별<br>
			<label>남자<input type="radio" name="usergender" value="M" checked> </label>
			<label>여자<input type="radio" name="usergender" value="W" checked> </label>
		</p>
		<p>
			<label>휴대폰 번호 <input type="text" name="userphone"> </label>
		</p>
		<p>
			우편번호
		</p>
		<p>
			주소
		</p>
		<p>
			상세주소
		</p>
		<p>
			<input type="button" value="가입완료" onclick="sendit()">			
		</p>
	</form>
</body>
<script src="user.js"></script>
</html>

이후 사용자의 정보입력을 서버가 원하는 방식으로 입력하게끔
.js* 를 통해 Validation Check 실시

function sendit(){
	let frm = document.joinForm;
	let userid = frm.userid;
	let userpw = frm.userpw;
	let userpw_re = frm.userpw_re;
	let username = frm.username;
	let userphone = frm.userphone;
 	// 아이디를 입력하세요
	if( userid.value == "" ){
		alert("아이디를 입력하세요");
		userid.focus();
		return false;
	}
 	// 아이디는 5자 이상, 16자 미만
 	if( userid.value.length <= 4 || userid.value.length >= 16 ){
		alert("아이디는 5자 이상, 16자 미만으로 입력하세요!");
		userid.focus();
		return false;
	} 
 	// 비밀번호 입력
	// 비밀번호는 8자 이상
 	if( userpw.value == "" ){
		alert("비밀번호를 입력하세요");
		userpw.focus();
		return false;
	} else {
		if( userpw.value.length < 8 ){
			alert("비밀번호는 8자리 이상으로 입력하세요!");
			userpw.focus();
			return false;
		}
	}
 	// 비밀번호 == 비밀번호확인
 	if( userpw.value != userpw_re.value ){
		alert("비밀번호 확을 다시하세요!");
		userpw_re.focus();
		return false;
	} 
 	// 이름
 	if( username.value == ""  ){
		alert("이름을 입력하세요!");
		username.focus();
		return false;
	}
 	// 휴대폰 번호
 	if( userphone.value == ""  ){
		alert("휴대폰 번호를 입력하세요!");
		userphone.focus();
		return false;
	}
 	// submit
 	frm.submit();
}

서버가 원하는 사용자(클라이언트) 의 정보를 입력받은 후,
사용자의 정보를 DB에 접근하기 위해 DAO 로 객체화 시킨다.

public class UserBean {
	private String userid;
	private String userpw;
	private String username;
	private String usergender;
	private String userphone;	
	public String getUserid() {
		return userid;
	}
	public void setUserid(String userid) {
		this.userid = userid;
	}
	public String getUserpw() {
		return userpw;
	}
	public void setUserpw(String userpw) {
		this.userpw = userpw;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getUsergender() {
		return usergender;
	}
	public void setUsergender(String usergender) {
		this.usergender = usergender;
	}
	public String getUserphone() {
		return userphone;
	}
	public void setUserphone(String userphone) {
		this.userphone = userphone;
	}	
}

사용자의 정보르 담을 변수 선언과
오직 Getter & Setter 기능이 담긴 객체 생성 후

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.koreait.web.beans.UserBean;
public class UserDAO {
	Connection conn;
	PreparedStatement pstm;
	ResultSet rs;
	public boolean join( UserBean user ) {
		boolean result = false;	
		// INSERT INTO TBL_USER VALUES('test', '1234', 'user1','M','01012345678')
		String sql = "INSERT INTO TBL_USER VALUES(?, ?, ?, ?, ?)";
		int cnt = 0;	
		try {
			conn = DBConnection.getConnection();
			pstm = conn.prepareStatement(sql);
			// param값 setting
			pstm.setString(1, user.getUserid());	
			pstm.setString(2, user.getUserpw());
			pstm.setString(3, user.getUsername());
			pstm.setString(4, user.getUsergender());
			pstm.setString(5, user.getUserphone());
			cnt = pstm.executeUpdate();
		}catch (Exception e) {
			e.printStackTrace();
		}
		if( cnt != 0 ) {
			// 가입 성공
			result = true;
		} else {
			// 가입 실패
			result = false;
		}	
		return result;
	}
}

DB 에 접근시켜 사용자 정보를 DB에 담는다

Conn= DBConnection.getConnection();

DB 에 접근하기 위한 Driver, url , 관리자 id , 관리자 pw 의 정보를 담긴 클래스
import 한번으로 DB 접속에 필요한 모든 조건을 가져온다.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection {
	public static Connection getConnection() {
		Connection conn = null;		
		try {
			String driver = "oracle.jdbc.driver.OracleDriver";
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			String user = "jsp";
			String password = "jsp";		
			Class.forName(driver);
			conn = DriverManager.getConnection(url, user, password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			System.out.println("드라이버 로딩 실패");
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("DB 접속 오류");
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("알 수 없는 오류");
		}	
		return conn;	
	}	
}
import java.sql.PreparedStatement;
	String sql = "INSERT INTO TBL_USER VALUES(?, ?, ?, ?, ?)";
	PreparedStatement pstm;
    pstm = conn.prepareStatement(sql);

Pstm ( PrepareStatement ) 객체는 .sql 에서 사용하는 명령문을
.java
파일에서도 수행할수 있게 도와주는 객체이다.

import java.sql.ResultSet;
	ResulSet rs;

pstm 으로 실행한 SQL 구문을 rs ( ResultSet ) 객체를 통해
DB 에서 저장할 수 있으며,
저장한 값을 DB에서 가져올 수 있다.

<%@page import="com.koreait.web.dao.UserDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<jsp:useBean id="user" class="com.koreait.web.beans.UserBean" />
	<!-- *로 처리하면 한번에 해결 가능 -->
<%-- 	<jsp:setProperty property="userid" name="user"/> --%>
<%-- 	<jsp:setProperty property="userpw" name="user"/> --%>
<%-- 	<jsp:setProperty property="username" name="user"/> --%>
	<!-- 외부에서 전달된 name 속성과 필드의 이름이 같으면 value 가 자동 세팅 -->
	<jsp:setProperty property="*" name="user"/>
	<%
		UserDAO udao = new UserDAO();
		if(udao.join(user)){
			// 가입성공
	%>
		<script>
			alert('회원가입 성공!');
			location.href = "login_view.jsp";
		</script>
	<%
		} else {
			// 가입실패
	%>
		<script>
			alert('회원가입 실패!');
			location.href = "join_view.jsp";
		</script>
	<%
		}
	%>
</body>
</html>

가입에 성공
-> login_view.jsp 파일로 이동하여
로그인 페이지로 이동
가입에 실패
-> join_view.jsp 파일을 다시 보여주면서
회원가입 페이지로 다시 이동

profile
Hyobin12

0개의 댓글