
전에 회원가입, 로그인 기능 구현하였다.
같은 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");
}
}