21.02.16
[会員収入]
[MemberController]
//MemberController Switch문에 case 추가
case "/join":
System.out.println("회원가입요청");
msg="회원가입에 실패 했습니다.";
page="joinForm.jsp";
if(service.join()) {//성공
msg="회원가입을 축하드립니다.";
page="index.jsp";
}
req.setAttribute("msg", msg);
dis = req.getRequestDispatcher(page);
dis.forward(req, resp);
break;
[MemberService]
//MemberService join() 추가
public boolean join() {
//파라메터 값이 잘 들어오는가?
String id = req.getParameter("userId");
String pw = req.getParameter("userPw");
String name = req.getParameter("userName");
String age = req.getParameter("age");
String gender = req.getParameter("gender");
String email = req.getParameter("email");
System.out.println(id+"/"+pw+"/"+name+"/"+age+"/"+gender+"/"+email);
MemberDAO dao = new MemberDAO();//DB사용?
MemberDTO dto = new MemberDTO();
dto.setId(id);
dto.setPw(pw);
dto.setName(name);
dto.setAge(Integer.parseInt(age));
dto.setGender(gender);
dto.setEmail(email);
int success = dao.join(dto); //인자값이 많으니까 한번에 담아서 보낸다.
if(success>0) {
return true;
}else {
return false;
}
}
public int join(MemberDTO dto) {
String sql="INSERT INTO member(id,pw,name,age,gender,email)VALUES(?,?,?,?,?,?)";
int success = -1;
try {
ps = conn.prepareStatement(sql);
ps.setString(1, dto.getId());
ps.setString(2, dto.getPw());
ps.setString(3, dto.getName());
ps.setInt(4, dto.getAge());
ps.setString(5, dto.getGender());
ps.setString(6, dto.getEmail());
success = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return success;
}
1. controller에서 service.join()을 호출하여 해당 값에 따라 회원가입 성공과 실패를 따진다.
2. service.join()에서는 먼저 joinForm.jsp에서 보낸 파라메터 값을 가져온다.
3. 가져온 파라메터 값을 MemberDTO를 객체화 시켜 dto에 값을 넣어준다.
4. DB사용을 해야하므로 MemberDAO를 객체화 시켜 dao.join()을 호출하는데 dto를 인자값으로 넣어준다.
5. dao.join()에서는 INSERT 쿼리문을 통해 dto에 담긴 값을 ?에 대응시켜준다.
6. 쿼리를 실행한뒤 return 값에 담는다.
7. return값은 service.join()의 return값이 되므로 최종적으로 정상적으로 처리됐다면 controller에서
sevice.join()이 true가 되므로 해당 메세지를 담아 index.jsp로 이동하게 된다.
8. 실패시 해당 메세지를 담아 joinForm.jsp로 이동하게 된다.
[会員の削除]
[MemberController]
//MemberController Switch문에 case 추가
case "/memberDel":
msg="회원삭제에 실패했습니다.";
page="main";
if(service.memberDel()>0) { //성공
msg="회원삭제에 성공했습니다.";
}
req.setAttribute("msg", msg);
dis = req.getRequestDispatcher(page);
dis.forward(req, resp);
break;
[MemberService]
//MemberService memberDel() 추가
public int memberDel() {
String id = req.getParameter("id");
System.out.println("삭제할 아이디 :"+ id);
MemberDAO dao = new MemberDAO();
return dao.memberDel(id);
}
[MemberDAO]
//MemberDAO memberDel()추가
public int memberDel(String id) {
String sql = "DELETE FROM member WHERE id=?";
int success = -1;
try {
ps = conn.prepareStatement(sql);
ps.setString(1, id);
success = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return success;
}
1. controller에서 service.memberDel()을 호출하여 해당 값에 따라 삭제 성공과 실패를 따진다.
2. service.memberDel()에서는 main.jsp에서 보낸 파라메터값(id)을 받는다.
3. 해당 id를 dao.memberDel()에 인자값으로 넣어 dao.memberDel()를 실행한다.
4. dao.memberDel()에서는 DELETE 쿼리문에 매개변수로 넣은 id를 ?에 대응 시켜준다.
5. 쿼리를 실행한뒤 return값에 담는다.
6. return값은 service.memberDel에 return값이 되므로 정상적으로 삭제가 되었다면 해당 메세지를
담아 main으로 보낸다.
7. 실패하였다면 해당메세지를 담아 main으로 보낸다.
[詳細を表示]
[MemberController]
//MemberController Switch문에 case 추가
case "/detail":
System.out.println("상세보기 요청");
MemberDTO dto = service.detail();
System.out.println(dto);
msg="상세정보 불러오기에 실패했습니다.";
page="main";
if(dto!=null) {
msg="";
page="detail.jsp";
req.setAttribute("info",dto);
}
req.setAttribute("msg", msg);
dis = req.getRequestDispatcher(page);
dis.forward(req, resp);
break;
[MemberService]
//MemberService에 detail()추가
public MemberDTO detail() {
String id = req.getParameter("id");
System.out.println("상세보기 할 아이디 : "+id);
if(id==null) {
id = (String) req.getAttribute("id");
}
MemberDAO dao = new MemberDAO();
return dao.detail(id);
}
[MemberDTO]
//MemberDTO에 detail()추가
public MemberDTO detail(String id) {
String sql = "SELECT * FROM member WHERE id=?";
MemberDTO dto = null;
try {
ps = conn.prepareStatement(sql);
ps.setString(1, id);
rs = ps.executeQuery();
if(rs.next()) {
dto = new MemberDTO();
dto.setId(rs.getString("id"));
dto.setPw(rs.getString("pw"));
dto.setName(rs.getString("name"));
dto.setAge(rs.getInt("age"));
dto.setGender(rs.getString("gender"));
dto.setEmail(rs.getString("email"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
ps.close();
rs.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return dto;
}
1. controller에서 service.detail()의 값에 따라 성공과 실패를 따진다.
2. service.detail()에서는 main.jsp에서 보낸 파라메터 값(id)을 받는다.
3. 그 id를 dao.detail()에 매개변수로 넣어 실행한다.
4. dao.detail()에서는 SELECT 쿼리문에 매개변수로 받은 id를 ?에 대응시켜 쿼리를 실행한다.
5. SELECT이기때문에 ResultSet값으로 반환하게 되고 받아온 값을 dto에 담고 return값으로 dto를
넣어준다.
6. return값은 controller의 service.detail()의 값이 되므로 return값으로 받은 dto를 dto에
넣어준다.
7. dto가 null이 아니라면 "info"라는 이름으로 dto를 담아 detail.jsp로 이동시킨다.
8. 실패 시 메세지를 담아 main으로 이동시킨다.
9. detail.jsp에서는 값을 받아 상세정보가 보여지게 되고 수정도 가능하게 한다.
[会員情報の変更]
[MemberController]
//MemberController Switch문에 case 추가
case "/update":
System.out.println("업데이트 요청");
msg="수정에 실패 했습니다.";
page="detail";
req.setAttribute("id", req.getParameter("userId"));
//if(service.update()==0) { 실패테스트를 위해서 코드변경 2021-02-16 이민주
if(service.update()>0) {//성공
msg="수정에 성공하였습니다.";
page="main";
};
req.setAttribute("msg", msg);
dis = req.getRequestDispatcher(page);
dis.forward(req, resp);
break;
[MemberService]
//MemberServic에 update()추가
public int update() {
String id = req.getParameter("userId");
String pw = req.getParameter("userPw");
String name = req.getParameter("userName");
String age = req.getParameter("age");
String gender = req.getParameter("gender");
String email = req.getParameter("email");
System.out.println(id+"/"+pw+"/"+name+"/"+age+"/"+gender+"/"+email);
MemberDAO dao = new MemberDAO();
MemberDTO dto = new MemberDTO();
dto.setId(id);
dto.setPw(pw);
dto.setName(name);
dto.setAge(Integer.parseInt(age));
dto.setGender(gender);
dto.setEmail(email);
return dao.update(dto);
}
[MemberDAO]
//MemberDAO에 update() 추가
public int update(MemberDTO dto) {
String sql="UPDATE member SET pw=?, name=?, age=?, gender=?, email=? WHERE id=?";
int success = -1;
try {
ps = conn.prepareStatement(sql);
ps.setString(6, dto.getId());
ps.setString(1, dto.getPw());
ps.setString(2, dto.getName());
ps.setInt(3, dto.getAge());
ps.setString(4, dto.getGender());
ps.setString(5, dto.getEmail());
success = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return success;
}
1. controller에서 service.update()값에 따라 성공과 실패를 따진다.
2. service.update()에서는 detail.jsp에서 보낸 파라메터 값을 받는다.
3. 받아온 파라메터 값을 dto에 담아 dao.update(dto)를 호출한다.
4. dao.update(dto)에서는 UPDATE 쿼리문 ?에 받아온 dto의 값들을 넣어준다.
5. 실행시킨뒤 return값에 넣어준다.
6. return값은 service.update()의 return값이 되므로 성공하면 메세지를 담아 main으로 보낸다.
7. 실패시 detail.jsp에서 userId로 보낸 파라메터 값을 "id"라는 이름으로 담아 detail로 보낸다.
8. 그래서 MemberService에 detail()을 보면 파라메터를 "id"로 받게 되어 있는데 이상황에서는
파라메터로 보낸게 아니므로 id가 null이 된다.
9. id가 null인 경우에 getAttribute로 id값을 가져오고 해당 id로 MemberDTO.detail(id)를
실행시키게 되는 것이다.
Reference
この問題について(21.02.16), 我々は、より多くの情報をここで見つけました https://velog.io/@mingmang17/21.02.16テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol