Day 4(9/20) MemberList Back단 구현(+Bean클래스 만들기)

2016. 9. 27. 11:15Programming/JSP

MemberList.java


1) MemberList.jsp 기능 구현하는 클래스

2) DB와 연결돼 Data 주고 받음

3) 쿼리 결과값을 빈클래스에 저장


<구성 요소>


1. 쿼리 실행


시나리오: 명단에 있는 귀족만 리무진에 태움

DriverManager(운전수)-Connection(+로그인)-Statement(쿼리 발표)-쿼리 실행 후 rs(리무진)에 저장


1) 드라이버 지정(귀족 골라내 태우는 사람)

Class.forName("com.mysql.jdbc.Driver");


2) 귀족 정보가 든 DB와 연결(+로그인)

conn = DriverManager.getConnection(url, uid, upw);


3) 상사로부터 전달 받은 '쿼리'를 사람들에게 말한다.

pstmt=con.prepareStatement(sql);


4) 쿼리 빈칸에 값 넣어줌(덜렁대는 상사)

pstmt.setString(1, id): 1번째 ?에 id 넣어준다.


5) 쿼리를 실행하여 귀족들을 리무진(ResultSet: rs)에 태움

rs=pstmt.executeQuery();


6) 자원 반납

rs, pstmt, con 모두 close()



2. 쿼리 결과값을 빈클래스에 저장


vo = new MemberVo();

vo.setNum(rs.getInt("num"));

vo.setId(rs.getString("id"));


list.add(vo); //num, id 등 모든 값을 한꺼번에 저장


3. redirect 처리 및 close 처리


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
 
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.Statement; //쿼리를 실행하는 클래스
import java.sql.ResultSet; //쿼리의 결과값을 받는다.
 
import java.util.List;
import java.util.ArrayList;
 
@WebServlet("/MemberList"// web.xml을 대신해서 만들어진 것
// 서블릿을 맵핑해서 요청하는 주소를 설정할 수 있다.
// 요청이 오면 MemberList 클래스로 연결
public class MemberList 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";
                        Statement stmt = null// sql 실행하는 클래스
                        ResultSet rs = null// 결과값 받는 클래스
                        MemberVo vo = null;
                        List<MemberVo> list = new ArrayList<MemberVo>();
 
                        try {
                                    Class.forName("com.mysql.jdbc.Driver"); // mysql lib를 사용해서 접속 준비
                                    conn = DriverManager.getConnection(url, uid, upw); // 접속
                                    stmt = conn.createStatement(); // sql을 실행할 준비
                                    rs = stmt.executeQuery(sql); // sql을 실행하고 그 결과값을 ResultSet 객체가 받는다.
                                    //select는 executeQuery(), insert,delete,update는 executeUpdate() 이용

while (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"));
                                                list.add(vo);
                                    }
                                    //memberList로 redirect
                                    req.setAttribute("memList", list);
                                    RequestDispatcher dispatcher = req.getRequestDispatcher("./memberList.jsp");
                                                                                                                                
                                    dispatcher.forward(req, resp);
                        } catch (Exception e) {
                                    e.printStackTrace();
                        } finally { // 입출력한 후에
                                    try { // 순서대로 닫아준다.
                                                if (rs != null) {
                                                            rs.close();
                                                }
                                                if (stmt != null) {
                                                            stmt.close();
                                                }
                                                if (conn != null) {
                                                            conn.close();
                                                }
                                    } catch (Exception e) {
                                                e.printStackTrace();
                                    }
                        }
            }
}
 
cs


MemberVo(Bean클래스) *가독성 고려해 email, phone, indate, admin은 생략해 작성

전역 변수(num, id 등)는 private로 외부 접근 못 하게
set(정해주는), get(가져오는) 메소드는 public으로 외부에서 사용 가능케


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
 
package source;
public class MemberVo {
 private int num; //private로 지정되면 getter, setter로 접근해야됨
 private String id;
 private String pwd;
 private String name;
 
 public int getNum() {
  return num;
 }
 public void setNum(int num) {
  this.num = num;
 }
 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;
 }
 
}
 
cs