회원정보변경
마이페이지에서 로그인한 유저가 입력한 정보대로
DB를 업데이트 해보자
![]() |
<< 이전포스팅에서 완료된 요청 | 이번포스팅에서 구현할 요청 >>
| 기능 | url요청 | 요청시 전달값 | 응답페이지 또는 url재요청 | |
| /web | index.jsp | |||
| 로그인요청 | /login.me | userId=?&userPwd=? | 실패시 | views/common/errorPage.jsp |
| 성공시 | /web url재요청=> index.jsp | |||
| 로그아웃요청 | /logout.me | /web url재요청=> index.jsp | ||
| 회원가입페이지 | /enrollForm.me | views/member/memberEnrollForm.jsp | ||
| 회원가입요청 | /insert.me | userId=? ... 등 | 실패시 | views/common/errorPage.jsp |
| 성공시 | /web url재요청 => index.jsp | |||
| 마이페이지요청 | /myPage.me | 로그인전 | /web url재요청 => index.jsp | |
| 로그인후 | views.member/myPage.jsp | |||
| 정보변경요청 |
/update.me |
userId=? ... 등 | 실패시 | view/common/errorPage.jsp |
| 성공시 | /myPage.me url재요청 |
회원정보변경
STEP1) myPage.jsp (수정)
- form태그 action값에 수정처리할 서블릿의 매핑값을 입력한다.
- 업데이트 성공 후, 마이페이지를 재요청할 것인데 session에 담겨있는 멤버객체는 변경 전의 멤버객체이다.
때문에 session을 갱신해야 한다는 것을 기억한다.
<form action="<%=contextPath%>/update.me" method="post">
.....
STEP2) MemberUpdateController.java
- 생성위치 : com.br.member.controller
서블릿/매핑값 update.me - post방식이고, 한글이 포함되어 있기 때문에 전달 전에 인코딩을 해야한다.
- 체크박스는 복수선택 가능하여 request.getParameterValues() 함수 사용해서 배열로 가져온다.
해당 값은 null여부 확인후 하나의 문자열로 가공처리한다.(db 기록용)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1) 요청시 전달값 뽑기
request.setCharacterEncoding("UTF-8");
String userId = request.getParameter("userId");
String userName = request.getParameter("userName");
String[] interestArr = request.getParameterValues("interest");
//배열로 반환된 데이터 가공처리
String interest = "";
if(interestArr != null) {
interest = String.join(", ", interestArr);
}
Member m = new Member(userId, userName, interest);
// 2) 요청처리
// 업데이트가 성공한 후 다시 셀렉문 실행해서 조회해올 것이므로
// int result가 아닌 Member로 받는다.
Member updateMem = new MemberService().updateMember(m);
// 3) 요청처리 결과를 가지고 사용자가 보게 될 뷰 지정
if(updateMem == null) { //실패
//에러문구 담아서 에러페이지 포워딩
request.setAttribute("errorMsg", "회원정보 등록에 실패했습니다.");
request.getRequestDispatcher("views/common/errorPage.jsp").forward(request, response);;
}else { //성공
// 알람띄우기
HttpSession session = request.getSession();
session.setAttribute("alertMsg", "성공적으로 회원정보를 수정했습니다.");
// 변경된 회원정보를 반영시키기. 다시 담으면 덮어쓰기가 됨.
session.setAttribute("loginUser", updateMem);
// 응답페이지(views/member/myPage.jsp) 요청하기
// 기능구현 표를 보면 해당 페이지를 응답하는 url존재 : /mypage.me
response.sendRedirect(request.getContextPath()+"/myPage.me");
}
}
STEP3) member-mapper.xml (수정)
- Dao에서 사용할 sql문을 2가지를 작성한다
- 1) Member테이블 업데이트
- 2) 업데이트 된 회원 정보 조회하기
<entry key="updateMember">
UPDATE MEMBER
SET USER_NAME = ?
, INTEREST = ?
, MODIFY_DATE = SYSDATE
WHERE USER_ID = ?
</entry>
<entry key="selectMember">
SELECT
USER_NO
, USER_ID
, USER_PWD
.....
FROM MEMBER
WHERE USER_ID = ?
AND STATUS = 'Y'
</entry>
STEP4) MemberService.java (수정)
- updateMember(Member m) 메소드 생성
- 하나의 서비스안에 여러개의 sql문을 실행하게 된다.
public Member updateMember(Member m) {
Connection conn = getConnection();
//업데이트 먼저 실행
int result = new MemberDao().updateMember(conn, m);
Member updateMem = null;
if(result>0) {
commit(conn);
//업데이트 성공 후 갱신된 회원 객체 다시 조회해오기
//==> 세션에 담긴 회원객체를 갱신시켜야되기 때문
//회원을 조회하는 메소드가 있긴 하나(로그인에 사용했던 loginMember)
//비밀번호를 모르기때문에 재사용 불가.
updateMem = new MemberDao().selectMember(conn, m.getUserId());
}else {
rollback(conn);
}
close(conn);
return updateMem;
}
STEP5) MemberDao.java (수정)
- updateMember(conn, m) 메소드 생성
- selectMember(conn, userId) 메소드 생성
public int updateMember(Connection conn, Member m) {
int result=0;
PreparedStatement pstmt = null;
String sql = prop.getProperty("updateMember");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, m.getUserName());
pstmt.setString(2, m.getInterest());
pstmt.setString(3, m.getUserId());
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
close(pstmt);
}
return result;
}
public Member selectMember(Connection conn, String userId) {
Member m = null;
PreparedStatement pstmt = null;
ResultSet rset = null;
String sql = prop.getProperty("selectMember");
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userId);
rset = pstmt.executeQuery();
//조회 됐는지 여부 확인후 정보옮기기
if(rset.next()) {
m = new Member(rset.getInt("USER_NO"),
rset.getString("user_id"),
.....);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(rset);
close(pstmt);
}
return m;
}

'다양한 기술들 > 레거시 Web 실습' 카테고리의 다른 글
| [06] 게시판기초 : 일반목록, 글쓰기(+권한) (0) | 2023.01.09 |
|---|---|
| [05] 모달을 사용한 비밀번호변경 (0) | 2023.01.06 |
| [03] 마이페이지 (0) | 2023.01.05 |
| [02] 회원가입 기능 (0) | 2023.01.05 |
| [01] 메뉴바와 로그인 (0) | 2023.01.04 |

댓글