<memberPro.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// 데이터를 처리하는 영역
%>
<% request.setCharacterEncoding("utf-8"); %>
<% // memberPro.jsp의 역할 두가지
// 1. VO에 사용자가 입력한 데이터를 설정(주입)한다.
// 2. DAO에 있는 INSERT 메서드를 호출해서 사용자가 입력한 데이터(VO에서 얻어온다.)를 데이터 베이스에 저장 %>
<jsp:useBean id ="vo" class="com.member.MemberVO" />
<% // userBean 액션태그는 객체를 생성한다. %>
<% // "com.memeber.MemberBean" == VO 이다. %>
<% // setProperty 액션 태그로 VO의 속성을 초기화한다. 입력폼의 'name 속성값'과 VO의 인스턴스 변수명을 일치시켜야한다. %>
<jsp:setProperty name="vo" property="*" />
<jsp:useBean id ="dao" class="com.member.MemberDAO" />
<%
boolean result = dao.insertMember(vo);
// DAO 빈에 insertMember()를 호출하면서 사용자가 입력한 데이터를 전달한다.
// INSERT문의 결과값을 boolean(논리형)으로 받는다.
if(result) { //INSERT문이 성공하면 result에 true, INSERT문이 실패하면 result에 false가 저장된다.
%>
<script>
alert("회원가입을 하였습니다.");
location.href="login.jsp"; // login.jsp로 이동한다.
</script>
<%
}else {
%>
<script>
alert("회원가입에 실패하였습니다.");
history.back(); // memberForm.jsp로 되돌아간다.
</script>
<%
}
%>
<MemberVO.java>
package com.member;
public class MemberVO {
private String id;
private String pwd;
private String name;
private String gender;
private String birth;
private String email;
private String zipcode;
private String addr;
private String hobby[]; //checkbox로 여러개의 데이터를 하나의 변수에 저장하여 전달하므로 배열을 선언하여 받는다.
private String job;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
}
<MemberDAO.java>
package com.member;
import java.sql.Connection; // java.sql로 들어왔는지 확인작업 필요
import java.sql.PreparedStatement;
public class MemberDAO {
// 1. 데이터베이스 연결 ( : 커넥션 풀에서 Connection 객체를 얻는다.)
// 2. 데이터를 처리 (SQL문을 처리 : 'PreparedStatement', 결과값은 ResultSet 객체가 처리)
// 클래스 영역에서 클래스형으로 레퍼런스 변수 선언을 하면 "의존성 주입(반드시 주입)"의 대상이된다.
// 인스턴스 변수는 초기화 하지 않는다. "가비지컬렉션"이 자동으로 회수한다.
private DBConnectionMgr pool;
// 주입하는 방법은 자바에서 두 가지로 제공한다.
// 생성자를 사용하는 방법과 setters 메서드(설정 메서드)를 사용하는 방법이다.
// 의존성 주입은 생성자를 사용하여 주입한다.
public MemberDAO() {
// 데이터베이스 연결 객체를 얻는 코드는 필수적으로 예외처리를 한다.
try { pool = DBConnectionMgr.getInstance(); }
catch(Exception e) {e.printStackTrace();} // 예외사항을 디테일하게 콘솔뷰로 출력한다.
}
public boolean insertMember(MemberVO vo) {
Connection con = null; // import 할때 java.sql 선택해야함
PreparedStatement pstmt = null;
String sql = null;
boolean flag = false;
// DB 연결과 데이터 처리는 예외처리를 해야한다.
try {
con = pool.getConnection(); // 커넥션 풀에서 커넥션 객체 하나를 얻는다.
sql = "insert into tblMember (id,pwd,name,gender,birth,email,zipcode,addr,hobby,job,regdate)" + " values (?,?,?,?,?,?,?,?,?,?,now())";
pstmt = con.prepareStatement(sql);
// 쿼리 실행 객체인 pstmt의 setXxx( ) 메서드로 쿼리문의 위치홀더(?)에 VO의 속성 값을 설정한다.
pstmt.setString(1, vo.getId());
pstmt.setString(2, vo.getPwd());
pstmt.setString(3, vo.getName());
pstmt.setString(4, vo.getGender());
pstmt.setString(5, vo.getBirth());
pstmt.setString(6, vo.getEmail());
pstmt.setString(7, vo.getZipcode());
pstmt.setString(8, vo.getAddr());
// 데이터베이스 컬럼의 셀은 여러개의 값을 저장할 수 없으므로 하나의 값으로 변환하는 작업을 한다.
// 체크를 했으면 1을 넣고 체크를 안했으면 0을 넣어서 하나의 값으로 만든다.
// 사용자가 인터넷과 게임을 체크하면 '10100'로 하나의 결과값을 만든다.
String[] hobby = vo.getHobby(); // 체크한 취미를 얻는다.
String[] list = {"인터넷", "여행", "게임", "영화", "운동" }; // 리스트랑 비교해서 있으면 1, 없으면 0
// list를 선언한 이유 : hobby 배열과 list 배열을 비교하여 같은 원소가 있으면 1, 없으면 0으로 처리한다.
char[] hb = {'0', '0', '0', '0', '0'};
// hobby 배열의 원소 하나와 모든 list 배열의 원소들을 비교한다. (비교해서 1,0 처리)
for (int i=0; i<hobby.length; i++) {
for(int j=0; j<list.length; j++) {
if(hobby[i].equals(list[j])) { hb[j] = '1'; } // 만약 사용자가 선택한 취미와 같은 취미가 있으면, 배열 hb에 1을 넣는다.
}
}
pstmt.setString(9, new String(hb));
// hb는 char형(문자형) 배열이므로 문자열(문자 배열)로 객체화하여 9번째 위치홀더에 설정한다.
pstmt.setString(10, vo.getJob());
// 쿼리문을 수행할 때는 executeQuery()와 executeUpdate()가 있다.
// executeQuery()는 SELECT 문을 수행할 때 사용하고 executeUpdate()는 INSERT,DELETE문을 수행할 때 사용한다.
}
catch(Exception e) { e.printStackTrace(); }
finally { pool.freeConnection(con, pstmt); } // 사용한 객체를 커넥션 풀로 반납한다.
return flag;
}
}
+ com.member > DBConnectionMgr.java 추가
<idCheck.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("utf-8"); %>
<jsp:useBean id="dao" class="com.member.MemberDAO" />
<%
String id = request.getParameter("id");
// boolean result = dao.checkId(id);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>아이디 중복 확인</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
</head>
<body>
<div>
<h2> 아이디 중복 확인 </h2>
<p>입력한 아이디는 <strong><%= id %></strong> 입니다.</p>
<p>
<%
/*
if(result) out.println("아이디가 중복되어 사용할 수 없습니다.");
else out.println("입력한 아이디를 사용할 수 없습니다.");
*/
%>
</p>
<button onClick="self.close()" class="btn btn-danger">닫기</button> <!-- button 띄우고 싶으면 style로 조절하기 -->
</div>
</body>
</html>
<memberPro.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// 데이터를 처리하는 영역
%>
<% request.setCharacterEncoding("utf-8"); %>
<% // memberPro.jsp의 역할 두가지
// 1. VO에 사용자가 입력한 데이터를 설정(주입)한다.
// 2. DAO에 있는 INSERT 메서드를 호출해서 사용자가 입력한 데이터(VO에서 얻어온다.)를 데이터 베이스에 저장 %>
<jsp:useBean id ="vo" class="com.member.MemberVO" />
<% // userBean 액션태그는 객체를 생성한다. %>
<% // "com.memeber.MemberBean" == VO 이다. %>
<% // setProperty 액션 태그로 VO의 속성을 초기화한다. 입력폼의 'name 속성값'과 VO의 인스턴스 변수명을 일치시켜야한다. %>
<jsp:setProperty name="vo" property="*" />
<jsp:useBean id ="dao" class="com.member.MemberDAO" />
<%
boolean result = dao.insertMember(vo);
// DAO 빈에 insertMember()를 호출하면서 사용자가 입력한 데이터를 전달한다.
// INSERT문의 결과값을 boolean(논리형)으로 받는다.
if(result) { //INSERT문이 성공하면 result에 true, INSERT문이 실패하면 result에 false가 저장된다.
%>
<script>
alert("회원가입을 하였습니다.");
location.href="login.jsp"; // login.jsp로 이동한다.
</script>
<%
}else {
%>
<script>
alert("회원가입에 실패하였습니다.");
history.back(); // memberForm.jsp로 되돌아간다.
</script>
<%
}
%>
'국비지원 JAVA 풀스택 과정 > JAVA' 카테고리의 다른 글
[JSP] 오류발생 (1) | 2022.12.15 |
---|---|
[JSP] 우편번호검색 (0) | 2022.12.14 |
[JSP] 회원관리 프로그램 (0) | 2022.12.12 |
[JAVA] 파일 업로드 구현 (0) | 2022.12.09 |
[JAVA] 자동 줄바꿈 처리 (0) | 2022.12.09 |