Day 6(9/22) 업데이트 화면& 기능 구현
2016. 9. 27. 11:39ㆍProgramming/JSP
updateForm.jsp 만들기...
BUT! 그 전에 수정할 튜플 선택하는 기능 구현
MemberDetail.java
1) NUM을 통해 해당 튜플 선택하도록
String sql = "select * from member where num =?";
2) forward할 페이지에 파라미터를 Object 타입으로 전송
req.setAttribute("member", vo);
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | package source; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletResponse; //서버가 clinet에 응답 import javax.servlet.http.HttpServletRequest; //client가 서버에 요청 import javax.servlet.annotation.WebServlet; //DB 연관 라이브러리 import java.sql.DriverManager; //접속 DB 드라이버를 설정 import java.sql.Connection; //DB 접속해서 import java.sql.PreparedStatement; //쿼리를 실행하는 클래스 import java.sql.ResultSet; //쿼리의 결과값을 받는다. @WebServlet("/MemberDetail") public class MemberDetail extends HttpServlet { String url = "jdbc:mysql://localhost:3306/JAVA_LESSON" // DB 서버 주소 + "?useUnicode=true&characterEncoding=utf8"; String uid = "root"; String upw = null; // cmd 창에 mysql -uroot -p @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Connection conn = null; String sql = "select * from member where num =?"; PreparedStatement pstmt = null; ResultSet rs = null; int num = Integer.parseInt(req.getParameter("num")); MemberVo vo = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, uid, upw); pstmt = conn.prepareStatement(sql); pstmt.setInt(1, num); rs = pstmt.executeQuery(); if (rs.next()) { vo = new MemberVo(); vo.setNum(rs.getInt("num")); vo.setId(rs.getString("id")); vo.setPwd(rs.getString("pwd")); vo.setName(rs.getString("name")); vo.setEmail(rs.getString("email")); vo.setPhone(rs.getString("phone")); vo.setIndate(rs.getString("indate")); vo.setAdmin(rs.getInt("admin")); req.setAttribute("member", vo); // forward할 페이지에 파라미터를 Object // 타입으로 보낸다. RequestDispatcher dispatcher = req.getRequestDispatcher("./updateForm.jsp"); // 목적지 dispatcher.forward(req, resp); } else { resp.sendRedirect("./MemberList?info=detail failed"); } // dispatcher와 redirect의 차이 // redirect는 get 방식으로 통신하므로 파라미터를 url로 보낼 수밖에 // =>url은 문자열 => 파라미터의 데이터 타입은 문자열 // redirect는 response 객체에 있다. // dispatcher는 post 방식으로 통신하기 때문에 파라미터를 헤더로 보낼 수 있다. // =>header에 정보를 담기 때문에 Object 타입으로 파라미터를 보낼 수 있다. // =>request.setAttribute("key", Object); // dispatcher는 request 객체에 있다. } catch (Exception e) { e.printStackTrace(); } finally { // 입출력한 후에 try { // 순서대로 닫아준다. if (rs != null) { rs.close(); } if (pstmt != null) { pstmt.close(); } if (conn != null) { conn.close(); } } catch (Exception e) { e.printStackTrace(); } } } } | cs |
본격적으로 updateForm.jsp 만들기...
<구성 요소>
1) 빈 클래스에 저장된 데이터 받아오기
<%@ page import="source.MemberVo"%>
<%=vo.getId()%>
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- ctrl+shift+/로 주석 달 수 있음 --> <%@ page import="source.MemberVo"%> <% MemberVo vo = (MemberVo)request.getAttribute("member"); %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>수정하기</title> <link href="https://fonts.googleapis.com/css?family=Baloo+Bhaina" rel="stylesheet"> <style type="text/css"> </style> </head> <body> <h2>회원정보 수정 폼(insert)</h2> <h4>1. UPDATE MEMBER SET pwd=?,name=?,phone=?,email=?,admin=? WHERE num =?;</h4> <h4>2. update 쿼리를 실행하는 MemberUpdate servlet을 호출한다.</h4> <h4>3. 성공시 MemberList servlet을 호출, 실패시 회원수정 form으로 돌아온다</h4> <h3>회원정보 삭제</h3> <h4>1. 삭제하기 버튼을 누르면 MemberDelete?num=1 servlet을 호출</h4> <h4>2. 삭제하기를 성공하면 MemberList, 실패하면 updateForm으로 이동</h4> <!-- a href="MemberList">멤버리스트 출력</a> --> <form action="MemberUpdate" method="post"> <p> <label for="uNum">num :</label> <b> <%out.print(vo.getNum()); %> </b> <input type="hidden" name="uNum" value="<%=vo.getNum()%>"> </p> <!-- type="hidden" 눈에 보이지는 않지만 파라미터로 값을 넘길 때 사용 --> <p> <label for="uName">이름 :</label> <input type="text" id="uName" name="uName" size="20" value="<%=vo.getName()%>"> </p> <p> <label for="uId">ID :</label> <strong><%= vo.getId() %></strong> <input type="hidden" id="uId" name="uId" value="<%=vo.getId()%>"> </p> <p> <label for="uPass">pass :</label> <input type="password" id="uPass" name="uPass" size="20" value="<%=vo.getPwd()%>"> </p> <p> <label for="uEmail">E-mail :</label> <input type="email" id="uEmail" name="uEmail" size="20" value="<%=vo.getEmail()%>"> </p> <p> <label for="uPhone">Phone :</label> <input type="text" id="uPhone" name="uPhone" size="20" value="<%=vo.getPhone()%>"> </p> <p> <label for="admin">관리자</label> <input type="radio" id="admin" name="admin" value="0"> <label for="normal">일반</label> <input type="radio" id="normal" name="admin" value="0"> <!-- name("admin")이 같게 하면 둘 중 하나만 선택가능--> </p> <input type="submit" value="제출"> <a href="./MemberDelete?num=<%=vo.getNum() %>" class="btn-delete">삭제하기</a> <a href="#" class="btn-delete"> 테스트 </a> </form> </body> </html> | cs |
MemberUpdate.java
수정한 값을 DB에 업데이트 해주는 클래스(MemberAdd와 매우 유사)
*Delete도 Add와 유사하므로 생략하도록 하겠음(쿼리만 돌리면 됨)
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | package source; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletResponse; //서버가 clinet에 응답 import javax.servlet.http.HttpServletRequest; //client가 서버에 요청 import javax.servlet.annotation.WebServlet; //DB 연관 라이브러리 import java.sql.DriverManager; //접속 DB 드라이버를 설정 import java.sql.Connection; //DB 접속해서 import java.sql.PreparedStatement; //쿼리를 실행하는 클래스 import java.sql.ResultSet; //쿼리의 결과값을 받는다. @WebServlet("/MemberUpdate") public class MemberUpdate extends HttpServlet { String url = "jdbc:mysql://localhost:3306/JAVA_LESSON" // DB 서버 주소 + "?useUnicode=true&characterEncoding=utf8"; String uid = "root"; String upw = null; // cmd 창에 mysql -uroot -p @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Connection conn = null; String sql = "UPDATE MEMBER SET pwd=?,name=?,phone=?,email=?,admin=? where num =?"; PreparedStatement pstmt = null; // sql 실행하는 클래스 ResultSet rs = null; // 결과값 받는 클래스 int insert = 0; // 저장을 몇 개 성공했는지 확인 req.setCharacterEncoding("UTF-8"); int num = Integer.parseInt(req.getParameter("uNum")); String pwd = req.getParameter("uPass"); String name = req.getParameter("uName"); String phone = req.getParameter("uPhone"); String email = req.getParameter("uEmail"); int admin = Integer.parseInt(req.getParameter("admin")); // Integer.parseInt:숫자로 try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, uid, upw); pstmt = conn.prepareStatement(sql); pstmt.setString(1, pwd); pstmt.setString(2, name); pstmt.setString(3, phone); pstmt.setString(4, email); pstmt.setInt(5, admin); pstmt.setInt(6, num); insert = pstmt.executeUpdate(); // 몇 개의 데이터 저장됐는지 표시 if (insert > 0) { resp.sendRedirect("./MemberList"); } else { resp.sendRedirect("./updateForm.jsp"); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (pstmt != null) { pstmt.close(); } if (conn != null) { conn.close(); } } catch (Exception e) { e.printStackTrace(); } } } } | cs |
'Programming > JSP' 카테고리의 다른 글
L02 JSP 작성 (0) | 2016.10.25 |
---|---|
L01 서블릿 작성 (0) | 2016.10.25 |
Day 5(9/21) 회원 추가 기능 구현 (0) | 2016.09.27 |
Day 4(9/20) MemberList Back단 구현(+Bean클래스 만들기) (0) | 2016.09.27 |
JSP 개념 정리 (0) | 2016.09.26 |