# 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; //저장실패 메시지
}
}
}
데이터베이스 테이블 필드 설계 내용 확인
>> SHOW CREATE TABLE signup;
PRIMARY KEY(`userId`) 설정했기때문에,
입력폼에 이미 저장되어있는 데이터 중 아이디가 중복 될 경우,
에러메시지가 뜨면서 저장이 되지않는다.
[JSP]0430_CRUD구현하기 (1) | 2024.04.30 |
---|---|
[JSP]0426_JAVA_DB_DTO_DAO_JSP_HTML_AJAX_TODOLIST만들기 executeUpdate() 메서드 와 execut (0) | 2024.04.26 |
[JSP]DTO_DAO_JSP_회원가입구현설계.md (0) | 2024.04.25 |
[JSP]동적웹프로젝트_mariadb-java-client-3.3.3.jar_빌드패치하는 법 (0) | 2024.04.25 |
[JSP]데이터베이스연동_INSERT INTO_ 폼_데이터입력_DB에 저장하기 (1) | 2024.04.24 |