09009

[JSP] (7) 회원 정보 변경 본문

JSP/회원 관리
[JSP] (7) 회원 정보 변경
09009

회원 정보 변경

이미 회원 가입을 하였고 로그인 화면에서 아이디, 비밀번호를 입력하여 회원 인증이 완료된 사용자는

메인 페이지 (main.jsp)에서 회원 정보를 변경하는 서비스를 제공받을 수 있다.

 

회원 정보를 수정하기 전에 등록된 회원의 정보를 출력해 주어야 하기 때문에

memberUpdate.do가 요청되었을 때 호출되는 서블릿 클래스를 생성하여

인증 처리한 회원 아이디로 회원 정보를 얻어온 후,

이를 회원 수정을 위한 폼(memberUpdate.jsp)으로 이동시킨다.

 

main.jsp 페이지에 있는 <회원정보변경> 버튼은 아래와 같이 get 방식으로 memberUpdate.do를 요청한다.

memberUpdate.do 요청을 처리하는 서블릿 클래스에서는

doGet() 메서드회원 정보를 얻어와서 회원 수정을 위한 폼으로 이동하는 처리만 수행한다.

 

 

회원 정보 수정을 위한 폼으로 이동하는 처리를 수행하는 서블릿 클래스 

✍ MemberUpdateServlet.java

package controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
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 dao.MemberDAO;
import dto.MemberVO;


@WebServlet("/memberUpdate.do")
public class MemberUpdateServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
   
  
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String userid = request.getParameter("userid");
		MemberDAO mdao = MemberDAO.getInstance();
		
		MemberVO mvo = mdao.getMember(userid);
		// 회원 정보를 객체에 저장
		request.setAttribute("mvo", mvo);
		
		// 회원 정보 수정하는 폼으로 이동
		RequestDispatcher dispatcher = request.getRequestDispatcher("member/memberUpdate.jsp");
		dispatcher.forward(request, response);
		
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	}

}

 

다음으로 회원 정보를 변경하기 위한 폼을 작성한다.

 

인증 완료된 사용자에게 제공되는 회원 정보 수정 페이지

✍ member/memberUpdate.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 관리</title>
<script type="text/javascript" src="script/member.js"></script>
</head>
<body>
<h2>회원 수정</h2>
<form action="memberUpdate.do" method="post" name="frm">
 <table>
  <tr>
    <td> 이름   </td>
    <td><input type="text" name="name" size="20" value="${mvo.name}" readonly></td>
  </tr>
  <tr>
    <td> 아이디  </td>
    <td><input type="text" name="userid" size="20" value="${mvo.userid}" readonly></td>
  </tr>
  <tr>
    <td> 암 &nbsp; 호   </td>
    <td><input type="password" name="pwd" size="20"> *</td>
  </tr>
  <tr height="30">
    <td width="80">암호 확인</td>
    <td><input type="password" name="pwd_check" size="20"> *</td>
  </tr>
  <tr>
    <td> 이메일  </td>
    <td><input type="text" name="email" size="20" value="${mvo.email}"></td>
  </tr>
  <tr>
    <td> 전화번호  </td>
    <td><input type="text" name="phone" size="20" value="${mvo.phone}"></td>
  </tr>  
  <tr>
    <td> 등급  </td>
    <td>
     <c:choose>
      <c:when test="${mvo.admin==0}">
       <input type="radio" name="admin" value="0" checked="checked"> 일반회원
       <input type="radio" name="admin" value="1"> 관리자
      </c:when>
      <c:otherwise>
       <input type="radio" name="admin" value="0"> 일반회원
       <input type="radio" name="admin" value="1" checked="checked"> 관리자      
      </c:otherwise> 
     </c:choose>
    </td>
  </tr>  
  <tr>
   <td colspan="2" align="center">
   <!-- 확인 버튼을 클릭하면 member.js파일에서 joinCheck() 함수를 호출하여 입력한 내용들의 유효성 확인 -->
   <input type="submit" value="확인" onclick="return joinCheck()">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
   <input type="reset" value="취소">
   </td>
  </tr>
 </table>
</form>
</body>
</html>

 

회원 가입할 때 입력한 정보가 회원 정보 수정 페이지(memberUpdate.jsp)에 출력되는데 사용자 아이디와 이름은 수정 불가능하고 나머지 항목에 대하여 수정할 수 있으면 내용을 변경한 후에 <확인> 버튼을 클릭하면 회원 정보가 변경된다.

 

회원 정보를 변경하기 위한 데이터베이스 처리를 위해 DAO에 메서드를 추가해야 한다.

 

회원 정보를 변경하기 위한 메서드 추가

✍ MemberDAO.java

밑에 MemberUpdateServlet.java 부터 확인하면 이해가 더 쉽다.

// 위의 중복된 내용 생략	
    // 회원 정보 변경 메서드
	public int updateMember(MemberVO mvo) {
		int result = -1;
		String sql = "update member set pwd=?, email=? , phone=?, admin=? where userid=?";
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn = getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, mvo.getPwd());
			pstmt.setString(2, mvo.getEmail());
			pstmt.setString(3, mvo.getPhone());
			pstmt.setInt(4, mvo.getAdmin());
			pstmt.setString(5, mvo.getUserid());
			result = pstmt.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (pstmt != null) pstmt.close();
				if (conn != null) conn.close();
			}catch(Exception e) {
				e.printStackTrace();
			} 
			}
		return result;
	}
	}

이전에 입력된 회원 정보에서 일부 정보를 수정한 뒤 <확인> 버튼을 클릭하면 post 방식으로 "memberUpdate.do"를 요청한다.

✍ member/memberUpdate.jsp

위 요청에 대한 처리는 MemberUpdateServlet의 doPost() 메서드에 추가하도록 한다.

 

✍ MemberUpdateServlet.java

// 위의 중복된 내용은 생략	
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 회원 정보 수정 폼(memberUpate.jsp)에서 입력한 정보에서 한글이 깨지지 않도록 하기 위해 인코딩 설정
		request.setCharacterEncoding("UTF-8");
		
		// memberUpate.jsp에서 입력한 회원 정보를 얻어온다.
		String userid = request.getParameter("userid");
		String pwd = request.getParameter("pwd");
		String email = request.getParameter("email");
		String phone = request.getParameter("phone");
		String admin = request.getParameter("admin");
		
		// MemberVO 객체인 mvo에 memberUpate.jsp에서 입력 받은 데이터를 저장한다.
		MemberVO mvo = new MemberVO();
		mvo.setUserid(userid);
		mvo.setPwd(pwd);
		mvo.setEmail(email);
		mvo.setPhone(phone);
		mvo.setAdmin(Integer.parseInt(admin));
		
		MemberDAO mdao = MemberDAO.getInstance();
		mdao.updateMember(mvo);
		response.sendRedirect("login.do");
	}
}

 

회원 정보를 수정한 후 login.do를 요청할 경우 이미 로그인이 완료된 회원이기 때문에

인증 처리 과정을 거치지 않고 메인 페이지 (main.jsp)로 이동할 수 있도록 해야 한다.

그러기 위해서 LoginServlet 클래스를 아래와 같이 수정해야 한다.

 

✍ LoginServlet.java

// 위의 중복된 내용 생략
@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String url = "member/login.jsp";
		
		HttpSession session = request.getSession();
		
		if(session.getAttribute("loginUser") != null) // 이미 로그인이 된 사용자일 경우
			url = "main.jsp"; // 메인 페이지로 이동하게 설정
		
		RequestDispatcher dispatcher = request.getRequestDispatcher(url);
		dispatcher.forward(request, response);
	}
 // 아래의 중복된 내용 생략

'JSP > 회원 관리' 카테고리의 다른 글

[JSP] (8) 코드 수정본, onchange  (0) 2023.04.17
[JSP] (6) 로그아웃  (0) 2023.04.16
[JSP] (5) 회원 가입 - 2  (0) 2023.04.15
[JSP] (4) 회원 가입 - 1  (1) 2023.04.15
[JSP] (3) 로그인 - 2  (0) 2023.04.15