상세 컨텐츠

본문 제목

[JSP]JAVA_DB_DTO_DAO_JSP_회원가입 구현하기(아이디,이름,전화번호)

<개인공부>/[JSP]

by 데브수달 2024. 4. 25. 14:36

본문

728x90
반응형

# JAVA DAO

- 서버 경로 : localhost:8080/kurly/index.html

- 프로젝트 이름 : kurly

- DB 이름 : kurly

- TABLE 이름 : signup

 

CREATE TABLE signup(

userId VARCHAR(16) NOT NULL COMMENT '아이디',

userName VARCHAR(30) NOT NULL COMMENT '이름',

userHp VARCHAR(13) NOT NULL COMMENT '휴대폰',

PRIMARY KEY(userId)

) ENGINE=MYISAM CHARSET=UTF8MB4;

 

DESC signup;

--+----------+-------------+------+-----+---------+-------+

--| Field | Type | Null | Key | Default | Extra |

--+----------+-------------+------+-----+---------+-------+

--| userId | varchar(16) | NO | PRI | NULL | |

--| userName | varchar(30) | NO | | NULL | |

--| userHp | varchar(13) | NO | | NULL | |

--+----------+-------------+------+-----+---------+-------+

 

 

- 마켓컬리 회원가입폼 : index.html

- 액션 파일 : signup_action.jsp

**만약 로그인 입출력 한다고 하면 로그인 담당 DTO가 따로 또 추가해야함. **

- DTO : kurly.SignupDTO.java => 회원가입 입출력 DTO

**0425_ DAO도 생성예정 => 데이터베이스 접근 관리 담당 예정**

**어제 수업때 했던 JSP 파일에서 코딩하던 내용을 JAVA파일로 생성해서 DAO로 관리해줄 예정**

- DAO : kurly.UserDAO.java => 회원에 관련된 공통 DAO 담당

 

흐름 파악 = FLOW CHART[플로우차트]

=> DB 이름 kurly 생성

=> TABLE 이름 signup 생성

=> HTTP통신

=> index.html => 회원가입 버튼 클릭

=> HTTP통신 입력상자 값들이(GET파라미터) POST방식 전송

=> signup_action.jsp DTO useBean으로 값 받기 => HTML에 자바포함 사용

=> DAO JDBC 설정(데이터베이스랑 자바를 이어주는 환경설정) => DAO DB(SQL)에 저장

=> 자바에 코딩하고 HTML도 보낼 수 있음.( 이것을 서블릿 SERVLET 이라고 부른다.)

* 서블릿: 자바 - HTML 직접 접근 방식 + 속도 빠름.

 

제작순서

1. DB kurly, TABLE signup 생성

 

2. index.html 생성 => 입력폼

 

3. DTO => java 파일 생성 => kurly.SignupDTO.java클래스 생성

=> getter(), setter() 생성

 

4. JSP => signup_action.jsp

=> 인코딩 "utf-8"

=> 자바빈즈 액션스크립트 => useBean 사용 class="SignupDTO"

<jsp:useBean id="signupDTO" class="SignupDTO" scope="page" />

 

* 관리자용이냐 사용자용이냐 그 2가지만 분류해주면된다.

* 파일명이 UserDAO 인 이유 /// 그럼 관리자는 AdminDAO인가..;;

5. DAO => kurly.UserDAO.java

=> Java Resources => [kurly] 패키지 => UserDAO.java CLASS 생성 [ 기본생성자 2번째 버튼 체크 ]

=> 기본생성자 => UserDAO(){} => JDBC 설정

* 자바를 고치면 서버를 껏다가 다시 켜야함.

6. DAO => 회원 가입 저장 메서드 생성 => signupInsert(){}

=> return 값 확인하기 (성공: 1, 실패:2) ex) 성공 실패는 자료형 문자열로 변경하고 다르게 리턴해도 상관없음.

=> SQL => INSERT INTO signup (필드1,필드2,필드3) VALUES(?,?,?);

 

===========================================================================================

1. index.html 파일

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
	<title>마켓컬리 회원가입폼</title>
	<style>
	 #wrap {width:100%; height:100%; text-align: center;}
	 ul{list-style: none;}
	 
	</style>
	
</head>
<body>

	<div id ="wrap">
		<form name="" method="post" action="http://localhost:8080/kurly/signup_action.jsp">
			<ul>
				<li>
					<label>아이디 : </label>
					<label><input type="text" name="userId" id="userId" placeholder="아이디 입력하세요."></label>
				</li>
				<li>
					<label>이름 : </label>
					<label><input type="text" name="userName" id="userName" placeholder="이름 입력하세요."></label>
				</li>
				<li>
					<label>휴대폰 : </label>
					<label><input type="text" name="userHp" id="userHp" placeholder="전화번호 입력하세요."></label>
				</li>
			</ul>
			<div>
				<button type="submit" class="submit-btn">회원가입</button>
			</div>
		</form>
	</div>

</body>
</html>

2. kurly.SignupDTO.java 파일

package kurly;

public class SignupDTO {
	private String userId;
	private String userName;
	private String userHp;
	
	public String getUserId() {
		return userId;
	}
	public String getUserName() {
		return userName;
	}
	public String getUserHp() {
		return userHp;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public void setUserHp(String userHp) {
		this.userHp = userHp;
	}
	
	
}

3. signup_action.jsp 파일

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 임포트할 때는 패키지경로도 같이 적어줘야함. -->  
<%@ page import="kurly.UserDAO" %>
<%
	request.setCharacterEncoding("utf-8");
%>

	<jsp:useBean id="signupDTO" class="kurly.SignupDTO" scope="page" />
	<jsp:setProperty property="userId" name="signupDTO" /> 
	<jsp:setProperty property="userName" name="signupDTO" /> 
	<jsp:setProperty property="userHp" name="signupDTO" /> 
	
<%
	System.out.println("아이디 : " +signupDTO.getUserId() );
	System.out.println("이름 : " + signupDTO.getUserName());
	System.out.println("전화번호 : " + signupDTO.getUserHp());
	
	// JAVA로 만들어진 DAO 객체를 가져다가 쓴다.
	// JAVA DAO => UserDAO 객체 생성 하면 => 기본 생성자 실행 => JDBC 구현
	// 객체만 생성하면, 기본 생성자는 실행이 된다.
	System.out.println("UserDAO 클래스 객체 생성");
	UserDAO userDAO = new UserDAO();
	
	// kurly.UserDAO.java => 메서드 호출 signupInsert (DTO)
	// DB에 저장
	int result = userDAO.signupInsert(signupDTO); 
	
	// 저장성공 1, 실패는 2 => 이클립스 콘솔창에 출력
	System.out.print( "result 결과 : " + result);
	
%>

kurly.UserDAO.java

package kurly;

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

public class UserDAO {

	// JAVA 내부에서는  private 
	
	private Connection conn;
	private PreparedStatement ps;
	private String sql;
	
	public UserDAO() { // 기본생성자 (매개변수 x) 내부에 jdbc 설정
		try {
			//1. JDBC 드라이버 설정
			Class.forName("org.mariadb.jdbc.Driver");
			System.out.println("mariadb jdbc Driver 설정 성공!");
			//2. 컨넥셕 설정 (db 아이디, 비번 등록)
			// DriverManager.getConnection("접속위치 jdbc:mariadb://localhost:포트번호/연결할 DB명", "아이디[기본은 root]","비밀번호");
			conn = DriverManager.getConnection("jdbc:mariadb://localhost:3307/kurly", "root", "1234");
			System.out.println("mariadb jdbc 컨넥션 설정 성공!");
		}
		catch(Exception e) {
			System.out.println("mariadb jdbc Driver 설정 OR mariadb jdbc 컨넥션 설정 실패!");
			System.out.println("에러 메시지 :" + e.getMessage());
		}
		
		
	}
	// 입력 폼 데이터 값 저장하기 SQL문 실행 INSERT INTO  SQL문
	// 저장 성공하면 숫자를 보내줄 것이기에 int 
	// 저장 성공 메시지 => 리턴 값 return 1 
	// 저장 실패 메시지 => 리턴 값 return 2
	public int signupInsert(SignupDTO signupDTO) {
		sql = "INSERT INTO signup (userId,userName,userHp) VALUES(?,?,?)";

		
		try {
			ps = conn.prepareStatement(sql);
			
			ps.setString(1, signupDTO.getUserId());
			ps.setString(2, signupDTO.getUserName());
			ps.setString(3, signupDTO.getUserHp());
			ps.executeUpdate(); // 저장한 내용 업데이트 (새로고침)
			return 1; //저장성공 메시지
		}  
		catch(Exception e) {
			System.out.println("에러 메시지 :" + e.getMessage());
			return 2; //저장실패 메시지
		}
	}

}
bandicam 2024-04-25 14-34-52-607.mp4
2.23MB

 
 

데이터베이스 테이블 필드 설계 내용 확인

>> SHOW CREATE TABLE signup;

 

PRIMARY KEY(`userId`) 설정했기때문에, 
입력폼에 이미 저장되어있는 데이터 중 아이디가 중복 될 경우, 
에러메시지가 뜨면서 저장이 되지않는다.

728x90
반응형

관련글 더보기