52.-1. 마이페이지
1. 마이페이지를 누르면 지정한 경로로 이동
mebubar.jsp
<a href="<%= contextPath %>/myPage.me">마이페이지</a>
=> Controller의 매핑값으로 받는다.
2. Controller에서 보낸값을 받아줄 화면
53-2. 회원정보 수정
53-3. 비밀번호 수정
1. 마이페이지의 비밀번호 수정 버튼 클릭 시 모달창 나오게
<button type="button" class="btn btn-warning btn-sm" data-toggle="modal" data-target="#updatePwdForm">비밀번호 수정</button>
<button type="button" class="btn btn-warning btn-sm" data-toggle="modal" data-target="#updatePwdForm">비밀번호 수정</button>
2. 모달창 jsp
myPage.jsp
<!-- 비밀번호 수정 모달창 -->
<!-- The Modal -->
<div class="modal" id="updatePwdForm">
<div class="modal-dialog">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h4 class="modal-title">비밀번호 변경</h4>
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<!-- Modal body -->
<div class="modal-body">
<form method="post" action="<%= contextPath %>/updatePwd.me">
<!-- 현재 비밀번호, 변경할 비밀번호, 변경할 비밀번호 재입력 -->
<div class="form-group">
<label for="userPwd">현재 비밀번호:</label>
<input type="password" class="form-control" placeholder="비밀번호를 입력해 주세요." id="userPwd" name="userPwd" required>
</div>
<div class="form-group">
<label for="updatePwd">변경할 비밀번호:</label>
<input type="password" class="form-control" placeholder="변경할 비밀번호를 입력해 주세요." id="updatePwd" name="updatePwd">
</div>
<div class="form-group">
<label for="checkPwd">변경할 비밀번호 확인:</label>
<input type="password" class="form-control" placeholder="변경할 비밀번호를 다시 입력해 주세요." id="checkPwd" required>
</div>
<!-- 방법2. hidden으로 값 가져오기 -->
<input type="hidden" name="userNo" value="<%= loginUser.getUserNo() %>">
<button type="submit" onclick="return validatePwd();" class="btn btn-sm btn-secondary">비밀번호 변경</button>
<script>
function validatePwd(){
if($('#updatePwd').val() != $('#checkPwd').val()){
alert('비밀번호를 동일하게 입력해 주세요.');
$('#checkPwd').focus();
return false;
}
return true;
}
</script>
</form>
</div>
<!-- Modal footer -->
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">취소</button>
</div>
</div>
</div>
</div>
3. jsp의 form태그 안 action값에 맞는 매핑값 같은 Servlet
MemberUpdatePwdController.java
package com.kh.jsp.member.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.kh.jsp.member.model.service.MemberService;
import com.kh.jsp.member.model.vo.Member;
/**
* Servlet implementation class MemberUpdatePwdController
*/
@WebServlet("/updatePwd.me")
public class MemberUpdatePwdController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MemberUpdatePwdController() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1) POST방식 -> 인코딩
request.setCharacterEncoding("UTF-8");
HttpSession session = request.getSession(); // 방법1. session으로 값 가져오기
Member loginUser = ((Member)session.getAttribute("loginUser"));
int userNo = loginUser.getUserNo(); // 방법1. session으로 값 가져오기
String userId = loginUser.getUserId();
int num = Integer.parseInt(request.getParameter("userNo")); // 방법2. hidden으로 값 가져오기(myPage.jsp에서)
// 2) request로 값 뽑기
String userPwd = request.getParameter("userPwd");
String updatePwd = request.getParameter("updatePwd");
// 3) VO객체에 담아서 가공 => 이번에는 그냥 넘기기
// UPDATE MEMBER SET USER_PWD = updatePwd WHERE USER_ID = ??????
// AND USER_PWD = userPwd
// AND STATUS = 'Y'
// 4) Service단으로 넘기기
int result = new MemberService().updatePwdMember(userNo, userPwd, updatePwd);
// 5) 결과값을 통해서 성공 실패 여부에 따른 응답화면 지정
if(result > 0) {
session.setAttribute("alertMsg", "비밀번호 변경에 성공하셨습니다!");
// Member updateMem = new MemberService().selectMember(userId);
session.setAttribute("loginUser", new MemberService().selectMember(userId));
} else {
session.setAttribute("alertMsg", "비밀번호 변경에 실패했습니다...");
}
// 성공이든 실패든 마이페이지로 돌려줄 것
response.sendRedirect(request.getContextPath() + "/myPage.me");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
나중에 sql에서 userNo(PK)도 같이 넘겨줘야하는데,
방법1. session에 있는 userNo 값 가져오기
HttpSession session = request.getSession(); // 방법1. session으로 값 가져오기
int userNo = ((Member)session.getAttribute("loginUser")).getUserNo(); // 방법1. session으로 값 가져오기
방법2. hidden으로 userNo 가져오기
<!-- 방법2. hidden으로 값 가져오기 -->
<input type="hidden" name="userNo" value="<%= loginUser.getUserNo() %>">
int num = Integer.parseInt(request.getParameter("userNo")); // 방법2. hidden으로 값 가져오기(myPage.jsp에서)
4. Service
public int updatePwdMember(int userNo, String userPwd, String updatePwd) {
Connection conn = JDBCTemplate.getConnection();
// 비밀번호 update관련 DAO메소드 호출
int result = new MemberDao().updatePwdMember(conn, userNo, userPwd, updatePwd);
if(result > 0) {
JDBCTemplate.commit(conn);
} else {
JDBCTemplate.rollback(conn);
}
JDBCTemplate.close(conn);
return result;
}
5. Dao
public int updatePwdMember(Connection conn, int userNo, String userPwd, String updatePwd) {
// UPDATE문 => 처리된 행의 개수
int result = 0;
PreparedStatement pstmt = null;
String sql = prop.getProperty("updatePwdMember");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, updatePwd);
pstmt.setInt(2, userNo);
pstmt.setString(3, userPwd);
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCTemplate.close(pstmt);
}
return result;
}
53-4. 회원탈퇴
***오류뜨면 확인
name속성값 잘 줬나?
action값 잘 줬나?
submit 타입 잘 넣었나?
value값에 공백이 들어가지는 않았나?