Day 6(9/22) 업데이트 화면& 기능 구현

2016. 9. 27. 11:39Programming/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