본문 바로가기
Project Development/Java_programming

MVC2 회원가입 - 추가, 수정, 삭제

by SeleniumBindingProtein 2021. 12. 26.
728x90
반응형
//MemberVO.java

package miniPrj04.member;

import java.util.Date;

public class MemberVO {

	private String id;
	private String pw;
	private String name;
	private int age;
	private String gender;
	private String phone;
	private String email;
	private String address;
	private Date regidate;
	
	public MemberVO() {
		System.out.println("MemberVO 생성자 호출");
	}

	public MemberVO(String id, String pw, String name, int age, String gender, String phone, String email,
			String address) {
		super();
		this.id = id;
		this.pw = pw;
		this.name = name;
		this.age = age;
		this.gender = gender;
		this.phone = phone;
		this.email = email;
		this.address = address;
		
	}
	public MemberVO(String id, String pw, String name, int age, String gender, String phone, String email, String address, Date regidate) {
		super();
		this.id = id;
		this.pw = pw;
		this.name = name;
		this.age = age;
		this.gender = gender;
		this.phone = phone;
		this.email = email;
		this.address = address;
		this.regidate = regidate;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPw() {
		return pw;
	}

	public void setPw(String pw) {
		this.pw = pw;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public Date getRegidate() {
		return regidate;
	}

	public void setRegidate(Date regidate) {
		this.regidate = regidate;
	}

}

//MemberDAO.java

package miniPrj04.member;

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

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class MemberDAO {
	
	private Connection conn;
	private PreparedStatement pstmt;
	private DataSource dataFactory;	
	
	public MemberDAO() {
		try {
			Context ctx = new InitialContext();
			Context envContext = (Context)ctx.lookup("java:/comp/env"); 	//JDNI에 접근하기 위해 기본경로를 지정함
			dataFactory = (DataSource)envContext.lookup("jdbc/oracle");		// 톰캣 context.xml에 설정한 name 값인 jdbc/oracle을 이용해 톰캣이 미리 연결한 DataSource를 받아옴 
			System.out.println("띵동");
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
    //회원 조회
	public List<MemberVO> listMembers(){
		List<MemberVO> membersList = new ArrayList<MemberVO>();
		
		try {
			conn = dataFactory.getConnection();
			String query = "select * from MEMBERFORM order by regidate desc";
			
			pstmt = conn.prepareStatement(query);
			ResultSet rs = pstmt.executeQuery();
			
			while(rs.next()) {
				String id = rs.getString("id");
				String pw = rs.getString("pw");
				String name = rs.getString("name");
				int age = rs.getInt("age");
				String gender = rs.getString("gender");
				String phone = rs.getString("phone");
				String email = rs.getString("email");
				String address = rs.getString("address");
				Date regidate = rs.getDate("regidate");
				MemberVO memberVO = new MemberVO(id, pw, name, age, gender, phone, email, address, regidate);
				membersList.add(memberVO);
			}
			rs.close();
			pstmt.close();
			conn.close();
			
		} catch (Exception e) {
			System.out.println("회원 조회 중 예외 발생");
			e.printStackTrace();
		}
		return membersList;
	}
	
    //회원정보 추가
	public void addMember(MemberVO m) {
		try {
			conn = dataFactory.getConnection();
			String id = m.getId();
			String pw = m.getPw();
			String name = m.getName();
			int age = m.getAge();
			String gender = m.getGender();
			String phone = m.getPhone();
			String email = m.getEmail();
			String address = m.getAddress();
			
			String query = "insert into MEMBERFORM(id, pw, name, age, gender, phone, email, address) values(?,?,?,?,?,?,?,?)";
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, id);
			pstmt.setString(2, pw);
			pstmt.setString(3, name);
			pstmt.setInt(4, age);
			pstmt.setString(5, gender);
			pstmt.setString(6, phone);
			pstmt.setString(7, email);
			pstmt.setString(8, address);
			pstmt.executeUpdate();
			pstmt.close();
			conn.close();
			
		} catch (Exception e) {
			System.out.println("회원 가입 중 오류");
			e.printStackTrace();
		}
	}
	
    //회원정보 찾기
	public MemberVO findMember(String _id) {
		MemberVO memInfo = null;
		
		try {
			conn = dataFactory.getConnection();
			
			String query = "select * from MEMBERFORM where id=?";
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, _id);
			System.out.println(query);
			
			ResultSet rs = pstmt.executeQuery();
			rs.next();
			String id = rs.getString("id");
			String pw = rs.getString("pw");
			String name = rs.getString("name");
			int age = rs.getInt("age");
			String gender = rs.getString("gender");
			String phone = rs.getString("phone");
			String email = rs.getString("email");
			String address = rs.getString("address");
			Date regidate = rs.getDate("regidate");
			
			memInfo = new MemberVO(id, pw, name, age, gender, phone, email, address, regidate);
			
			pstmt.close();
			conn.close();
			
		} catch (Exception e) {
			System.out.println("회원 정보 찾기 중 오류");
			e.printStackTrace();
		}
		
		return memInfo;
	}
	
    //회원정보 수정
	public void modMember(MemberVO memberVO) {
		String id = memberVO.getId();
		String pw = memberVO.getPw();
		String name = memberVO.getName();
		int age = memberVO.getAge();
		String gender = memberVO.getGender();
		String phone = memberVO.getPhone();
		String email = memberVO.getEmail();
		String address = memberVO.getAddress();
		
		try {
			conn = dataFactory.getConnection();
			String query = "update MEMBERFORM set pw = ?, name = ?, age = ?, gender = ?, phone = ?, email = ?, address = ? where id = ?";
			System.out.println(query);
			
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, pw);
			pstmt.setString(2, name);
			pstmt.setInt(3, age);
			pstmt.setString(4, gender);
			pstmt.setString(5, phone);
			pstmt.setString(6, email);
			pstmt.setString(7, address);
			pstmt.setString(8, id);
			pstmt.executeUpdate();
			pstmt.close();
			conn.close();
			
		} catch (Exception e) {
			System.out.println("회원 정보 수정 중 오류");
			e.printStackTrace();
		}
	}
	
    //회원정보 삭제
	public void delMember(String id) {
		try {
			conn = dataFactory.getConnection();
			String query = "delete from MEMBERFORM where id=?";
			System.out.println(query);
			
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, id);
			pstmt.executeUpdate();
			pstmt.close();
			conn.close();
		} catch (Exception e) {
			System.out.println("회원 삭제 중 오류");
			e.printStackTrace();
		}

//MemberController.java

package miniPrj04.member;

import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//브라우저에서 요청시 두 단계로 요청이 이루어짐 
@WebServlet("/member2/*")
public class MemberController extends HttpServlet {
	private static final long serialVersionUID = 1L;
	MemberDAO memberDAO;
	
	public void init(ServletConfig config) throws ServletException {
		memberDAO = new MemberDAO();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandler(request, response);
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandler(request, response);
	}

	private void doHandler(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String forwardPage = null;
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		String action = request.getPathInfo();		//URL에서 요청명을 가져옴
		System.out.println("getPathInfo() : " + action );
		
		//최초 요청이거나 action 값이 / listmembers.do면 회원목록을 출력함 
		if(action == null || action.equals("/listmembers.do")) {
			List<MemberVO> membersList = memberDAO.listMembers();
			request.setAttribute("membersList", membersList);
			forwardPage = "/member/listmembers.jsp";	//member02폴더의 listmembers.jsp로 포워딩
		}
		
		else if(action.equals("/addMember.do")) {
			String id = request.getParameter("id");
			String pw = request.getParameter("pw");
			String name = request.getParameter("name");
			int age = Integer.parseInt(request.getParameter("age"));
			String gender = request.getParameter("gender");
			String phone = request.getParameter("phone");
			String email = request.getParameter("email");
			String address = request.getParameter("address");
			
			MemberVO memberVO = new MemberVO(id, pw, name, age, gender, phone, email, address);
			memberDAO.addMember(memberVO);
			forwardPage = "/member2/listmembers.do";
		}
		
		else if(action.equals("/memberForm.do")) {
			forwardPage = "/member/memberForm.jsp";
		}
		
		else if(action.equals("/modMemberForm.do")) {
			String id = request.getParameter("id");
			MemberVO memInfo = memberDAO.findMember(id);
			request.setAttribute("memInfo", memInfo);
			
			forwardPage = "/member/modMemberForm.jsp";
		}
		
		else if(action.equals("/modMember.do")) {
			
			try {
				String id = request.getParameter("id");
				String pw = request.getParameter("pw");
				String name = request.getParameter("name");
				int age = Integer.parseInt(request.getParameter("age"));
				String gender = request.getParameter("gender");
				String phone = request.getParameter("phone");
				String email = request.getParameter("email");
				String address = request.getParameter("address");
				
				MemberVO memberVO = new MemberVO(id, pw, name, age, gender, phone, email, address);
				memberDAO.modMember(memberVO);
				request.setAttribute("msg", "modified");
				forwardPage = "/member2/listmembers.do";
			} catch (Exception e) {
				e.printStackTrace();
			}
	
		}
		
		else if(action.equals("/delMember.do")) {
			String id = request.getParameter("id");
			memberDAO.delMember(id);
			request.setAttribute("msg", "deleted");
			forwardPage = "/member2/listmembers.do";
		}
		
		else{		
        	//그 외에 다른 action 값은 회원 목록 출력 
			List<MemberVO> membersList = memberDAO.listMembers();
			request.setAttribute("membersList", membersList);
			forwardPage = "/member/listmembers.jsp";
		}
		
		//forwardPage에 지정한 요청명으로 다시 서블릿에 요청함 
		RequestDispatcher dispatcher = request.getRequestDispatcher(forwardPage);
		dispatcher.forward(request, response);
	}

//memberForm.jsp 회원가입창

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="contextPath"  value="${pageContext.request.contextPath}"/>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>회원 가입창</title>
	<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="memberForm.css">
    <script type="text/javascript">
		function fn_sendMember(){
			var frmMember = document.frmMember;
			var id = frmMember.id.value;
			var pw = frmMember.pw.value;
			var name = frmMember.name.value;
			var age = parseInt(frmMember.age.value);
			var gender = frmMember.gender.value;
			var phone = parseInt(frmMember.phone.value);
			var email = frmMember.email.value;		
			var address = frmMember.address.value;
			//입력한 값들을 얻음 
			
			if(id.length==0 || id==""){
				alert("아이디는 필수입니다.");
			}
			else if (pw.length==0 || pw==""){
				alert("비밀번호는 필수입니다.");
			}
			else if (name.length==0 || name==""){
				alert("이름은 필수입니다.");
			}
			else if (age.length==0 || age==""){
				alert("나이는 필수입니다.");
			}
			else if (gender.length==0 || gender==""){
				alert("성별은 필수입니다.");
			}
			else if (phone.length==0 || phone==""){
				alert("핸드폰은 필수입니다.");
			}
			else if (email.length==0 || email==""){
				alert("이메일은 필수입니다.");
			}
			else if (address.length==0 || address==""){
				alert("주소는 필수입니다.");
			}
			else {
				frmMember.method = "post";		//전송 방법을 post로 지정함 
				frmMember.action = "memberFrm";	//서블릿 매핑 이름 지정함 
				frmMember.submit();				//서블릿으로 전송함 
			}
		}
		
		function addHypen(obj) {
		    var number = obj.value.replace(/[^0-9]/g, "");
		    var phone = "";

		    if(number.length < 4) {
		        return number;
		    } else if(number.length < 7) {
		        phone += number.substr(0, 3);
		        phone += "-";
		        phone += number.substr(3);
		    } else if(number.length < 11) {
		        phone += number.substr(0, 3);
		        phone += "-";
		        phone += number.substr(3, 3);
		        phone += "-";
		        phone += number.substr(6);
		    } else {
		        phone += number.substr(0, 3);
		        phone += "-";
		        phone += number.substr(3, 4);
		        phone += "-";
		        phone += number.substr(7);
		    }
		    obj.value = phone;
		}
	</script>
</head>
<body>
	<form action="${contextPath}/member2/addMember.do" method="post">
		<h1 style="text-align: center;">회원 가입창</h1>
		<table align="center">
			<tr>
				<td width="200">
					<p align="right">아이디</p>
				</td>
				<td width="400">
					<input type="text" name="id">
				</td>
			</tr>
			
			<tr>
				<td width="200">
					<p align="right">비밀번호</p>
				</td>
				<td width="400">
					<input type="password" name="pw">
				</td>
			</tr>
			
			<tr>
				<td width="200">
					<p align="right">이름</p>
				</td>
				<td width="400">
					<input type="text" name="name">
				</td>
			</tr>
			
			<tr>
				<td width="200">
					<p align="right">나이</p>
				</td>
				<td width="400">
					<input type="text" name="age">
				</td>
			</tr>
			
			<tr>
				<td width="200">
					<p align="right">성별</p>
				</td>
				<td width="400">
					<input type="radio" name="gender" value="남" checked >남
					<input type="radio" name="gender" value="여" >여 
				</td>
			</tr>
			
			<tr>
				<td width="200">
					<p align="right">핸드폰</p>
				</td>
				<td width="400">
					<input type="text" name="phone" onKeyup = "addHypen(this);">
				</td>
			</tr>
			
			<tr>
				<td width="200">
					<p align="right">이메일</p>
				</td>
				<td width="400">
					<input type="text"  name="email">
				</td>
			</tr>
			
			<tr>
				<td width="200">
					<p align="right">주소</p>
				</td>
				<td width="400">
					<input type="text" name="address">
				</td>
			</tr>
			
			<tr>
				<td width="200">
					<p align="right">&nbsp;</p>
				</td>
				<td width="400">
					<input type="submit" value="가입하기" onclick="fn_sendMember()">
					<input type="reset" value="다시입력" onclick="history.back()">
				</td>
			</tr>
		</table>
	</form>
</body>
</html>


//listmembers.jsp 회원정보 리스트 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="contextPath"  value="${pageContext.request.contextPath}"/>
<%
	request.setCharacterEncoding("utf-8");
%>

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Insert title here</title>
	<style type="text/css">
		.cls1{
			font-size: 40px;
			text-align: center;
		}
		.cls2{
			font-size: 40px;
			text-align: center;	
		}
	</style>
	<c:choose>
		<c:when test="${msg == 'modified'}">
			<script type="text/javascript">
				window.onload=function(){
					alert("회원 정보를 수정했습니다.");
				}
			</script>
		</c:when>
	</c:choose>
	<c:choose>
		<c:when test="${msg == 'deleted'}">
			<script type="text/javascript">
				window.onload=function(){
					alert("회원 정보를 삭제했습니다.");
				}
			</script>
		</c:when>
	</c:choose>
</head>
<body>
	<p class="cls1">회원정보</p>
	<table align="center" border="1">
		<tr align="center" bgcolor="lignthblue">
			<td width="7%"><b>아이디</b></td>
			<td width="7%"><b>비밀번호</b></td>
			<td width="7%"><b>이름</b></td>
			<td width="7%"><b>나이</b></td>
			<td width="7%"><b>성별</b></td>
			<td width="7%"><b>핸드폰</b></td>
			<td width="7%"><b>이메일</b></td>
			<td width="7%"><b>주소</b></td>
			<td width="7%"><b>가입일</b></td>
			<td width="7%"><b>수정</b></td>
			<td width="7%"><b>삭제</b></td>
		</tr>
		<c:choose>
			<c:when test="${empty membersList }">
				<td colspan="5" align="center">
					<b>등록된 회원이 없습니다.</b>
				</td>
			</c:when>
			<c:when test="${!empty membersList }">
				<c:forEach var="mem" items="${membersList}">
					<tr align="center">
						<td>${mem.id }</td>
						<td>${mem.pw }</td>
						<td>${mem.name }</td>
						<td>${mem.age }</td>
						<td>${mem.gender }</td>
						<td>${mem.phone }</td>
						<td>${mem.email }</td>
						<td>${mem.address }</td>
						<td>${mem.regidate }</td>
						<td><a href="${contextPath}/member2/modMemberForm.do?id=${mem.id}">수정</a></td>
						<td><a href="${contextPath}/member2/delMember.do?id=${mem.id}">삭제</a></td>
					</tr>
				</c:forEach>
			</c:when>
		</c:choose>
	</table>
	<a href="${contextPath}/member2/memberForm.do"><p class="cls2">회원 가입하기</p></a>
</body>
</html>

회원 가입하기 클릭 후, 회원정보 추가

 


 

//modMemberForm.jsp 회원정보 수정창

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="contextPath"  value="${pageContext.request.contextPath}"/>
<%
	request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Insert title here</title>
</head>
<body>
	<h1>회원 정보 수정</h1>
	<!-- 수정하기 클릭시 컨트롤러에 /member/modMember.do로 요청함  -->
	<form action="${contextPath}/member2/modMember.do?id=${memInfo.id}" method="post">
		<h1 style="text-align: center;">회원 가입창</h1>
		<table align="center">
			<tr>
				<td width="200">
					<p align="right">아이디</p>
				</td>
				<td width="400">		<!-- 조회한 회원 정보를 텍스트로 표시함  -->
					<input type="text"  name="id" value="${memInfo.id}" disabled>
				</td>
			</tr>
			
			<tr>
				<td width="200">
					<p align="right">비밀번호</p>
				</td>
				<td width="400">
					<input type="password"  name="pw" value="${memInfo.pw}" >
				</td>
			</tr>
			
			<tr>
				<td width="200">
					<p align="right">이름</p>
				</td>
				<td width="400">
					<input type="text"  name="name" value="${memInfo.name}" >
				</td>
			</tr>
			
			
			<tr>
				<td width="200">
					<p align="right">나이</p>
				</td>
				<td width="400">
					<input type="text"  name="age" value="${memInfo.age}" >
				</td>
			</tr>
			
			<tr>
				<td width="200">
					<p align="right">성별</p>
				</td>
				<td width="400">
					<input type="radio" name="gender" value="남" checked >남
					<input type="radio" name="gender" value="여" >여
				</td>
			</tr>
			
			<tr>
				<td width="200">
					<p align="right">핸드폰</p>
				</td>
				<td width="400">
					<input type="text"  name="phone" value="${memInfo.phone}" >
				</td>
			</tr>
			
			
			<tr>
				<td width="200">
					<p align="right">이메일</p>
				</td>
				<td width="400">
					<input type="text"  name="email" value="${memInfo.email}" >
				</td>
			</tr>
			
			<tr>
				<td width="200">
					<p align="right">주소</p>
				</td>
				<td width="400">
					<input type="text"  name="address" value="${memInfo.address}" >
				</td>
			</tr>
			
			<tr>
				<td width="200">
					<p align="right">가입일</p>
				</td>
				<td width="400">
					<input type="text"  name="regidate" value="${memInfo.regidate}" disabled >
				</td>
			</tr>
			
			<tr>
				<td width="200">
					<p align="right">&nbsp;</p>
				</td>
				<td width="400">
					<input type="submit" value="수정하기">
					<input type="reset" value="다시입력">
				</td>
			</tr>			
		</table>
	</form>
</body>
</html>

수정 버튼 클릭 후, 회원정보 수정


삭제 버튼 클릭 후, 회원정보 삭제


728x90
반응형

'Project Development > Java_programming' 카테고리의 다른 글

게시판 만들기 - model1 방식  (0) 2021.12.20
공지사항 페이지 레이아웃  (0) 2021.12.15
비밀번호 찾기 - 메일 인증  (0) 2021.12.15
아이디 찾기 - DB 연결  (0) 2021.12.15
회원가입 - DB 연결  (0) 2021.12.14

댓글