1. 개요
■ 지난 포스팅 : [JSP개발] 페이지 모듈화
이번에는 회원 탈퇴와, 회원정보 수정을 구현한다. 메인화면에서 로그인을 하면 내정보 메뉴가 나온다. 이를 클릭하면 현재 아이디에 대한 회원정보가 나타난다. 그리고 내정보에서는 회원 탈퇴와 회원정보 수정 버튼이 있다. 각 버튼을 클릭할 시 해당 작업을 처리한다.
■ JSP
UserInfoForm.jsp : 내정보 클릭 시 유저 정보를 보여주는 화면
ModifyFrom.jsp : 회원정보 수정 화면
DeleteForm.jsp : 회원 탈퇴 화면
ModifyPro.jsp : 회원정보 수정을 처리한다.
DeletePro.jsp : 회원 탈퇴를 처리한다.
2. 소스 코드
아래의 소스는 지난 포스팅과 동일하다.
DBConnection.java
MemberBean.java
MainForm.jsp
FirstView.jsp
LoginForm.jsp
JoinForm.jsp
LoginPro.jsp
LogoutPro.jsp
JoinPro.jsp
■ Header.jsp
37 ~ 40 줄
내정보 버튼을 클릭 시 회원정보를 보여주는 화면으로 이동한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <html> <head> <title>상단 영역</title> <link rel="stylesheet" href="css/bootstrap.min.css"> <style type="text/css"> #wrap{ text-align: center; width: 800px; height: 150px; } </style> <script type="text/javascript"> function changeView(value){ if(value == "0") // HOME 버튼 클릭시 첫화면으로 이동 { location.href="MainForm.jsp"; } else if(value == "1") // 로그인 버튼 클릭시 로그인 화면으로 이동 { location.href="MainForm.jsp?contentPage=member/view/LoginForm.jsp"; } else if(value == "2") // 회원가입 버튼 클릭시 회원가입 화면으로 이동 { location.href="MainForm.jsp?contentPage=member/view/JoinForm.jsp"; } else if(value == "3") // 로그아웃 버튼 클릭시 로그아웃 처리 { location.href="member/pro/LogoutPro.jsp"; } else if(value == "4") // 내정보 버튼 클릭시 회원정보 보여주는 화면으로 이동 { location.href="MainForm.jsp?contentPage=member/view/UserInfoForm.jsp"; } } </script> </head> <body> <div id = "wrap"> <p> <button class="btn btn-success" onclick="changeView(0)">HOME</button> <% // 로그인 안되었을 경우 - 로그인, 회원가입 버튼을 보여준다. if(session.getAttribute("sessionID")==null){ %> <button id="loginBtn" class="btn btn-primary" onclick="changeView(1)">로그인</button> <button id="joinBtn" class="btn btn-primary" onclick="changeView(2)">회원가입</button> <% // 로그인 되었을 경우 - 로그아웃, 내정보 버튼을 보여준다. }else{ %> <button id="logoutBtn" class="btn btn-primary" onclick="changeView(3)">로그아웃</button> <button id="updateBtn" class="btn btn-primary" onclick="changeView(4)">내정보</button> <% } %> <button id="memberViewBtn" class="btn btn-warning">회원보기</button> </p> </div> </body> </html> | cs |
■ UserInfoForm.jsp
27 ~ 35 줄
각 버튼 클릭 시 특정 페이지로 이동시킨다. 뒤로 클릭 시 메인화면으로, 회원정보 변경 클릭 시 회원 수정 화면으로, 회원탈퇴 클릭 시 회원 삭제 화면으로 이동한다.
42 ~ 47 줄
세션에서 로그인한 아이디 정보를 가져온다. 그 정보로 해당하는 유저 정보를 DB에서 찾아서 MemberBean에 담는다. 그 정보가 담긴 MemberBean을 넘겨받는다.
54 ~ 102
MemberBean으로부터 각 정보를 얻어와 화면에 출력한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <%@ page import="jsp.member.model.MemberDAO" %> <%@ page import="jsp.member.model.MemberBean" %> <html> <head> <title>현재 유저정보 출력화면</title> <style type="text/css"> table{ margin-left:auto; margin-right:auto; border:3px solid skyblue; } td{ border:1px solid skyblue } #title{ background-color:skyblue } </style> <script type="text/javascript"> function changeForm(val){ if(val == "-1"){ location.href="MainForm.jsp"; }else if(val == "0"){ location.href="MainForm.jsp?contentPage=member/view/ModifyFrom.jsp"; }else if(val == "1"){ location.href="MainForm.jsp?contentPage=member/view/DeleteForm.jsp"; } } </script> </head> <body> <% String id = session.getAttribute("sessionID").toString(); // 세션에 저장된 아이디를 가져와서 // 그 아이디 해당하는 회원정보를 가져온다. MemberDAO dao = MemberDAO.getInstance(); MemberBean memberBean = dao.getUserInfo(id); %> <br><br> <b><font size="6" color="gray">내 정보</font></b> <br><br><br> <!-- 가져온 회원정보를 출력한다. --> <table> <tr> <td id="title">아이디</td> <td><%=memberBean.getId() %></td> </tr> <tr> <td id="title">비밀번호</td> <td><%=memberBean.getPassword() %></td> </tr> <tr> <td id="title">이름</td> <td><%=memberBean.getName() %></td> </tr> <tr> <td id="title">성별</td> <td><%=memberBean.getGender()%></td> </tr> <tr> <td id="title">생일</td> <td> <%=memberBean.getBirthyy() %>년 <%=memberBean.getBirthmm() %>월 <%=memberBean.getBirthdd() %>일 </td> </tr> <tr> <td id="title">이메일</td> <td> <%=memberBean.getMail1() %>@ <%=memberBean.getMail2() %> </td> </tr> <tr> <td id="title">휴대전화</td> <td><%=memberBean.getPhone() %></td> </tr> <tr> <td id="title">주소</td> <td> <%=memberBean.getAddress() %> </td> </tr> </table> <br> <input type="button" value="뒤로" onclick="changeForm(-1)"> <input type="button" value="회원정보 변경" onclick="changeForm(0)"> <input type="button" value="회원탈퇴" onclick="changeForm(1)"> </body> </html> | cs |
■ DeleteForm.jsp
25 ~ 30 줄
회원정보를 삭제할 때 비밀번호를 입력해야 한다. 이 부분은 비밀번호를 입력했는지 체크하는 부분이다.
52 ~ 53 줄
취소 버튼을 클릭 시 메인화면으로 이동한다. 탈퇴 버튼을 클릭 시 입력된 비밀번호를 DeletePro.jsp로 전달한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <html> <head> <title>탈퇴 화면</title> <style type="text/css"> table{ margin-left:auto; margin-right:auto; border:3px solid skyblue; } td{ border:1px solid skyblue } #title{ background-color:skyblue } </style> <script type="text/javascript"> // 비밀번호 미입력시 경고창 function checkValue(){ if(!document.deleteform.password.value){ alert("비밀번호를 입력하지 않았습니다."); return false; } } </script> </head> <body> <br><br> <b><font size="6" color="gray">내 정보</font></b> <br><br><br> <form name="deleteform" method="post" action="MainForm.jsp?contentPage=member/pro/DeletePro.jsp" onsubmit="return checkValue()"> <table> <tr> <td bgcolor="skyblue">비밀번호</td> <td><input type="password" name="password" maxlength="50"></td> </tr> </table> <br> <input type="button" value="취소" onclick="javascript:window.location='MainForm.jsp'"> <input type="submit" value="탈퇴" /> </form> </body> </html> | cs |
■ DeletePro.jsp
11 ~ 17 줄
DeleteForm.jsp에서 넘겨받은 비밀번호와 세션에서 가져온 아이디를 이용해서 회원정보를 삭제한다. 삭제 결과에 따라 결과값을 반환한다.
19 ~ 26 줄
정상적으로 삭제가 되었다면 세션에 있는 정보를 삭제한다. 그리고 회원정보가 삭제되었다는 메시지를 화면에 출력한다.
30 ~ 35 줄
DeleteForm.jsp 입력한 비밀번호가 잘못되었을 경우 비밀번호가 맞지 않다는 경고 창을 띄운다. 그리고 이전 화면인 DeleteForm.jsp으로 이동한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <%@ page import="jsp.member.model.MemberDAO" %> <%@ page import="jsp.member.model.MemberBean" %> <html> <head> <title>회원 삭제 처리</title> </head> <body> <% String id= (String)session.getAttribute("sessionID"); String pw = request.getParameter("password"); // 세션에서 아이디를, DeleteForm.jsp에서 입력받은 비밀번호를 가져온다. // 가져온 결과를 가지고 회원정보를 삭제한다. - 삭제결과를 반환 MemberDAO dao = MemberDAO.getInstance(); int check = dao.deleteMember(id, pw); if(check == 1){ session.invalidate(); // 삭제했다면 세션정보를 삭제한다. %> <br><br> <b><font size="4" color="gray">회원정보가 삭제되었습니다.</font></b> <br><br><br> <input type="button" value="확인" onclick="javascript:window.location='MainForm.jsp'"> <% // 비밀번호가 틀릴경우 - 삭제가 안되었을 경우 }else{ %> <script> alert("비밀번호가 맞지 않습니다."); history.go(-1); </script> <% } %> </body> </html> | cs |
■ ModifyFrom.jsp
8 ~ 11 줄
수정할 회원 정보를 DB에서 가져온다.
34 ~ 49 줄
DB에서 가져온 이메일 정보를 바탕으로 <select>에 표시된 이메일을 자동으로 선택되게 한다. 예를 들어 DB에 저장된 이메일이 user01@gmail.com 이라면 ModifyFrom.jsp가 실행되면서 동시에 <select> 부분에서 gmail.com이 자동 선택되도록 한다.
70 ~ 71 줄
ModifyFrom.jsp에서 수정한 정보를 ModifyPro.jsp으로 전달하기 위한 <form> 태그이다.
73 ~ 136
MemberBean에 있는 회원정보를 화면에 출력한다. 수정 가능한 항목은 비밀번호, 이메일, 휴대전화, 주소 이렇게 4가지이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <%@ page import="jsp.member.model.MemberDAO" %> <%@ page import="jsp.member.model.MemberBean" %> <html> <head> <% String id = session.getAttribute("sessionID").toString(); MemberDAO dao = MemberDAO.getInstance(); MemberBean memberBean = dao.getUserInfo(id); %> <title>회원정보 수정화면</title> <style type="text/css"> table{ margin-left:auto; margin-right:auto; border:3px solid skyblue; } td{ border:1px solid skyblue } #title{ background-color:skyblue } </style> <script type="text/javascript"> function init(){ setComboValue("<%=memberBean.getMail2()%>"); } function setComboValue(val) { var selectMail = document.getElementById('mail2'); // select 아이디를 가져온다. for (i = 0, j = selectMail.length; i < j; i++) // select 하단 option 수만큼 반복문 돌린다. { if (selectMail.options[i].value == val) // 입력된값과 option의 value가 같은지 비교 { selectMail.options[i].selected = true; // 같은경우라면 체크되도록 한다. break; } } } // 비밀번호 입력여부 체크 function checkValue() { if(!document.userInfo.password.value){ alert("비밀번호를 입력하세요."); return false; } } </script> </head> <body onload="init()"> <br><br> <b><font size="6" color="gray">회원정보 수정</font></b> <br><br><br> <!-- 입력한 값을 전송하기 위해 form 태그를 사용한다 --> <!-- 값(파라미터) 전송은 POST 방식 --> <form method="post" action="MainForm.jsp?contentPage=member/pro/ModifyPro.jsp" name="userInfo" onsubmit="return checkValue()"> <table> <tr> <td id="title">아이디</td> <td id="title"><%=memberBean.getId() %></td> </tr> <tr> <td id="title">비밀번호</td> <td> <input type="password" name="password" maxlength="50" value="<%=memberBean.getPassword()%>"> </td> </tr> </table> <br><br> <table> <tr> <td id="title">이름</td> <td><%=memberBean.getName() %></td> </tr> <tr> <td id="title">성별</td> <td><%=memberBean.getGender()%></td> </tr> <tr> <td id="title">생일</td> <td> <%=memberBean.getBirthyy() %>년 <%=memberBean.getBirthmm() %>월 <%=memberBean.getBirthdd() %>일 </td> </tr> <tr> <td id="title">이메일</td> <td> <input type="text" name="mail1" maxlength="50" value="<%=memberBean.getMail1() %>"> @ <select name="mail2" id="mail2"> <option value="naver.com">naver.com</option> <option value="gmail.com">gmail.com</option> <option value="daum.net" >daum.net</option> <option value="nate.com">nate.com</option> </select> </td> </tr> <tr> <td id="title">휴대전화</td> <td> <input type="text" name="phone" value="<%=memberBean.getPhone() %>"/> </td> </tr> <tr> <td id="title">주소</td> <td> <input type="text" size="50" name="address" value="<%=memberBean.getAddress() %>"/> </td> </tr> </table> <br><br> <input type="button" value="취소" onclick="javascript:window.location='MainForm.jsp'"> <input type="submit" value="수정"/> </form> </body> </html> | cs |
■ ModifyPro.jsp
19 ~ 24 줄
ModifyFrom.jsp 넘겨받은 회원정보를 담고 있는 자바빈을 이용해 회원정보를 수정한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <%-- 자바빈 클래스 import --%> <%@ page import="jsp.member.model.MemberBean" %> <%-- DAO import --%> <%@ page import="jsp.member.model.MemberDAO" %> <html> <head> <title>회원정보 수정처리</title> </head> <body> <%-- 자바빈 관련 액션태그 사용 --%> <jsp:useBean id="memberBean" class="jsp.member.model.MemberBean" /> <jsp:setProperty property="*" name="memberBean"/> <% // 세션에서 아이디를 가져와 MemberBean에 세팅한다. String id= (String)session.getAttribute("sessionID"); memberBean.setId(id); // 수정할 회원정보를 담고있는 MemberBean을 DAO로 전달하여 회원정보 수정을 한다. MemberDAO dao = MemberDAO.getInstance(); dao.updateMember(memberBean); %> <br><br> <font size="5" color="gray">회원정보가 수정되었습니다.</font> <br><br> <input type="button" value="메인으로" onclick="javascript:window.location='MainForm.jsp'"/> </body> </html> | cs |
■ MemberDAO.java
188 ~ 289 줄
회원정보를 수정하는 메서드와 삭제하는 메서드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 | package jsp.member.model; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Date; import javax.naming.NamingException; import jsp.util.DBConnection; /** * JSP_MEMBER 테이블과 연관된 DAO로 * 회원 데이터를 처리하는 클래스이다. * <br><br> * Data Access Object - 테이블 당 한개의 DAO를 작성한다. */ public class MemberDAO { private static MemberDAO instance; // 싱글톤 패턴 private MemberDAO(){} public static MemberDAO getInstance(){ if(instance==null) instance=new MemberDAO(); return instance; } /** * String -> java.sql.Date로 변경하는 메서드 * <pre> * 문자열로된 생년월일을 Date로 변경하기 위해 필요하다. * java.util.Date클래스로는 오라클의 Date형식과 연동할 수 없다. * Oracle의 date형식과 연동되는 java의 Date는 java.sql.Date 클래스이다. </pre> * @param member 회원정보를 담고있는 TO * @return java.sql.Date */ public Date stringToDate(MemberBean member) { String year = member.getBirthyy(); String month = member.getBirthmm(); String day = member.getBirthdd(); Date birthday = null; if(year != null && month != null && day != null) birthday = Date.valueOf(year+"-"+month+"-"+day); return birthday; } // end stringToDate() /** * 회원정보를 JSP_MEMBER 테이블에 저장하는 메서드 * @param member 가입할 회원정보를 담고있는 TO * @throws SQLException */ public void insertMember(MemberBean member) throws SQLException { Connection conn = null; PreparedStatement pstmt = null; try { // 커넥션을 가져온다. conn = DBConnection.getConnection(); // 자동 커밋을 false로 한다. conn.setAutoCommit(false); // 쿼리 생성한다. // 가입일의 경우 자동으로 세팅되게 하기 위해 sysdate를 사용 StringBuffer sql = new StringBuffer(); sql.append("insert into JSP_MEMBER values"); sql.append("(?, ?, ?, ?, ?, ?, ?, ?, sysdate)"); stringToDate(member); /* * StringBuffer에 담긴 값을 얻으려면 toString()메서드를 * 이용해야 한다. */ pstmt = conn.prepareStatement(sql.toString()); pstmt.setString(1, member.getId()); pstmt.setString(2, member.getPassword()); pstmt.setString(3, member.getName()); pstmt.setString(4, member.getGender()); pstmt.setDate(5, stringToDate(member)); pstmt.setString(6, member.getMail1()+"@"+member.getMail2()); pstmt.setString(7, member.getPhone()); pstmt.setString(8, member.getAddress()); // 쿼리 실행 pstmt.executeUpdate(); // 완료시 커밋 conn.commit(); } catch (ClassNotFoundException | NamingException | SQLException sqle) { // 오류시 롤백 conn.rollback(); throw new RuntimeException(sqle.getMessage()); } finally { // Connection, PreparedStatement를 닫는다. try{ if ( pstmt != null ){ pstmt.close(); pstmt=null; } if ( conn != null ){ conn.close(); conn=null; } }catch(Exception e){ throw new RuntimeException(e.getMessage()); } } } // end insertMember() /** * 아이디를 이용해 현재 회원정보를 가져온다. * @param id 회원 아이디 * @return MemberBean */ public MemberBean getUserInfo(String id) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; MemberBean member = null; try { // 쿼리 StringBuffer query = new StringBuffer(); query.append("SELECT * FROM JSP_MEMBER WHERE ID=?"); conn = DBConnection.getConnection(); pstmt = conn.prepareStatement(query.toString()); pstmt.setString(1, id); rs = pstmt.executeQuery(); if (rs.next()) // 회원정보를 DTO에 담는다. { // DB의 생년월일정보 -> 년, 월, 일로 문자열 자른다. String birthday = rs.getDate("birth").toString(); String year = birthday.substring(0, 4); String month = birthday.substring(5, 7); String day = birthday.substring(8, 10); // 이메일을 @ 기준으로 자른다. String mail = rs.getString("mail"); int idx = mail.indexOf("@"); String mail1 = mail.substring(0, idx); String mail2 = mail.substring(idx+1); // 자바빈에 정보를 담는다. member = new MemberBean(); member.setId(rs.getString("id")); member.setPassword(rs.getString("password")); member.setName(rs.getString("name")); member.setGender(rs.getString("gender")); member.setBirthyy(year); member.setBirthmm(month); member.setBirthdd(day); member.setMail1(mail1); member.setMail2(mail2); member.setPhone(rs.getString("phone")); member.setAddress(rs.getString("address")); member.setReg(rs.getTimestamp("reg")); } return member; } catch (Exception sqle) { throw new RuntimeException(sqle.getMessage()); } finally { // Connection, PreparedStatement를 닫는다. try{ if ( pstmt != null ){ pstmt.close(); pstmt=null; } if ( conn != null ){ conn.close(); conn=null; } }catch(Exception e){ throw new RuntimeException(e.getMessage()); } } } // end getUserInfo /** * 회원정보를 수정한다. * @param member 수정할 회원정보를 담고있는 TO * @throws SQLException */ public void updateMember(MemberBean member) throws SQLException{ Connection conn = null; PreparedStatement pstmt = null; try { StringBuffer query = new StringBuffer(); query.append("UPDATE JSP_MEMBER SET"); query.append(" PASSWORD=?, MAIL=?, PHONE=?, ADDRESS=?"); query.append(" WHERE ID=?"); conn = DBConnection.getConnection(); pstmt = conn.prepareStatement(query.toString()); // 자동 커밋을 false로 한다. conn.setAutoCommit(false); pstmt.setString(1, member.getPassword()); pstmt.setString(2, member.getMail1()+"@"+member.getMail2()); pstmt.setString(3, member.getPhone()); pstmt.setString(4, member.getAddress()); pstmt.setString(5, member.getId()); pstmt.executeUpdate(); // 완료시 커밋 conn.commit(); } catch (Exception sqle) { conn.rollback(); // 오류시 롤백 throw new RuntimeException(sqle.getMessage()); } finally { try{ if ( pstmt != null ){ pstmt.close(); pstmt=null; } if ( conn != null ){ conn.close(); conn=null; } }catch(Exception e){ throw new RuntimeException(e.getMessage()); } } } // end updateMember /** * 회원정보를 삭제한다. * @param id 회원정보 삭제 시 필요한 아이디 * @param pw 회원정보 삭제 시 필요한 비밀번호 * @return x : deleteMember() 수행 후 결과값 */ @SuppressWarnings("resource") public int deleteMember(String id, String pw) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String dbpw = ""; // DB상의 비밀번호를 담아둘 변수 int x = -1; try { // 비밀번호 조회 StringBuffer query1 = new StringBuffer(); query1.append("SELECT PASSWORD FROM JSP_MEMBER WHERE ID=?"); // 회원 삭제 StringBuffer query2 = new StringBuffer(); query2.append("DELETE FROM JSP_MEMBER WHERE ID=?"); conn = DBConnection.getConnection(); // 자동 커밋을 false로 한다. conn.setAutoCommit(false); // 1. 아이디에 해당하는 비밀번호를 조회한다. pstmt = conn.prepareStatement(query1.toString()); pstmt.setString(1, id); rs = pstmt.executeQuery(); if (rs.next()) { dbpw = rs.getString("password"); if (dbpw.equals(pw)) // 입력된 비밀번호와 DB비번 비교 { // 같을경우 회원삭제 진행 pstmt = conn.prepareStatement(query2.toString()); pstmt.setString(1, id); pstmt.executeUpdate(); conn.commit(); x = 1; // 삭제 성공 } else { x = 0; // 비밀번호 비교결과 - 다름 } } return x; } catch (Exception sqle) { try { conn.rollback(); // 오류시 롤백 } catch (SQLException e) { e.printStackTrace(); } throw new RuntimeException(sqle.getMessage()); } finally { try{ if ( pstmt != null ){ pstmt.close(); pstmt=null; } if ( conn != null ){ conn.close(); conn=null; } }catch(Exception e){ throw new RuntimeException(e.getMessage()); } } } // end deleteMember /** * 로그인시 아이디, 비밀번호 체크 메서드 * @param id 로그인할 아이디 * @param pw 비밀번호 * @return x : loginCheck() 수행 후 결과값 */ public int loginCheck(String id, String pw) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String dbPW = ""; // db에서 꺼낸 비밀번호를 담을 변수 int x = -1; try { // 쿼리 - 먼저 입력된 아이디로 DB에서 비밀번호를 조회한다. StringBuffer query = new StringBuffer(); query.append("SELECT PASSWORD FROM JSP_MEMBER WHERE ID=?"); conn = DBConnection.getConnection(); pstmt = conn.prepareStatement(query.toString()); pstmt.setString(1, id); rs = pstmt.executeQuery(); if (rs.next()) // 입려된 아이디에 해당하는 비번 있을경우 { dbPW = rs.getString("password"); // 비번을 변수에 넣는다. if (dbPW.equals(pw)) x = 1; // 넘겨받은 비번과 꺼내온 비번 비교. 같으면 인증성공 else x = 0; // DB의 비밀번호와 입력받은 비밀번호 다름, 인증실패 } else { x = -1; // 해당 아이디가 없을 경우 } return x; } catch (Exception sqle) { throw new RuntimeException(sqle.getMessage()); } finally { try{ if ( pstmt != null ){ pstmt.close(); pstmt=null; } if ( conn != null ){ conn.close(); conn=null; } }catch(Exception e){ throw new RuntimeException(e.getMessage()); } } } // end loginCheck() } | cs |
3. 실행 결과
로그인을 하고 내정보를 클릭할 경우 회원정보가 나타난다.
내정보에서 회원정보 변경 버튼을 클릭 시 회원정보 수정 화면으로 이동된다.
내정보에서 회원 탈퇴 버튼을 클릭 시 탈퇴 회면으로 이동된다. 여기서 비밀번호를 입력 후 탈퇴 버튼을 누르면 회원정보가 삭제된다.
4. 소스코드 다운로드 (war 파일)
'코딩 > JSP' 카테고리의 다른 글
[JSP개발] 총방문자 수, 오늘 방문자 수 추가 (2) | 2016.12.05 |
---|---|
[JSP개발] 회원가입 - MVC 패턴 적용 (5) | 2016.12.04 |
[JSP개발] 페이지 모듈화 <jsp:include> 적용 (8) | 2016.11.24 |
[JSP개발] 회원가입 - 로그인, 로그아웃 구현 (10) | 2016.11.23 |
[JSP개발] 회원가입 DB연동 (28) | 2016.11.22 |