좌선
좌선의 개발일지
좌선
전체 방문자
오늘
어제
  • 분류 전체보기 (79)
    • 개발환경 (3)
    • 알고리즘 (10)
      • 코딩테스트 (9)
      • 알고리즘 (1)
    • Java (54)
      • JPA (6)
      • Spring (5)
      • SpringBoot (15)
    • Network (2)
    • Database (1)
    • Git (2)
    • & (1)
    • Exception (3)
    • Study (0)
      • RealMySQL (0)
    • 회고 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • dirtychecking
  • 머스테치
  • 자바웹을다루는기술
  • 더티체킹
  • 쿼리로그
  • SpringBoot
  • Spring
  • 다트게임
  • Spring Data JPA
  • programmers
  • 테스트주도개발
  • Mustache
  • 자바 웹을 다루는 기술
  • 스프링부트
  • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
  • TDD 실천법과 도구
  • 프로그래머스
  • AWS
  • 스프링부트와 AWS로 혼자 구현하는 웹 서비스
  • 코드로배우는스프링웹프로젝트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
좌선

좌선의 개발일지

Servlet 비즈니스 로직 처리1 (Servlet, DAO, VO)
Java

Servlet 비즈니스 로직 처리1 (Servlet, DAO, VO)

2021. 4. 4. 15:05

서블릿의 데이터베이스 연동하기

- 서블릿에서 데이터베이스와 연동하여 조회한 데이터를 얻은 후

클라이언트의 웹 브라우저로 응답하는 과정 실습

 

- 클라이언트로부터 요청을 받으면,

서블릿은 SQL문을 사용해 데이터베이스에 접근하여 작업.

이 과정에서 DAO와 VO클래스가 사용됨.

 

서블릿으로 회원 정보 테이블의 회원 정보 조회

<회원 정보 조회 과정>

 1. 웹 브라우저(클라이언트)가 서블릿에게 회원 정보를 요청

 2. MemberServlet은 요청을 받은 후 MemberDAO 객체를 생성하여 listMembers() 메서드를 호출

 3. listMembers()에서 다시 connDB() 메서드를 호출하여 데이터베이스와 연결한 후 SQL문을 실행해 회원 정보 조회

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

 5. ArrayList를 다시 메서드를 호출한 MemberServlet으로 반환 후 ArrayList의 MemberVO를 차례대로 가져와

    회원 정보를 HTML 태그의 문자열로 만든다

 6. 만들어진 HTML 태그를 웹 브라우저로 전송해 회원 정보를 출력합니다.

 

1. 회원 정보 테이블 생성하기

 

2. 브라우저의 요청을 받는 MemberServlet 클래스 작성

package sec01.ex01;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.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'>");
		out.print("<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td><td>가입일</td></tr>");
		
		//조회한 회원 정보를 for문과 <tr> 태그를 이용해 리스트로 출력
		for(int i = 0; i < list.size(); i++) {
			MemberVO memberVO = list.get(i);
			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>");
	}

}

MemberDAO class의 listMembers() 메서드를 통해

회원 정보를 MemberVO타입의 List에 담는다.

담긴 List의 값들을 for문을 통해 하나씩 화면에 출력해준다.

 

2. MemberDAO 클래스

- DAO(Data Access Object)는

  DB를 사용해 데이터를 조회하거나

  조작하는 기능을 전담하도록 만든 오브젝트를 말한다. 

- genesis8.tistory.com/214

 

 

회원 정보 조회 SQL문을 실행하여 조회한 레코드들의 컬럼 값을

다시 MemberVO 객체의 속성에 설정하고

ArrayList에 저장하여 호출한 곳 (MemberServlet)으로 반환한다.

package sec01.ex01;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class MemberDAO {
	private Statement stmt;
	private Connection con;
	
	public List<MemberVO> listMembers(){
		List<MemberVO> list = new ArrayList<MemberVO>();
		try {
			connDB(); // 네가지 정보로 데이터베이스를 연결합니다.
			String query = "select * from t_member";
			System.out.println(query);
			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 객체의 속성에 설정합니다.
				MemberVO vo = new MemberVO();
				vo.setId(id);
				vo.setPwd(pwd);
				vo.setName(name);
				vo.setEmail(email);
				vo.setJoinDate(joinDate);
				//설정된 MemberVO 객체를 다시 ArrayList에 저장합니다.
				list.add(vo);
			}
			rs.close();
			stmt.close();
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		//조회한 레코드의 개수만큼 MemberVO 객체를 저장한 ArrayList를 반환합니다.
		return list;
	}

	private void connDB() {
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			System.out.println("Oracle 드라이버 로딩 성공");
			con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","사용자명","암호");
			System.out.println("Connection 생성 성공");
			stmt = con.createStatement();
			System.out.println("Statement 생성 성공");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

3. MemberVO 클래스

값을 전달하는 데 사용되는 VO(Values Object) 클래스.

테이블에서 조회한 레코드의 컬럼 값을 속성에 저장해야 하므로

컬럼 이름과 동일한 자료형과 이름으로 속성을 선언하고

getter/setter 를 각각 생성.

package sec01.ex01;

import java.util.Date;

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;
	}
	
	
}

MemberVO (컬럼 값을 저장하는 클래스)

MemberDAO (DB에서 컬럼의 값을 가져오고 VO 객체의 속성에 설정하고 list 반환하는 클래스)

MemberServlet (브라우저의 요청을 받고 조회된 데이터를 HTML 태그의 문자열로 만드는 클래스)

 

    'Java' 카테고리의 다른 글
    • Servlet 비즈니스 로직 처리2 (PreparedStatement)
    • Servlet 웹 브라우저에서 서블릿으로 데이터 전송하기
    • Servlet 애너테이션을 이용한 서블릿 매핑
    • Servlet
    좌선
    좌선
    얼렁뚱땅 천방지축 굴러가는 개발자의 삶

    티스토리툴바