멋쟁이v의 개발일지

[JSP] DTO(bean) insert/update 처리 본문

0년차/JAVA

[JSP] DTO(bean) insert/update 처리

멋쟁이v 2023. 6. 18. 22:02
728x90
320x100

[목차]


01. DTO(Date Transfer Object)

💡
DTO는 계층 간 데이터 교환을 하기 위해 사용하는 객체로, 로직을 갖지 않는 순수한 데이터 객체(setter&getter 만 가진 클래스)입니다.

➡️ 유저가 자신의 브라우저에서 데이터를 입력하여 form 에 있는 데이터를 DTO에 넣어서 전송합니다.

➡️ 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 저장한다.

02. java Bean 액션태그

💡
종류 : useBean, setProperty, getProperty
  • useBean
    👉🏻
    <jsp:useBean id=”bean이름" class="java bean 파일의 패키지.클래스명" scope="유효범위" />

    ➡️ 특정한 자바빈 파일을 사용한다고 명시할 때 사용

    ➡️ 클래스 빈이름 = new 클래스(); 와 동일한 의미

  • setProperty
    👉🏻
    <jsp:setProperty name=”bean이름" property="필드명" value=”값”/>

    <jsp:setProperty name="bean이름" property="*"/>

    ➡️ 자바빈 파일의 setter 메서드를 사용하기 위해, 즉 데이터의 값을 설정할 때 사용된다.

    ➡️ useBean 액션태그로 생성한 자바빈 객체에 대해서 프로퍼티(필드)에 값을 설정하는 역할을 한다.

    ➡️ property 속성에 * 를 사용하면 프로퍼티와 동일한 이름의 파라미터를 이용하여 setter 메서드를 생성한 모든 프로퍼티(필드)에 대해 값을 설정할 수 있다.

  • getProperty
    👉🏻
    <jsp:getProperty name=”bean이름" property="필드명"/>

    ➡️ 자바빈 파일의 getter 메서드를 사용하기 위해, 즉 저장된 데이터의 값을 읽어올 때 사용된다.

03. DTO(bean) insert 처리

💡
1️⃣ 입력 자료를 입력 후 post방식으로 전달한다.

2️⃣ 입력 자료를 받아서 DTO 객체 내에 셋팅한다.

3️⃣ insert 쿼리 준비 후 DTO 객체 내에서 겟팅한다.

4️⃣ 쿼리 실행

5️⃣ 쿼리 사용 결과 생략

6️⃣ 데이터베이스 테이블 내에 insert 처리 완료 확인

  • [코드예제]User.java(DTO)
    package kr.or.dto;
    
    public class User {
    		// 데이터 영역
        private String u_id;
        private String u_pw;
        private String u_level;
        private String u_name;
        private String u_email;
        private String u_phone;
        private String u_addr;
    
    		// 메서드 영역(getter&setter)
        public String getU_id() {
            return u_id;
        }
    
        public void setU_id(String u_id) {
            this.u_id = u_id;
        }
    
        public String getU_pw() {
            return u_pw;
        }
    
        public void setU_pw(String u_pw) {
            this.u_pw = u_pw;
        }
    
        public String getU_level() {
            return u_level;
        }
    
        public void setU_level(String u_level) {
            this.u_level = u_level;
        }
    
        public String getU_name() {
            return u_name;
        }
    
        public void setU_name(String u_name) {
            this.u_name = u_name;
        }
    
        public String getU_email() {
            return u_email;
        }
    
        public void setU_email(String u_email) {
            this.u_email = u_email;
        }
    
        public String getU_phone() {
            return u_phone;
        }
    
        public void setU_phone(String u_phone) {
            this.u_phone = u_phone;
        }
    
        public String getU_addr() {
            return u_addr;
        }
    
        public void setU_addr(String u_addr) {
            this.u_addr = u_addr;
        }
    
    }

  • [코드예제] user_insert_form.jsp
    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="EUC-KR">
    <title>Insert title here</title>
    <link rel="stylesheet" type="text/css" href="<%= request.getContextPath() %>/css/main.css" />
    </head>
    
    <body>
    
    <%@ include file="/module/top.jsp" %>
    <%@ include file="/module/left.jsp" %>
    
    /***** form으로 입력자료를 post방식으로 전달 *****/
    <form action="<%= request.getContextPath() %>/uinsert/user_insert_action.jsp" method="post">
    	<table border="1">
    		<tr>
    			<td>아이디</td>
    			<td><input type="text" name="u_id"></td>
    		</tr>
    		<tr>
    			<td>비밀번호</td>
    			<td><input type="text" name="u_pw"></td>
    		</tr>
    		<tr>
    			<td>권한</td>
    			<td><input type="text" name="u_level"></td>
    		</tr>
    		<tr>
    			<td>이름</td>
    			<td><input type="text" name="u_name"></td>
    		</tr>
    		<tr>
    			<td>이메일</td>
    			<td><input type="text" name="u_email"></td>
    		</tr>
    		<tr>
    			<td>전화번호</td>
    			<td><input type="text" name="u_phone"></td>
    		</tr>
    		<tr>
    			<td>주소</td>
    			<td><input type="text" name="u_addr"></td>
    		</tr>
    		<tr>
    			<td colspan="2"><input type="submit" value="회원가입"></td>
    		</tr>
    	</table>
    </form>
    
    <%@ include file="/module/hadan.jsp" %>
       
    </body>
    </html>

  • [코드예제] user_insert_action.jsp
    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!DOCTYPE html>
    <%@ page import="java.sql.Connection" %>
    <%@ page import="java.sql.PreparedStatement" %>
    <%@ page import="java.sql.SQLException" %>
    <%@ page import="kr.or.driverdb.DriverDB" %>
    
    <%	request.setCharacterEncoding("euc-kr"); %> // post 한글처리
    
    /***** java Bean 액션태그 사용 *****/
    <jsp:useBean id="u" class="kr.or.dto.User"/>
    <jsp:setProperty name="u" property="*"/>
    
    <%
    	Connection conn = null;
    	PreparedStatement pstmt = null;
    	
    	try {
    		// 1_2단계 드라이버실행, DB연결 분리
    		DriverDB db = new DriverDB();
    		conn = db.driverDbcon();
    		System.out.println(conn + "<- conn user_insert_action.jsp");
    
    		// 3단계: 쿼리 실행을 위한 객체 생성
    		pstmt = conn.prepareStatement("INSERT INTO tb_user VALUES(?, ?, ?, ?, ?, ?, ?)");
    		System.out.println(pstmt + "<- pstmt 1");
    
    		// 쿼리 실행준비 단계에서 겟팅
    		pstmt.setString(1, u.getU_id());
    		pstmt.setString(2, u.getU_pw());
    		pstmt.setString(3, u.getU_level());
    		pstmt.setString(4, u.getU_name());
    		pstmt.setString(5, u.getU_email());
    		pstmt.setString(6, u.getU_phone());
    		pstmt.setString(7, u.getU_addr());
    		System.out.println(pstmt + "<- pstmt 2");
    
    		// 4단계: 쿼리 실행
    		int result = pstmt.executeUpdate();
    		System.out.println(result + "<-result");
    
    		// 5단계: 쿼리 실행결과 사용(insert 생략 가능)
    
    		}finally{
    			// 6단계: statement 또는 prepareStatement객체 종료(close())
    			if (pstmt != null) try { pstmt.close(); } catch(SQLException ex) {}
    			// 7단계: Connection 객체 종료(close())
    			if (conn != null) try { conn.close(); } catch(SQLException ex) {}
    		}
    
    		// user_list.jsp 로 리다이렉트
    		// response.sendRedirect(request.getContextPath() + "/ulist/user_list.jsp");
    
    		// user_search_list.jsp로 리다이렉트
    		response.sendRedirect(request.getContextPath() + "/usersearch/user_search_list.jsp");
    %>

04. DTO(bean) update 처리

💡
1️⃣ 입력 자료를 입력 후 post방식으로 전달한다.

2️⃣ 입력 자료를 받아서 DTO 객체 내에 셋팅한다.

3️⃣ update 쿼리 준비 후 DTO 객체 내에서 겟팅한다.

4️⃣ 쿼리 실행

5️⃣ 쿼리 사용 결과 생략

6️⃣ 데이터베이스 테이블 내에 update 처리 완료 확인

  • [코드예제]User.java(DTO)
    package kr.or.dto;
    
    public class User {
        private String u_id;
        private String u_pw;
        private String u_level;
        private String u_name;
        private String u_email;
        private String u_phone;
        private String u_addr;
    
    
        public String getU_id() {
            return u_id;
        }
    
        public void setU_id(String u_id) {
            System.out.println(u_id + "<- u_id setU_id User.class");
            this.u_id = u_id;
        }
    
        public String getU_pw() {
            return u_pw;
        }
    
        public void setU_pw(String u_pw) {
            System.out.println(u_pw + "<- u_pw setU_pw User.class");
            this.u_pw = u_pw;
        }
    
        public String getU_level() {
            return u_level;
        }
    
        public void setU_level(String u_level) {
            System.out.println(u_level + "<- u_level setU_level User.class");
            this.u_level = u_level;
        }
    
        public String getU_name() {
            return u_name;
        }
    
        public void setU_name(String u_name) {
            System.out.println(u_name + "<- u_name setU_name User.class");
            this.u_name = u_name;
        }
    
        public String getU_email() {
            return u_email;
        }
    
        public void setU_email(String u_email) {
            System.out.println(u_email + "<- u_email setU_email User.class");
            this.u_email = u_email;
        }
    
        public String getU_phone() {
            return u_phone;
        }
    
        public void setU_phone(String u_phone) {
            System.out.println(u_phone + "<- u_phone setU_phone User.class");
            this.u_phone = u_phone;
        }
    
        public String getU_addr() {
            return u_addr;
        }
    
        public void setU_addr(String u_addr) {
            System.out.println(u_addr + "<- u_addr setU_addr User.class");
            this.u_addr = u_addr;
        }
    
    }

  • [코드예제] user_update_form.jsp
    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="EUC-KR">
    <title>Insert title here</title>
    <link rel="stylesheet" type="text/css" href="<%= request.getContextPath() %>/css/main.css" />
    </head>
    
    <body>
    
    <%@ include file="/module/top.jsp" %>
    <%@ include file="/module/left.jsp" %>
    
    <%@ page import = "java.sql.Connection" %>
    <%@ page import = "java.sql.PreparedStatement" %>
    <%@ page import = "java.sql.ResultSet" %>
    <%@ page import = "java.sql.SQLException" %>
    <%@ page import="kr.or.driverdb.DriverDB" %>
    
    <%
    	// 리스트 화면에서 수정버튼 클릭 시 get방식으로 id값을 받는다.
    	String send_id = request.getParameter("send_id");
    
    	String dbid = null;
    	String dbpw = null;
    	String dblevel = null;
    	String dbname = null;
    	String dbemail = null;
    	String dbphone = null;
    	String dbaddr = null;
    	
    	Connection conn = null;
    	PreparedStatement pstmt = null;
    	ResultSet rs = null;
    
    	try {
    		// 1_2단계 드라이버실행, DB연결 분리
    		DriverDB db = new DriverDB();
    		conn = db.driverDbcon();
    		System.out.println(conn + "<- conn user_update_form.jsp");
    
    		// 3단계 : 쿼리 실행을 위한 객체 생성
    		pstmt = conn.prepareStatement("SELECT * FROM tb_user WHERE u_id=?");
    		pstmt.setString(1, send_id);
    		
    		// 4단계 : 쿼리 실행
    		rs = pstmt.executeQuery();
    		
    		// 5단계 : 쿼리 실행결과 사용
    		while(rs.next()) {
    			dbid = rs.getString("u_id");
    			dbpw = rs.getString("u_pw");
    			dblevel = rs.getString("u_level");
    			dbname = rs.getString("u_name");
    			dbemail = rs.getString("u_email");
    			dbphone = rs.getString("u_phone");
    			dbaddr = rs.getString("u_addr");
    		}
    		
    	} catch(SQLException ex) {
    		out.println(ex.getMessage());
    		ex.printStackTrace();
    	} finally {
    		// 6. 사용한 Statement 종료
    		if (rs != null) try { rs.close(); } catch(SQLException ex) {}
    		if (pstmt != null) try { pstmt.close(); } catch(SQLException ex) {}
    		
    		// 7. 커넥션 종료
    		if (conn != null) try { conn.close(); } catch(SQLException ex) {}
    	}
    	
    %>
    
    <h2>수정화면</h2>
    <form action="<%= request.getContextPath() %>/userupdate/user_update_action.jsp" method="post">
    	<table border="1">
    		<tr>
    			<td>아이디</td>
    			<td><input type="text" name="u_id" value="<%= dbid %>" readonly></td>
    		</tr>
    		<tr>
    			<td>비밀번호</td>
    			<td><input type="text" name="u_pw" value="<%= dbpw %>"></td>
    		</tr>
    		<tr>
    			<td>권한</td>
    			<td><input type="text" name="u_level" value="<%= dblevel %>"></td>
    		</tr>
    		<tr>
    			<td>이름</td>
    			<td><input type="text" name="u_name" value="<%= dbname %>"></td>
    		</tr>
    		<tr>
    			<td>이메일</td>
    			<td><input type="text" name="u_email" value="<%= dbemail %>"></td>
    		</tr>
    		<tr>
    			<td>전화번호</td>
    			<td><input type="text" name="u_phone" value="<%= dbphone %>"></td>
    		</tr>
    		<tr>
    			<td>주소</td>
    			<td><input type="text" name="u_addr" value="<%= dbaddr %>"></td>
    		</tr>
    		<tr>
    			<td colspan="2"><input type="submit" value="수정버튼"></td>
    		</tr>
    	</table>
    </form>
    
    <%@ include file="/module/hadan.jsp" %>
       
    </body>
    </html>

  • [코드예제] user_update_action.jsp
    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!DOCTYPE html>
    <%@ page import = "java.sql.Connection" %>
    <%@ page import = "java.sql.PreparedStatement" %>
    <%@ page import = "java.sql.SQLException" %>
    <%@ page import="kr.or.driverdb.DriverDB" %>
    
    <% request.setCharacterEncoding("euc-kr"); %> // post 한글처리
    
    /***** java Bean 액션태그 사용 *****/
    <jsp:useBean id="u" class="kr.or.dto.User"/>
    <jsp:setProperty name="u" property="*"/>
    
    <%
    	Connection conn = null;
    	PreparedStatement pstmt = null;
    	
    	try {
    
    		// 1_2단계 드라이버실행, DB연결 분리
    		DriverDB db = new DriverDB();
    		conn = db.driverDbcon();
    		System.out.println(conn + "<- conn user_insert_action.jsp");
    	
    		// 3단계 : 쿼리 실행을 위한 객체 생성(겟팅)
    		pstmt = conn.prepareStatement("UPDATE tb_user SET u_pw=?, u_level=?, u_name=?, u_email=?, u_phone=?, u_addr=? WHERE u_id=?");
    		pstmt.setString(1, u.getU_pw());
    		pstmt.setString(2, u.getU_level());
    		pstmt.setString(3, u.getU_name());
    		pstmt.setString(4, u.getU_email());
    		pstmt.setString(5, u.getU_phone());
    		pstmt.setString(6, u.getU_addr());
    		pstmt.setString(7, u.getU_id());
    		System.out.println(pstmt);
    
    		// 4단계 : 쿼리 실행 (1이 출력되면 정상)
    		int result = pstmt.executeUpdate();
    		System.out.println(result);
    
    		// 5단계 : 쿼리 실행 결과 사용(생략가능)
    
    	} catch(SQLException ex) {
    		out.println(ex.getMessage());
    		ex.printStackTrace();
    	} finally {
    		// 6. 사용한 Statement 종료
    		if (pstmt != null) try { pstmt.close(); } catch(SQLException ex) {}
    
    		// 7. 커넥션 종료
    		if (conn != null) try { conn.close(); } catch(SQLException ex) {}
    	}
    
    		// user_list.jsp 로 리다이렉트
    		//response.sendRedirect(request.getContextPath() + "/ulist/user_list.jsp");
    
    		// user_search_list.jsp로 리다이렉트
    		response.sendRedirect(request.getContextPath() + "/usersearch/user_search_list.jsp");
    %>


tag : #DB #DTO #bean #useBean #setProperty #getProperty #insert #update


Uploaded by N2T

728x90
320x100

'0년차 > JAVA' 카테고리의 다른 글

[JSP] DTO_DAO delete, 수정화면 처리  (0) 2023.06.18
[JSP] DTO_DAO insert/update 처리  (0) 2023.06.18
[JSP] JDBC프로그램 driver로딩, db연결 분리처리  (0) 2023.06.18
[JAVA] 상속, 인터페이스  (0) 2023.05.07
[JAVA] 클래스  (0) 2023.05.07
Comments