목차
1. 로그아웃
2. 회원 정보 수정(Update)
3. 회원 탈퇴(Delete)
1. 로그아웃
1) 뷰 페이지(main.jsp)
- 코어 라이브러리 태그 중 <c:if> 태그를 이용하여 세션이 있는 경우와 없는 경우로 나누어서 처리한다.
- 세션이 있는 경우, ‘회원 정보 수정’, ‘로그아웃’, ‘회원 탈퇴’ 버튼이 보이도록 한다.
- 세션이 없는 경우, ‘회원가입’, ‘로그인’ 버튼이 보이도록 한다.
- /Logout.do 로 컨트롤러를 호출한다.
- main.jsp → MemberController.java
• 세션이 있는 경우
- 로그인 서비스 클래스(Login.java)에서 session.setAttribute("id", id); 로 공유한 값을 EL 기본객체인 sessionScope 로 받는다.
• 세션이 없는 경우
- sessionScope.id 가 null 인 경우, 즉 로그인이 되지
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- 세션이 있는 경우 -->
<c:if test="${sessionScope.id != null }">
${sessionScope.id}님 환영합니다. <br><br>
<a href="./UpdateMember.do"> 회원 정보 수정 </a> <br><br>
<a href="./Logout.do"> 로그아웃 </a> <br><br>
<a href="./DeleteMember.do"> 회원 탈퇴 </a> <br><br>
</c:if>
<!-- 세션이 없는 경우 -->
<c:if test="${sessionScope.id == null }">
<a href="<%=request.getContextPath()%>/MemberForm.do">회원가입</a> <br><br>
<a href="<%=request.getContextPath()%>/LoginForm.do">로그인</a> <br><br>
</c:if>
|
cs |
2) 컨트롤러 클래스(MemberController.java)
- 서비스 클래스의 요청을 받아 처리한다.
- forward 객체를 생성해서 전송 방식과 이동할 페이지 경로를 설정한다.
- MemberController.java → logout.jsp
1
2
3
4
5
6
|
// 로그아웃
}else if(command.equals("/Logout.do")) {
forward = new ActionForward();
forward.setRedirect(false);
forward.setPath("/member/logout.jsp");
|
cs |
3) 뷰 페이지(logout.jsp / loginform.jsp)
① 로그아웃 처리 페이지
- 세션 삭제하기 <% session.invalidate(); %>
- alert() 메소드로 로그아웃이 되었다는 알람창 띄우고, LoginForm.do 로 컨트롤러 호출
- logout.jsp → MemberController.java
② 로그아웃 후 이동 페이지
- 컨트롤러에서 요청을 받아 로그인 페이지로 이동
- MemberController.java → loginform.jsp
2. 회원정보 수정(Update)
1) 뷰 페이지(main.jsp)
- 뷰 페이지인 main.jsp에서 "./UpdateMember.do" 로 컨트롤러를 호출한다.
- main.jsp → MemberController.java
2) 컨트롤러 클래스(MemberController.java)
- 서비스 클래스인 UpdateMember 클래스의 객체를 생성하고, execute() 메소드를 호출한다.
- 메소드 호출 후 ActionForward 클래스 타입으로 반환하게 되고, 포워딩 처리 코드에서 포워딩을 실행한다.
- MemberController.java → UpdateMember.java
1
2
3
4
5
6
7
8
9
|
// 회원정보 수정 폼
}else if(command.equals("/UpdateMember.do")) {
try {
action = new UpdateMember();
forward = action.execute(request, response);
}catch(Exception e) {
e.printStackTrace();
}
|
cs |
3) 서비스 클래스(UpdateMember.java)
- 부모 인터페이스인 Action을 상속받는다.
- 로그인 시 공유된 session 값을 getAttribute() 메소드로 구해온다. 이때, session 객체는 자바에서 내장 객체가 아니므로 request 객체로 session 객체를 먼저 생성해야 한다. 또, 구해오는 값에 맞추어 다운캐스팅을 해야 한다.
(ex. HttpSession session = request.getSession();
String id = (String)session.getAttribute("id");
- DAO 객체를 생성하고 회원 정보를 구해오는 메소드로 한 명의 회원 정보를 구해오고, DTO 클래스 타입으로 돌려받는다.
- 이때, 취미는 회원가입을 할 때 “공부-게임-등산-“과 같은 형태로 저장을 시켰으므로 split() 메소드를 이용해서 “-“를 기준으로 나누고, 배열로 저장한다.
- 구해온 정보를 request 객체로 공유한다.
(ex. request.setAttribute("member", member);
request.setAttribute("h", h); )
- ActionForward 객체를 생성하고 전송 방식과 경로를 설정한 후 리턴한다.
- request 객체로 공유한 값을 포워딩된 페이지에서 사용하기 위해서는 전송 방식이 dispatcher 방식으로 설정되어야 한다.
- UpdateMember.java → MemberController.java → updateform.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package service;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import dao.MemberDAO;
import model.MemberDTO;
public class UpdateMember implements Action {
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
System.out.println("UpdateMember");
request.setCharacterEncoding("utf-8");
HttpSession session = request.getSession();
String id = (String)session.getAttribute("id");
MemberDAO dao = MemberDAO.getInstance(); // DB 연동을 위해 DAO 객체 생성
MemberDTO member = dao.getMember(id); // 한 명의 상세정보를 구하는 메소드 호출
System.out.println("수정폼:"+member); // DTO 객체 주소 값
String hobby = member.getHobby(); // "공부-게임-등산-"
String[] h = hobby.split("-"); // h[0]="공부", h[1]="게임", h[2]="등산"
// 공유 설정
request.setAttribute("member", member);
request.setAttribute("h", h);
ActionForward forward = new ActionForward();
// request 객체로 공유가 된 경우에는 dispatcher 방식으로 포워딩 해야
// view 페이지에서 공유한 값을 사용할 수 있다.
forward.setRedirect(false); // dispatcher 방식으로 포워딩
forward.setPath("/member/updateform.jsp");
return forward;
}
}
|
cs |
4) 뷰 페이지(updateform.jsp)
- 서비스 클래스(UpdateMember.java)에서 request 객체로 공유한 값을 EL 태그로 가져온다.
(ex. ${member.id} )
- 공유받은 DTO 객체로 각 입력 양식의 value 값을 보여준다. (ex. value="${member.name} )
- <select> 태그, radio 속성으로 선택된 값은 JSTL 코어 라이브러리 태그인 <c:if> 태그로 구해온다.
- checkbox 속성으로 선택된 취미 값은 제이쿼리를 이용해서 구해온다.
- hidden 속성으로 아이디(id) 값을 전달하고, 그 외 사용자가 입력하는 값을 전달한다.
- “/Update.do” 로 컨트롤러를 호출한다.
- updateform.jsp → MemberController.java
5) 컨트롤러 클래스(MemberController.java)
- 서비스 클래스인 Update 클래스의 객체를 생성하고, execute() 메소드를 호출한다.
- 메소드 호출 후 ActionForward 클래스 타입으로 반환하게 되고, 포워딩 처리 코드에서 포워딩을 실행한다.
- MemberController.java → Update.java
1
2
3
4
5
6
7
8
|
// 회원정보 수정
}else if(command.equals("/Update.do")) {
try {
action = new Update();
forward = action.execute(request, response);
}catch(Exception e) {
e.printStackTrace();
}
|
cs |
6) 서비스 클래스(Update.java)
- 부모 인터페이스인 Action을 상속받는다.
- DTO 객체를 생성하고 수정 폼(updateform.jsp)에서 입력한 값을 request.getParameter()로 가져와서 DTO 객체에 저장한다.
- DAO 객체로 회원 정보를 가져온 후, DB에 저장된 비밀번호와 수정 폼에서 사용자가 입력한 비밀번호를 비교해서 일치하면 정보를 수정한다.
- ActionForward 객체를 생성하고 전송 방식과 경로를 설정한 후 리턴한다.
- Update.java → MemberController.java → main.jsp
3. 회원 탈퇴(Delete)
1) 뷰 페이지(main.jsp)
- 뷰 페이지인 main.jsp에서 "./DeleteMember.do" 로 컨트롤러를 호출한다.
- main.jsp → MemberController.java
2) 컨트롤러 클래스(MemberController.java)
- forward 객체를 생성해서 전송 방식과 이동할 페이지 경로를 설정한다.
- MemberController.java → deleteform.jsp
3) 뷰 페이지(updateform.jsp)
- 로그인 시 공유된 session 값을 EL 태그의 내장 객체인 sessionScope로 가져오고, hidden 속성으로 전달한다.
(ex. value="${sessionScope.id} )
- “/Delete.do” 로 컨트롤러를 호출한다.
4) 컨트롤러 클래스(MemberController.java)
- 서비스 클래스인 Delete 클래스의 객체를 생성하고, execute() 메소드를 호출한다.
- 메소드 호출 후 ActionForward 클래스 타입으로 반환하게 되고, 포워딩 처리 코드에서 포워딩을 실행한다.
- MemberController.java → Delete.java
5) 서비스 클래스(Delete.java)
- 부모 인터페이스인 Action을 상속받는다.
- 삭제 폼(deleteform.jsp)에서 전달한 id와 passwd 값을 request.getParameter()로 받는다.
- DAO 객체로 회원 정보를 가져온 후, DB에 저장된 비밀번호와 수정 폼에서 사용자가 입력한 비밀번호를 비교해서 일치하면 정보를 삭제한다.
- 회원 정보가 삭제되면, 세션도 삭제한다.
- ActionForward 객체를 생성하고 전송 방식과 경로를 설정한 후 리턴한다.
- Delete.java → MemberController.java → loginform.jsp
'JSP' 카테고리의 다른 글
74일차: Model 2 게시판(2): 글 목록 / 상세 페이지_ 2021.09.30 (0) | 2021.09.30 |
---|---|
73일차: Model 2 게시판(1): 글 작성 / 글 목록_ 2021.09.29 (0) | 2021.09.29 |
71일차: Model 2 회원 관리(2)_ 2021.09.27 (0) | 2021.09.27 |
70일차: Model 2 회원 관리(1)_ 2021.09.24 (0) | 2021.09.24 |
69일차: JSTL 태그 종류/Model 2 회원관리_ 2021.09.23 (0) | 2021.09.23 |