-
6. 회원정보 등록, 삭제하기개발자 수업/JSP 2021. 11. 27. 21:26
1. 회원 가입창 작성 (html)
1) <hidden> 태그를 이용해 회원 가입창에서 새 회원 등록 요청을 서블릿에 전달함<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>회원 가입</title> <script type="text/javascript"> function fn_sendMember() { var frmMember = document.frmMember; var id = frmMember.id.value; var pwd = frmMember.pwd.value; var name = frmMember.name.value; var email = frmMember.email.value; //입력한 값들을 얻음 if(id.length == 0 || id=="") { alert("아이디는 필수입니다."); } else if(pwd.length == 0 || pwd=="") { alert("비밀번호는 필수입니다."); } else if(name.length == 0 || name=="") { alert("이름은 필수입니다."); } else if(email.length == 0 || email=="") { alert("이메일은 필수입니다."); } else { frmMember.method = "post"; //전송 방법을 post로 지정함 frmMember.action = "member3"; //서블릿 매핑 이름 지정 frmMember.submit(); //서블릿으로 전송함 } } </script> </head> <body> <form name="frmMember" action=""> <table> <th>회원 가입창</th> <tr> <td>아이디</td> <td><input type="text" name="id"></td> <!-- 입력한 ID를 서블릿으로 전송함 --> </tr> <tr> <td>비밀번호</td> <td><input type="password" name="pwd"></td> </tr> <tr> <td>이름</td> <td><input type="text" name="name"></td> </tr> <tr> <td>이메일</td> <td><input type="text" name="email"></td> </tr> </table> <input type="button" value="가입하기" onclick="fn_sendMember()"> <input type="reset" value="다시입력"> <input type="hidden" name="command" value="addMember"> </form> </body> </html>
2. Servlet 클래스 작성package kr.co.ezenac.member04; import java.io.IOException; import java.io.PrintWriter; import java.sql.Date; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/member3") //서블릿 매핑 이름 public class MemberServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doHandle(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doHandle(request, response); } private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); MemberDAO dao = new MemberDAO(); //SQL문으로 조회할 MemberDAO 객체를 생성함 String command = request.getParameter("command"); //command 값을 받아옴 if(command != null && command.equals("addMember")) { //회원 가입창에서 전송된 command가 addMember이면 전송된 값들을 받아옴 String _id = request.getParameter("id"); String _pwd = request.getParameter("pwd"); String _name = request.getParameter("name"); String _email = request.getParameter("email"); //회원 가입창에서 전송된 값들을 얻어와 MemberVO vo = new MemberVO(); //MemberVO객체에 저장한 후 vo.setId(_id); vo.setPwd(_pwd); vo.setName(_name); vo.setEmail(_email); dao.addMember(vo); //SQL문을 실행할 메서드에 전달함 //command 값이 delMember인 경우 ID를 가져와 SQL문 전달 } else if(command != null && command.equals("delMember")) { String id = request.getParameter("id"); dao.delMember(id); } List<MemberVO> list = dao.listMembers(); out.print("<html><body>"); out.print("<table border=1><tr align='center' bgcolor='lightgreen'>"); out.print("<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td><td>가입일</td><td>삭제</td></tr>"); for(int i=0; i<list.size(); i++) { MemberVO memberVO = list.get(i); //조회한 회원 정보를 for문 <tr>태그 이용해 출력함 String id = memberVO.getId(); String pwd = memberVO.getPwd(); String name = memberVO.getName(); String email = memberVO.getEmail(); Date joinDate = memberVO.getJoinDate(); out.print("<tr><td>" + id + "</td><td>" + pwd + "</td><td>" + name + "</td><td>" + email + "</td><td>" + joinDate + "</td><td>" //삭제 클릭하면 command 값과 회원 ID를 서블릿으로 전송함 + "<a href='/chap03_Servlet/member3?command=delMember&id="+id+" '>삭제</a></td></tr>"); } out.print("</table>"); out.print("<a href='/chap03_Servlet/memberForm.html'>새 회원 등록하기</a>"); out.print("</body></html>"); } }
3. DAO(Data Access Object, DB 관련 기능 보유)에서 insert문 사용
1) PreparedStatement의 insert문
- 회원 정보를 저장하기 위해 ?(물음표)를 사용함
- ?는 id, pwd, name, email에 순서대로 대응함
- 각 ?에 대응하는 값을 지정하기 위해 setter를 사용함
- ?은 1부터 시작함package kr.co.ezenac.member04; import java.sql.Connection; import java.sql.Date; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; public class MemberDAO { private Connection conn; private PreparedStatement pstmt; private DataSource dataFactory; public MemberDAO() { try { Context ctx = new InitialContext(); Context envContext = (Context)ctx.lookup("java:/comp/env"); //JNDI에 접근하기 위해 기본경로를 지정 //톰캣 context.xml에 설정한 name 값인 jdbc/oracle을 이용해 톰캣이 미리 연결한 DataSource를 받아옴 dataFactory = (DataSource)envContext.lookup("jdbc/oracle"); } catch (NamingException e) { e.printStackTrace(); } } public List<MemberVO> listMembers() { List<MemberVO> list = new ArrayList<MemberVO>(); try { conn = dataFactory.getConnection(); //DataSource를 이용해 DB에 연결함 String query = "SELECT * FROM T_MEMBER"; System.out.println(query); pstmt = conn.prepareStatement(query); //prepareStatement()메서드에 SQL문을 전달해 객체 생성함 ResultSet rs = pstmt.executeQuery(); //미리 설정한 SQL문을 실행함 while(rs.next()) { String id = rs.getString("id"); String pwd = rs.getString("pwd"); String name = rs.getString("name"); String email = rs.getString("email"); Date joinDate = rs.getDate("joinDate"); //조회한 레코드의 각 컬럼 값을 받아옴 MemberVO vo = new MemberVO(); vo.setId(id); vo.setPwd(pwd); vo.setName(name); vo.setEmail(email); vo.setJoinDate(joinDate); //각 컬럼 값을 다시 MemberVO 객체의 속성에 설정함 list.add(vo); //설정된 MemberVO 객체를 다시 ArrayList에 저장함 } rs.close(); pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } return list; //조회한 레코드의 개수만큼 MemberVO 객체를 저장한 ArrayList를 반환함 } public void addMember(MemberVO memberVO) { try { conn = dataFactory.getConnection(); // DataSource를 이용해 DB 연결 String id = memberVO.getId(); // 테이블에 저장할 회원 정보 받아옴 String pwd = memberVO.getPwd(); String name = memberVO.getName(); String email = memberVO.getEmail(); String query = "insert into t_member (id, pwd, name, email) values (?, ?, ?, ?)"; System.out.println("prepareStatement: " + query); pstmt = conn.prepareStatement(query); pstmt.setString(1, id); //insert문의 ?에 순서대로 회원 정보 세팅 pstmt.setString(2, pwd); pstmt.setString(3, name); pstmt.setString(4, email); pstmt.executeUpdate(); pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } public void delMember(String id) { try { conn = dataFactory.getConnection(); String query = "DELETE FROM T_MEMBER tm WHERE ID = ?"; System.out.println("prepareStatement : " + query); pstmt = conn.prepareStatement(query); pstmt.setString(1, id); //첫 번째 '?'에 전달된 ID를 인자로 넣음 pstmt.executeUpdate(); //delete문 실행 -> 테이블에서 해당 ID 회원 정보 삭제 pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } }
//VO 클래스 package kr.co.ezenac.member04; import java.sql.Date; /* id varchar2(10) PRIMARY KEY, pwd varchar2(10) NOT NULL, name varchar2(50), email varchar2(50), joinDate DATE DEFAULT sysdate */ public class MemberVO { private String id; private String pwd; private String name; private String email; private Date joinDate; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Date getJoinDate() { return joinDate; } public void setJoinDate(Date joinDate) { this.joinDate = joinDate; } }
'개발자 수업 > JSP' 카테고리의 다른 글
8. 서블릿 API 사용하기2 (0) 2021.12.02 7. 서블릿 API 사용하기 (0) 2021.11.27 5. JDBC 연동과 관련객체 (0) 2021.11.27 4. 서블릿 비즈니스 로직 추가 (0) 2021.11.25 3. 서블릿 (0) 2021.11.24