JSP [10] 로그아웃/회원정보수정

totwo·2024년 7월 16일

JSP/Servlet/JSTL

목록 보기
10/15
post-thumbnail

전에 회원가입, 로그인 기능 구현하였다.
같은 DAO내에서 좀 더 쉽게 구현하기 위해 자주 사용하는 것들 먼저 묶어주기로 한다.

⚪ 자주 사용하는 지역변수 전역변수로 지정해주기

	// 1) 전역변수 지정 
    // (Field의 초기값은 null이므므로 null이라고 따로 초기화하지 않아도 된다.)
	private Connection conn;
	private PreparedStatement psmt;
	private ResultSet rs;

⚪ 자주 사용하는 기능 메서드 묶어주기

    // 2) 동적로딩 & 권한부여 하는 메서드 만들기 try-catch문까지 필수! 
	private void dbOpen() {		
		try { 
			Class.forName("oracle.jdbc.driver.OracleDriver");	 
			
			String db_id = "hr";
			String db_pw = "12345";
			String db_url = "jdbc:oracle:thin:@localhost:1521:xe";
 
			conn = DriverManager.getConnection(db_url, db_id, db_pw);			
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
    // 3) 자원반납 - 메서드 만들기
	private void dbClose() {
		try {
			if (rs != null)
				rs.close();
			if (psmt != null)
				psmt.close();
			if (conn != null)
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace(); 
		}
	}


[실습] 로그인 전에는 '로그인'이, 로그인 했을 때는 '수정', '로그아웃'이 뜨게 하시오

<!-- main jsp -->
<header id="header" class="alt">
	<a href="index.html" class="logo"><strong>Forty</strong> <span>by HTML5 UP</span></a>
	<nav>
		<% if(info == null){ %>
			<a href="#menu">로그인</a>
		<% } else { %> 
			<a href="update.jsp">회원정보수정</a>
			<a href="LogoutService">로그아웃</a>
		<% } %>
						</nav>
</header>

▶ 회원정보 수정 글자 클릭시 update.jsp로
▶ 로그아웃 글자 클릭 시 LogoutService(servlet)으로 가도록 만듦


[ 로그아웃 ]하고 main.jsp로 이동하시오

@WebServlet("/LogoutService")
public class LogoutService extends HttpServlet { 

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 
		HttpSession session = request.getSession();
		// session.removeAttribute("info"); --> 가능하다! 
		session.invalidate();
		response.sendRedirect("main.jsp");
	}
}    
          

[ 회원정보 수정을 위해 만든 jsp ]

 <!-- update.jsp -->
		<% 
           // 로그인된 상태이므로 session에 저장되어있는 회원정보인 info 가져오기!! 
			MemberDTO info = (MemberDTO)session.getAttribute("info");
		%>
		 
		<!-- Wrapper -->
			<div id="wrapper">
				<!-- Menu -->
					<nav id="Update">	
						<ul class="actions vertical">
							<li><h5>회원정보수정</h5></li>
                          		<!-- 보내줄 주소 UpdateService인 servlet으로 정함 -->
								<form action="UpdateService" method="post">
									<li>접속한 Email : <%= info.getEmail() %></li>
                                     <!-- 꼭 input 정보들 name 지정해주어야 한다! -->
									<li><input type="password" name="pw" placeholder="PW를 입력하세요" style="width: 500px; margin: 0 auto;"></li>
									<li><input type="text" name="phone" placeholder="전화번호를 입력하세요" style="width: 500px; margin: 0 auto;"></li>
									<li><input type="text" name="addr" placeholder="집주소를 입력하세요" style="width: 500px; margin: 0 auto;"></li>
									<li><input type="submit" value="Update" class="button fit" style="width: 500px; margin: 0 auto;"></li>
								</form>
						</ul>
					</nav>			
			</div>

[ 현재 로그인 되어있는 회원의 정보를
사용자에게 입력받은 pw, 전화번호, 집주소로 변경해주어야 한다 (E-mail은 변경하지 않음!)
DAO를 통해 DB에 접근하여 바꿔주면 된다 ]

 // DAO Class에서 회원정보 수정하는 update 만들기 
	public int update(MemberDTO dto) {
          
		int cnt = 0;
		dbOpen();

		String sql = "UPDATE MEMBER SET PW = ?, PHONE = ?, ADDR = ? WHERE EMAIL = ?";
		try {
			psmt = conn.prepareStatement(sql); 
			psmt.setString(1, dto.getPw());
			psmt.setString(2, dto.getPhone());
			psmt.setString(3, dto.getAddr());
			psmt.setString(4, dto.getEmail());
			cnt = psmt.executeUpdate(); 
			
		} catch (SQLException e) { 
			e.printStackTrace();
		} finally {
			dbClose();
		}
		return cnt;		
	}
}
          
          

[ 회원정보 수정 ] 후 메인 화면으로 가게 만들기

// java 
@WebServlet("/UpdateService")
public class UpdateService extends HttpServlet { 
	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		 
		HttpSession session = request.getSession();		
		MemberDTO info = (MemberDTO)session.getAttribute("info");
		
		request.setCharacterEncoding("EUC-KR");
		String email = info.getEmail();
		String pw = request.getParameter("pw");
		String phone = request.getParameter("phone");
		String addr = request.getParameter("addr");
		 
		// 회원정보 수정시키기
		MemberDTO dto = new MemberDTO(email, pw, phone, addr);
		MemberDAO dao = new MemberDAO();
		
		int cnt = dao.update(dto);
		if (cnt > 0) {
			System.out.println("회원정보 수정 성공");
          	// dao.update 실행시 DB에 저장되어 있는 회원정보는 수정이 되는데
            // session의 info는 처음 로그인시 가져온 값으로 설정되어 있다.
          	// 그래서! info의 값을 수정한 값(dto)으로 변경해주어야 함!!
			session.setAttribute("info", dto);			
		} else {
			System.out.println("회원정보 수정 실패");
		} 
        // 다 실행하고 메인화면으로 돌아가게 만듦
		response.sendRedirect("main.jsp");
	}

}
profile
Hello, World!

0개의 댓글