[국비학원 기록/Servlet] 서블릿 비즈니스 로직 처리, 데이터베이스 연동
my code archive
article thumbnail
반응형
서블릿의 비즈니스 로직 처리 작업?

1)★서블릿의 가장 핵심 기능★

 

2)서블릿이 클라이언트로부터 요청을 받으면 그 요청에 대해 수행하는 것.

 

3)대부분의 비즈니스 처리 작업은 데이터베이스 연동 관련 작업,

  그외에 다른 서버와 연동해서 데이터를 얻는 작업도 수행.

 

<서블릿의 비즈니스 처리 예>

1)웹 사이트 회원 가입 요청 처리 작업

 

2)웹 사이트 로그인 요청 처리 작업

 

3)쇼핑몰 상품 주문 처리 작업

 

<서블릿 비즈니스 처리 과정>

클라이언트로부터 요청을 받음 -> 데이터베이스 연동(비즈니스 로직 처리) -> 처리 결과 클라이언트에게 돌려줌

 

서블릿의 데이터베이스 연동하기
서블릿,DAO(Data Access Object), VO(Value Object),DB

 

0) 회원 테이블 t_member 생성, 회원 정보 추가

 

1)웹 브라우저가 서블릿에게 회원 정보 요청

 

 

2)MemberServlet : 요청을 받음,

  MemberDAO 객체 생성 후 listMembers() 메서드 호출

 

3)listMembers()에서 connDB() 메서드로 데이터베이스와 연결 후 SQL문 실행.

 

4)조회된 회원 정보를 MemberVO 속성에 설정 후 ArrayList에 저장.

 

5)ArrayList의 MemberVO를 차례대로 가져와 회원 정보를 HTML 태그 문자열로 생성.

 

6)만들어진 HTML 태그를 웹 브라우저로 전송.

 

MemberDAO.java

JDBC 드라이버 로딩, SQL문 실행하기 위한 Statement 인스턴스 획득
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
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
 
public class MemberDAO {
    
    private static final String driver="oracle.jdbc.driver.OracleDriver";
    private static final String url="jdbc:oracle:thin:@localhost:1521:XE";
    private static final String user="wdsql";
    private static final String pwd="0311";
    
    private Connection conn;
    private Statement stmt;
    
    public void connDB() {
        try {
            Class.forName(driver);
            System.out.println("Oracle 드라이버 로딩 성공");
            
            conn=DriverManager.getConnection(url, user, pwd);
            System.out.println("Connection 생성 성공");
            
            stmt=conn.createStatement();
            System.out.println("Statement 생성 성공");
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
cs
반환 결과를 ResultSert() 메서드, While 반복문 통해 출력

반환된 데이터 사용 종료되면 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
public List<MemberVO> listMembers(){
        List<MemberVO> list=new ArrayList<>();
        
        connDB();
        
        String query="SELECT * FROM T_MEMBER";
        System.out.println(query);
        
        try {
            ResultSet rs = stmt.executeQuery(query);    //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);
                
            }
            
            rs.close();
            stmt.close();
            conn.close();
            
            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return list;                                    //조회한 레코드의 개수만큼 MemberVO 객체를
    }
 
}
cs
MemberVO.java
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
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;
    }
}
cs
MemberServlet
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
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("/member")
public class MemberServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out=response.getWriter();
        
        MemberDAO dao=new MemberDAO();                        //SQL문으로 조회할 MemberDAO 객체를 생성함.
        List<MemberVO> list= dao.listMembers();                //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></tr>");
        
        
        for(int i=0;i<list.size();i++) {                //조회환 회원 정보를 for문 <tr>태그 이용해 출력함.
            MemberVO memberVO = list.get(i);            //i번째를 가져오면 전부 MemberVO에 해당됨.
            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></tr>");
            
        }
        
        out.print("</table></body></html>");
    }
 
}
 
cs
<실행 결과>

반응형
profile

my code archive

@얼레벌레 개발자👩‍💻

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

반응형