반응형
서블릿의 비즈니스 로직 처리 작업?
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 |
<실행 결과>
반응형
'📒 education archive > 📍Servlet, JSP' 카테고리의 다른 글
[국비학원 기록/Servlet] 서블릿 포워드, Redirect(리다이렉트), refresh, location (0) | 2021.12.02 |
---|---|
[국비학원 기록/Servlet] 데이터베이스 연동 2, JNDI, 회원 정보 등록, 삭제하기 (0) | 2021.11.27 |
[국비학원 기록/Servlet] 서블릿 로그인 예제 , GET 방식, POST 방식 (0) | 2021.11.24 |
[국비학원 기록 / Servlet] HTTP 응답, request 내장 객체 (0) | 2021.11.24 |
[국비학원 기록/Servlet] 서블릿 생명주기, URL 매핑하기 (0) | 2021.11.24 |