본문 바로가기
study/MVC

[MVC] 16. MVC Model1 방식 - 회원가입 (회원가입, 회원등록)

by 금이패런츠 2022. 4. 7.
728x90
반응형
-- member.sql
create table member (
   id varchar2(20) primary key,
   pass varchar2(20),
   name varchar2(20),
   gender number(1),
   email varchar2(50),
   tel  varchar2(15),
   picture  varchar2(100)
);
drop table member;

select * from member;

 


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%--src/main/webapp/medel1/member/joinForm.jsp --%>    
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>회원가입화면</title>
<script type="text/javascript">
   function win_open() {
	   var op="width=500,height=200,scrollbars=yes," + "resizable=yes,left=50,top=150";
	   window.open ("memberimg.jsp","picture",op);
   }
   function check(f) {
	   if(f.id.value.length==0) {
		   alert("아이디를 입력하세요");
		   f.id.focus();
		   return false;
	   } 
	   return true;
   }
</script>
<link rel="stylesheet" href="../../css/main.css">
</head>
<body>
<form action="joinCheck.jsp" method="post" 
   name="f" onsubmit="return check(this)">
<input type="hidden" name="picture" value="">
   <table border="1" cellpadding="0" cellspacing="0">
     <caption>회원 가입</caption>
     <tr>
     <td rowspan="4" align="center" valign="bottom">
  <img src="" width="100" height="120" id="pic"><br>
     <font size="1">
    <a href="javascript:win_open()">사진등록</a>
     </font></td>
     <td>아이디</td>
     <td><input type="text" name="id"></td></tr>
     <tr><td>비밀번호</td>
    <td><input type="password" name="pass"></td></tr>
     <tr><td>이름</td>
     <td><input type="text" name="name"></td></tr>
     <tr><td>성별</td>
     <td><input type="radio" name="gender" 
        value="1" checked>남
        <input type="radio" name="gender"
        value="2">여 </td></tr>
     <tr><td>전화번호</td>
<td colspan="2"><input type="text" name="tel"></td></tr>
     <tr><td>이메일</td>
<td colspan="2"><input type="text" name="email"></td></tr>
	 <tr><td colspan="3" align="center">
	 <input type="submit" value="회원가입">
	 <input type="reset" value="다시작성">
	 </td></tr>
   </table></form></body></html>

1. 파라미터값들을 Member 객체에 변수에 저장.
2. Member 객체를 db저장.
3. 회원등록 완료 => 화면에 정보 출력.
   회원등록 실패 => 확인창으로 실패 출력. joinForm.jsp 페이지 이동

<%@page import="model.MemberDao"%>
<%@page import="model.Member"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%--src/main/webapp/medel1/member/joinCheck.jsp --%>   
<%--
	1. 파라미터값들을 Member 객체에 변수에 저장.
	2. Member 객체를 db저장.
	3. 회원등록 완료 => 화면에 정보 출력.
		회원등록 실패 => 확인창으로 실패 출력. joinForm.jsp 페이지 이동
 --%>
 <%
	//1. 파라미터값들을 Member 객체에 저장.
	request.setCharacterEncoding("UTF-8");
	Member mem = new Member();
 	mem.setId(request.getParameter("id"));
 	mem.setPass(request.getParameter("pass"));
 	mem.setName(request.getParameter("name"));
 	mem.setGender(Integer.parseInt(request.getParameter("gender")));
 	mem.setTel(request.getParameter("tel"));
 	mem.setEmail(request.getParameter("email"));
 	mem.setPicture(request.getParameter("picture"));
 	
 	//2. Member 객체를 db저장.
 	MemberDao dao = new MemberDao();
 	if(dao.insert(mem)) { //회원등록 성공
 %>
 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 등록</title>
</head>
<body>
<table>
	<tr>
		<td>아이디</td>
		<td><%=mem.getId() %></td>
	</tr>
	<tr>
		<td>이름</td>
		<td><%=mem.getName() %></td>
	</tr>
	<tr>
		<td>성별</td>
		<td><%=(mem.getGender() == 1)?"남":"여" %></td>
	</tr>
	<tr>
		<td>전화번호</td>
		<td><%=mem.getTel() %></td>
	</tr>
	<tr>
		<td>이메일</td>
		<td><%=mem.getEmail() %></td>
	</tr>
</table>
<a href="loginForm.jsp">로그인</a>
</body>
</html>
<%} else { //회원등록 실패%>
<script type="text/javascript">
	alert("회원가입 실패")
	location.href="joinForm.jsp"
</script>
<% }%>

package model;

//Bean 클래스 : 변수와 getter, setter로 이루어진 클래스
// getId()  : get property (겟프로퍼티)
//            getId() => get property id
//setId()  : set property (겟프로퍼티)
//           setId() => set property id
public class Member {
	private String id;
	private String pass;
	private String name;
	private int gender;
	private String tel;
	private String email;
	private String picture;
	//getter, setters
	public String getId() { //get property id
		return id;
	}
	public void setId(String id) { //set property id
		this.id = id;
	}
	public String getPass() { //get property pass
		return pass;
	}
	public void setPass(String pass) { //set property pass
		this.pass = pass;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getGender() {
		return gender;
	}
	public void setGender(int gender) {
		this.gender = gender;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPicture() {
		return picture;
	}
	public void setPicture(String picture) {
		this.picture = picture;
	}
	@Override
	public String toString() {
		return "Member [id=" + id + ", pass=" + pass + ", name=" + name + ", gender=" + gender + ", tel=" + tel
				+ ", email=" + email + ", picture=" + picture + "]";
	}
	
}

package model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBConnection {
	private DBConnection() {} //생성자. 다른 객체생성을 하지못하도록 하는 역할 
	static Connection getConnection() {
		Connection conn = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","kic","1234");
		} catch(Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	static void close(Connection conn, Statement stmt, ResultSet rs) {
		try {
			if(rs != null) rs.close();
			if(stmt != null) stmt.close();
			if(conn != null) conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

 

package model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

//model 클래스 : db와 연결하여 데이터를 저장하거나 조회하는 기능
public class MemberDao {
	
	public boolean insert(Member mem) {
		//mem : 화면에서 입력받은 데이터 저장
		//1. db에 연결하기
		Connection conn = DBConnection.getConnection();
		//2. 문장 객체
		//PreparedStatement : Statement 인터페이스의 하위 인터페이스
		//					  미리 sql문장을 먼저 db로 전송함.
		PreparedStatement pstmt = null;
		String sql = "insert into member (id, pass, name, gender, tel, email, picture)" + " values ( ?,?,?,?,?,?,?)";
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, mem.getId());  // 1 : 첫번째 물음표(?)
			pstmt.setString(2, mem.getPass());
			pstmt.setString(3, mem.getName());
			pstmt.setInt(4, mem.getGender());
			pstmt.setString(5, mem.getTel());
			pstmt.setString(6, mem.getEmail());
			pstmt.setString(7, mem.getPicture());
			//executeUpdate() : sql 구문 실행.
			//					insert, update, delete
			//					db에 데이터를 등록하는 경우 실행하는 메서드
			//                  수정된 레코드 갯수 리턴
			//ResultSet executeQuery() : sql 구문 실행.
			//                           select 구문 실행.
			//                           db에서 데이터를 조회하는 경우 실행하는 메서드
			//                           조회된 db의 레토드들을 리턴
			int cnt = pstmt.executeUpdate(); //db문장 실행
			if (cnt > 0) return true;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBConnection.close(conn, pstmt, null);
		}
		return false;
	}
	
	public Member selectOne(String id) {
		Connection conn = DBConnection.getConnection();
		String sql = "select * from member where id=?";
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				Member mem = new Member();
				mem.setId(rs.getString("id"));
				mem.setPass(rs.getString("pass"));
				mem.setName(rs.getString("name"));
				mem.setGender(rs.getInt("gender"));
				mem.setTel(rs.getString("tel"));
				mem.setEmail(rs.getString("email"));
				mem.setPicture(rs.getString("picture"));
				return mem;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBConnection.close(conn, pstmt, rs);
		}
		return null;
	}
	public boolean update(Member mem) {
		Connection conn = DBConnection.getConnection();
		PreparedStatement pstmt = null;
		String sql = "update member set name=?, gender=?, email=?, tel=?,picture=? " + " where id=?";
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, mem.getName());
			pstmt.setInt(2, mem.getGender());
			pstmt.setString(3, mem.getEmail());
			pstmt.setString(4, mem.getTel());
			pstmt.setString(5, mem.getPicture());
			pstmt.setString(6, mem.getId());
			return pstmt.executeUpdate() > 0;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBConnection.close(conn, pstmt, null);
		}
		return false;
	}
	public boolean delete (String id) {
		Connection conn = DBConnection.getConnection();
		PreparedStatement pstmt = null;
		try {
			pstmt = conn.prepareStatement("delete from member where id=?");
			pstmt.setString(1, id);
			return pstmt.executeUpdate() > 0;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBConnection.close(conn, pstmt, null);
		}
		return false;
	}
	public List<Member> list() {
		Connection conn = DBConnection.getConnection();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		List<Member> list = new ArrayList<Member>();
		try {
			pstmt = conn.prepareStatement("select * from member order by id");
			rs = pstmt.executeQuery();
			while(rs.next()) { //한 행 조회
				Member m = new Member();
				//rs.getString("id") : id 컬럼의 값을 문자열 타입으로 조회
				m.setId(rs.getString("id"));
				m.setPass(rs.getString("pass"));
				m.setName(rs.getString("name"));
				m.setGender(rs.getInt("gender"));
				m.setTel(rs.getString("tel"));
				m.setEmail(rs.getString("email"));
				m.setPicture(rs.getString("picture"));
				list.add(m); //list에 추가
			}
			return list;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBConnection.close(conn, pstmt, rs);
		}
		return null;
	}
	public String idSearch(String email, String tel) {
		Connection conn = DBConnection.getConnection();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql = "select id from member where email = ? and tel = ?";
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, email);
			pstmt.setString(2, tel);
			rs = pstmt.executeQuery();
			if (rs.next()) { //레코드 존재. id값이 존재.
				return rs.getString("id");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBConnection.close(conn, pstmt, rs);
		}
		return null;
	}
	public String pwSearch(String id, String email, String tel) {
		Connection conn = DBConnection.getConnection();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql = "select pass from member where id = ? and email = ? and tel = ?";
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);
			pstmt.setString(2, email);
			pstmt.setString(3, tel);
			rs = pstmt.executeQuery();
			if (rs.next()) {
				return rs.getString("pass");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBConnection.close(conn, pstmt, rs);
		}
		return null;
	}
	public int updatePass(String id, String pass) {
		Connection conn = DBConnection.getConnection();
		PreparedStatement pstmt = null;
		String sql = "update member set pass = ? where id = ?";
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, pass);
			pstmt.setString(2, id);
			return pstmt.executeUpdate();
		} catch(SQLException e) {
			e.printStackTrace();
		} finally {
			DBConnection.close(conn, pstmt, null);
		}
		return 0;
	}
}
728x90
반응형