데이터 교환를 위해 사용되는 객체
[외부 페이지 <-> 외부 페이지] 간의 데이터를 담고있는 객체를 담은 Object , [데이터 포장 객체] 이다
[ ❗ - 이것을 JSP 에서 Beans 라고 불린다]
read-Only ( 오직 읽기만 가능한 기능) 을 가진다
( Setter 불가능 )
VO 와 같이 [ 외부 페이지 <-> 외부 페이지 ] 간의 데이터를 담고 있는 객체 Object 이다
VO 와의 차이점은 읽고 쓰기 ( Getter & Setter ) 가 가능하다는 점이다.
사용자의 요청이 담긴 데이터를 DTO 에 담아
Controller , View , Model , DB 등 외부 영역으로 이동하며
사용자의 요청에 필요한 정보들을 담고 저장한 후
사용자의 요청을 수행하는데에 사용되는 객체 덩어리이다.
데이터 접근 객체
데이터를 담당하는 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 파일을 다시 보여주면서
회원가입 페이지로 다시 이동