JSP_4강_3에 이어서 상세정보 페이지의 회원을 수정하고 삭제하는 코드를 만들어보자

member_content.jsp에 미리 선언해둔

회원 전체의 값을 수정화면에 그대로 출력해줘야 하기 때문에 이전에 만들어둔 contentList 메서드를 호출해야함!
=============================코드=============================
package com.member.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.member.model.MemberDAO;
import com.member.model.MemberDTO;
@WebServlet("/update.go")
public class UpdateServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public UpdateServlet() {
super();
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int member_no = Integer.parseInt(request.getParameter("no"));
MemberDAO dao = MemberDAO.getInstance();
// MemberDAO 클래스에 있는 contentList() 메서드 호출하자!
MemberDTO update = dao.contentList(member_no);
request.setAttribute("Update", update);
RequestDispatcher rd = request.getRequestDispatcher("view/member_modify.jsp");
rd.forward(request, response);
}
MemberDAO에 있는 contentList 메서드는 아래와 같음
=============================코드=============================
public MemberDTO contentList(int num) {
MemberDTO dto = null;
// 1 ~ 2단계 : 오라클 드라이버 메모리로 로딩 및 DB 연결 작업 진행
openConn();
try {
// 3단계 : DB에 전송할 SQL문을 작성
sql = "select * from member where memno = ?";
// 4단계 : SQL문을 DB 전송객체에 인자로 전달
pstmt = con.prepareStatement(sql);
// 4-1단계 : 플레이스 홀더(?)에 데이터를 배정
pstmt.setInt(1, num);
// 5단계 : SQL문을 DB에 전송 및 실행
rs = pstmt.executeQuery();
if(rs.next()) {
dto = new MemberDTO();
dto.setNum(rs.getInt("memno"));
dto.setMemid(rs.getString("memid"));
dto.setMemname(rs.getString("memname"));
dto.setPwd(rs.getString("mempwd"));
dto.setAge(rs.getInt("age"));
dto.setMileage(rs.getInt("mileage"));
dto.setJob(rs.getString("job"));
dto.setAddr(rs.getString("addr"));
dto.setRegdate(rs.getString("regdate").substring(0,10));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 6단계 : DB에 연결되어 있던 자원을 종료하기
closeConn(rs, pstmt, con);
}
return dto;
}
update.go 서블릿 내의 코드에 작성한

수정 화면 jsp를 만들자
=============================코드=============================
<%@page import="com.member.model.MemberDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
MemberDTO up = (MemberDTO)request.getAttribute("Update");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<hr width="30%" color="skyblue">
<h3><%=up.getMemname() %> 회원님의 상세정보</h3>
<hr width="30%" color="skyblue">
<br><br>
<form method="post" action="<%=request.getContextPath() %>/update_ok">
<table border="1" cellspacing="0" width="350">
<%
if(up == null){
%>
<tr>
<td colspan="2" align="center">
<h3>조회된 회원의 정보가 없습니다.</h3>
</td>
</tr>
<% } %>
<tr>
<th>회원 NO.</th>
<td>
<input type = "text" name = num value = "<%=up.getNum() %>">
</td>
</tr>
<tr>
<th>회원 이름</th>
<td>
<input type = "text" name = name value = "<%=up.getMemname() %>">
</td>
</tr>
<tr>
<th>회원 아이디</th>
<td>
<input type = "text" name = id value = "<%=up.getMemid() %>">
</td>
</tr>
<tr>
<th>회원 비밀번호</th>
<td>
<input type = "text" name = pwd value = "<%=up.getPwd() %>">
</td>
</tr>
<tr>
<th>회원 나이</th>
<td>
<input type = "text" name = age value = "<%=up.getAge() %>">
</td>
</tr>
<tr>
<th>보유 마일리지</th>
<td>
<input type = "text" name = mileage value = "<%=up.getMileage() %>">
</td>
</tr>
<tr>
<th>회원 직업</th>
<td>
<input type = "text" name = job value = "<%=up.getJob() %>">
</td>
</tr>
<tr>
<th>회원 주소</th>
<td>
<input type = "text" name = addr value = "<%=up.getAddr() %>">
</td>
</tr>
<tr>
<th>가입일자</th>
<td>
<input type = "text" name = regdate readonly value = "<%=up.getRegdate() %>">
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="사원수정">
<input type="reset" value="다시작성">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
회원 수정을 클릭했을 때 전체 리스트에 저장이 되어 화면에 보여질
=============================코드=============================
package com.member.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.member.model.MemberDAO;
import com.member.model.MemberDTO;
@WebServlet("/update_ok")
public class UpdateOkServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public UpdateOkServlet() {
super();
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset = UTF-8");
int mem_num = Integer.parseInt(request.getParameter("num"));
String mem_name = request.getParameter("name");
String mem_id = request.getParameter("id");
String mem_pwd = request.getParameter("pwd");
int mem_age = Integer.parseInt(request.getParameter("age"));
int mem_mileage = Integer.parseInt(request.getParameter("mileage"));
String mem_job = request.getParameter("job");
String mem_addr = request.getParameter("addr");
MemberDTO dto = new MemberDTO();
dto.setNum(mem_num);
dto.setMemname(mem_name);
dto.setMemid(mem_id);
dto.setPwd(mem_pwd);
dto.setAge(mem_age);
dto.setMileage(mem_mileage);
dto.setJob(mem_job);
dto.setAddr(mem_addr);
MemberDAO dao = MemberDAO.getInstance();
int check = dao.updateList(dto);
PrintWriter out = response.getWriter();
if(check > 0) {
out.println("<script>");
out.println("alert('사원 정보 수정 성공!!')");
out.println("location.href='content.go?num=" + dto.getNum() + "'");
out.println("</script>");
}else {
out.println("<script>");
out.println("alert('사원 정보 수정 실패...')");
out.println("history.back()");
out.println("</script>");
}
}
}
이제 main.jsp 에서 실행해보자!

회원 수정 클릭!

사원수정 클릭!

확인 클릭

수정이 된 것을 확인할 수 있다!
이제 회원 삭제가 될 수 있도록 만들어보자
=============================코드=============================
package com.member.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.member.model.MemberDAO;
@WebServlet("/delete.go")
public class DeleteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public DeleteServlet() {
super();
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// get 방식으로 넘어온 회원번호에 해당하는 회원을 member 테이블에서 삭제하는 비지니스 로직
response.setContentType("text/html; charset = UTF-8");
int member_no = Integer.parseInt(request.getParameter("num"));
MemberDAO dao = MemberDAO.getInstance();
dao.deleteMember(member_no);
MemberDAO에서
=============================코드=============================
// 회원번호에 해당하는 회원을 member 테이블에서 삭제하는 메서드
public int deleteMember(int no) {
int result = 0;
try {
// 1 ~ 2단계 : 오라클 드라이버 로딩 및 DB 연결 작업 진행
openConn();
// 3단계 : DB에 전송할 SQL문 작성
sql = "delete from member where memno = ?";
// 4단계 : SQL문을 DB 전송 객체의 인자로 전달
pstmt = con.prepareStatement(sql);
// 4-1단계 : 플레이스 홀더(?)에 데이터를 배정
pstmt.setInt(1, no);
// 5단계 : SQL문을 DB에 전송 및 실행
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 6단계 : DB에 연결되어 있는 자원 종료
closeConn(pstmt, con);
}
return result;
}
다시 서블릿으로 돌아가자
=============================코드=============================
package com.member.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.member.model.MemberDAO;
@WebServlet("/delete.go")
public class DeleteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public DeleteServlet() {
super();
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// get 방식으로 넘어온 회원번호에 해당하는 회원을 member 테이블에서 삭제하는 비지니스 로직
response.setContentType("text/html; charset = UTF-8");
int member_no = Integer.parseInt(request.getParameter("num"));
MemberDAO dao = MemberDAO.getInstance();
// -------------------여기서부터 작성-------------------
int check = dao.deleteMember(member_no);
PrintWriter out = response.getWriter();
if(check > 0) {
//updateSequence 메서드를 또 만들어줘야 함!
dao.updateSequence(member_no);
out.println("<script>");
out.println("alert('회원 삭제 성공!!')");
out.println("location.href = 'select.go'");
out.println("</script>");
}else {
out.println("<script>");
out.println("alert('회원 삭제 실패..')");
out.println("location.href = 'select.go'");
out.println("</script>");
}
}
}
값이 사라질 시 사라진 번호의 다음 번호 수가 하나씩 감소할 수 있게(번호 정렬)
=============================코드=============================
// 회원 번호 순번 작업 해주는 메서드
public void updateSequence(int no) {
try {
// 1 ~ 2단계 : 오라클 드라이버 로딩 및 DB 연결 작업 진행
openConn();
// 3단계 : DB에 전송할 SQL문 작성
sql = "update member set memno = memno - 1 where memno > ?";
// 4단계 : SQL문을 DB 전송 객체의 인자로 전달
pstmt = con.prepareStatement(sql);
// 4-1단계 : 플레이스 홀더(?)에 데이터를 배정
pstmt.setInt(1, no);
// 5단계 : SQL문을 DB에 전송 및 실행
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeConn(pstmt, con);
}
}
main.jsp 에서 실행해보자!

회원 삭제 클릭!

확인 클릭

확인

전체회원 목록 리스트에 값이 삭제가 되고 회원No가 순서대로 나열된 것을 확인할 수 있음