User_mypage
마이페이지에 로그아웃 정보수정 회원탈퇴 기능 추가
<section>
<div align="center">
${sessionScope.user_id }
<b> (${sessionScope.user_name })</b>님 환영합니다
<div>
<a href="user_logout.user">[로그아웃]</a><br>
<a href="user_modify.user">[정보수정]</a><br>
<a href="user_delete.user">[회원탈퇴]</a>
</div>
</div>
</section>
로그아웃 클릭시
user_logout.user 로 이동하는걸 Controller에서 *.user 확장자를 인식해서 case로 보낸다.
현재Session을 불러와서 삭제하고 sendRedirect를 통해 메인페이지로 이동
case "/user/user_logout.user": //로그아웃
session = request.getSession();
session.invalidate(); //세션 무효화
response.sendRedirect(path + "/index.main"); //메인으로 이동
break;
정보수정 클릭시
회원데이터를 가지고 정보수정화면에 진입을 한다
case "/user/user_modify.user": //정보수정화면 진입
/*
* 회원데이터를 가지고 나오는 작업
* service와 dao에 getInfo() 메서드를 선언
* service에서는 세션에서 아이디를 얻는다
* dao에서는 id를 전달받아 회원데이터를 조회하여 vo에서 저장
* controller에서는 조회한 vo를 저장하고 화면으로 가져나감
* 화면에서는input태그에 값을 출력한다
*/
vo = service.getInfo(request, response);
//회원데이터를 가지고 나오는 작업
request.setAttribute("vo", vo);
request.getRequestDispatcher("user_modify.jsp").forward(request, response);
break;
UserServiceImpl 서비스에 request와 response를 들고 진입한다
회원정보를 불러오기위해 로그인할때 생성한 Session의 "user_id"를 불러오고
UserDAO에 불러온 Session의 "user_id"를 들고 들어간다
@Override
public UserVO getInfo(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
String id =(String) session.getAttribute("user_id");
UserDAO dao = UserDAO.getInstance();
UserVO vo = dao.getInfo(id);
return vo;
}
UserDAO에서는 가져온 session의 id를 토대로 sql문을 작성후
데이터베이스에서 가져온 데이터를 vo에 담아서 vo를 리턴한다.
public UserVO getInfo(String id) {
UserVO vo = null;
String sql="Select * from users where id = ?";
try {
conn=DriverManager.getConnection(URL, UID, UPW);
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, id);
rs=pstmt.executeQuery();
if(rs.next()) {
String id2 = rs.getString("id");
String pw2 = rs.getString("pw");
String name2 = rs.getString("name");
String email2 = rs.getString("email");
String gender2 = rs.getString("gender");
vo = new UserVO(id2, pw2, name2, email2, gender2);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtill.close(conn, pstmt, rs);
}
return vo;
}
UserDAO에서 가져온 vo는 UserServiceImpl의 vo 에 담기며 그걸 다시 Controller로 리턴시킨다.
컨트롤러에서는 가져온 vo를 request.setAttribute("vo", vo);를 사용해서 request에 담고
foward형식으로 user_modify페이지에 보낸다.
다시 user_modify.user 로 이동하는걸 Controller에서 *.user 확장자를 인식해서 case로 보낸다.
case "/user/updateForm.user": //정보 수정
/*
* 회원정보를 업데이트하는 작업
* service 와 dao에 update()메서드 생성
* service의 필요한 파라미터 값을 받음(pw name gender) 조건절 id
* dao에서는 데이터를 전달받아 update를 실행
* 업데이트 이후에는 컨트롤러를 통해 mypage로 리다이렉트
*/
result=service.update(request, response);
if(result==0) { //실패
request.setAttribute("msg", "양식에 맞춰 작성해주세요");
request.getRequestDispatcher("user_modify.user").forward(request, response);
}else {
//out 객체를 이용해서 화면에 스크립트를 작성해서 보냄
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<script>");
out.println("alert('정보가 수정되었습니다');");
out.println("location.href='user_mypage.user'");
out.println("</script>");
}
break;
받아온 request와 response는 UserServiceImpl의 update()메서드로 전송한다
UserServiceImpl의 update()메서드에선 입력받은 form에서 Parameter들을 가져온뒤 vo에 저장한다.
저장한 VO를 UserDAO의 update()메서드의 매개변수로 전송한다.
@Override
public int update(HttpServletRequest request, HttpServletResponse response) {
HttpSession session=request.getSession();
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String name = request.getParameter("name");
String gender = request.getParameter("gender");
UserDAO dao = UserDAO.getInstance();
UserVO vo = new UserVO(id,pw,name,null,gender);
int result = dao.update(vo);
if(result==1) {
session=request.getSession();
session.setAttribute("user_name", name);
}
return result; //0이면 실패 1이면 성공
}
받아온 vo를 UserDAO의 update()메서드의 sql문에 적용을 시킨다.
public int update(UserVO vo) {
int result = 0;
String sql = "update users set pw=?, name=?, gender=? where id=?";
try {
conn=DriverManager.getConnection(URL, UID, UPW);
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, vo.getPw());
pstmt.setString(2, vo.getName());
pstmt.setString(3, vo.getGender());
pstmt.setString(4, vo.getId());
result= pstmt.executeUpdate(); //0이면 실패 1이면 성공
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtill.close(conn, pstmt, rs);
}
return result;
}
pstmt.executeUpdate는 반환값이 int형이기 때문에 result라는 정수형 변수에 담아서 리턴해준다.
UserDAO 에서 반환하는 값은 UserServiceImpl의 Update()메서드로 들어가고
if(result==1) {
session=request.getSession();
session.setAttribute("user_name", name);
}
반환값이 1이라면 update구문이 성공적으로 돌았다는 뜻이다.
성공적으로 작동했다면 session을 불러오고, session에 저장되어있는 user_name을 변경된 user_name으로바꿔준다.
다시 UserServiceImpl의 Update()메서드에서 반환하는 값은 UserController의 updateForm.user케이스로 돌아간다.
if(result==0) { //실패
request.setAttribute("msg", "양식에 맞춰 작성해주세요");
request.getRequestDispatcher("user_modify.user").forward(request, response);
}else {
//out 객체를 이용해서 화면에 스크립트를 작성해서 보냄
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<script>");
out.println("alert('정보가 수정되었습니다');");
out.println("location.href='user_mypage.user'");
out.println("</script>");
}
실패한다면 양식에 맞춰 작성해달라는 알림창과 함께 user_modify.user로 보내진다.
성공한다면 out객체를 이용해서 만든 정보가 수정되었다는 알림창과 함께 user_mypage로 보내진다.
'jsp' 카테고리의 다른 글
MVC2패턴 게시판 목록 (board_list) (0) | 2022.12.07 |
---|---|
MVC2 패턴 예시 회원탈퇴 (0) | 2022.12.06 |
MVC2패턴 process & jsp 내장객체 메서드 (1) | 2022.12.06 |
MVC2패턴 게시판 만들기 (DAO & VO) (0) | 2022.12.06 |
MVC2패턴 게시판 만들기 (Controller & Interface & Service) (0) | 2022.12.06 |
댓글