백문이불여일타

Jsp&Servlet:: 서블릿 과 오라클 연동 하는법 _실습포함 본문

Jsp

Jsp&Servlet:: 서블릿 과 오라클 연동 하는법 _실습포함

퇴근각 2019. 7. 19. 15:46

오늘은 서블릿에서 데이터베이스와 연동하여 조회한 데이터를 얻은 후 클라이언트의 웹 브라우저로 

응답하는 과정을 알아본다.

 

★TIP

서블릿의 비즈니스 처리 기능을 이해하려면 우선 데이터베이스 접근 명령어인 SQL문을

어느정도 알아야한다.

사전에 데이터베이스 이론이 부족하면 온라인 강의나 책을 통해 자바 데이터베이스 기능을 먼저 숙지한뒤

공부하는것이 좋다

 


 서블릿의 데이터베이스 연동과정 

 

서블릿에서 데이터베이스와 연동하는 과정은 자바의 데이터베이스 연동과정과 같다.

클라이언트로부터 요청을 받으면 서블릿은 SQL문을 사용해 데이터베이스에 접근하여 작업을 한다.

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

 

 


SQL테이블 생성방법

 

먼저 회원 정보를 저장하는 테이블의 이름명칭을 t_member 로 정하겠다 !!

NO 속성 이름 컬럼 이름 자료형 크기 유일키 NULL  기본값
1 ID id varchar2 10 Y N 기본 키  
2 비밀번호 pwd varchar2 10   N    
3 이름 name varchar2 50        
4 이메일 email varchar2 50   N    
5 가입일자 joinDate varchar2     N    

 

회원 정보 테이블을 생성 한후 회원정보를 추가하여 웹 브라우저에서 서블릿으로 요청하면

데이터베이스 회원(t_member)테이블와 연동해 회원 정보를 웹 브라우저로 출력하는 작업을 진행해보겠다.

 

1. 먼저 SQL Developer에서 회원테이블과 회원 정보를 입력하기 위해 SQL Developer를 실행한다.

    왼쪽 메뉴의 + 를 클릭한후 데이터베이스 연결정보 설정한다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

설정을 했으면 꼭 테스트(T) 를 눌러 왼쪽에 상태확인이 성공 이 나와야 정상 접속된다 

 

2. 접속한 후 생성되는 워크시트에 다음과 같은 테이블 생성 SQL문을 입력한다.

--회원 테이블 생성
create table t_member(
id varchar2(10) primary key,
pwd varchar2(10),
name varchar2(50),
email varchar2(50),
joinDate date default sysdate);

--회원 정보 추가 
insert into t_member
values('hong','1212','홍길동','hong@gmail.com',sysdate);

insert into t_member
values('lee','1212','이순신','hong@gmail.com',sysdate);

insert into t_member
values('kim','1212','김유신','kim@jweb.com',sysdate);

--영구반영하기위해 실행
commit;

--테이블에서 회원정보 조회 
select*from t_member;

 

3. 왼쪽상단에 녹색버튼 클릭해 SQL문 실행한다.

 

 

 

 

4.commit; 도 해준다

 

 

 

 

5. select*from t_member; 조회하면 회원 정보가 표시된다.

 

 

 

 

 

 

6. 이클립스에서 만든 프로젝트에서 회원 정보를 조회한다.

   새 프로젝트 pro07을 생성한다음 오라클 데이터베이스와 연동하는데 필요한 드라이버인

   ojdbc6.jar 를 프로젝트의 /WebContent/WEB-INF/lib 폴더에 복붙한다!!

 

 

 

 

★★TIP

오라클드라이버는 아래 링크를 클릭해 다운받을수 있다 고고!!

https://www.oracle.com/technetwork/apps-tech/jdbc-112010-090769.html

 

 

 

7. sec01,ex01 패키지를 만들고 다음과 같이 회원 조회와 관련된 자바 클래스 파일인                 MemberDAO,MemberServlet,MemberVO클래스를 생성한다.

 

 

 

 

 

 

 

8. 브라우저의 요청을 받는 MemberServlet 클래스를 작성한다 

package sec01.ex01;

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 {
	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();
      List<MemberVO> list=dao.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++){
		MemberVO 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>");
   }
}

9. MemberDAO 클래스를 작성한다.

   회원정보SQL문을 실행해서 조회한 레코드들의 컬럼 값을 다시 MemberVO 객체의 속성에 설정한다음

   ArrayList에 저장하고 호출한곳으로 반환한다.

package sec01.ex01;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
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 = "scott";
	private static final String pwd = "비밀번호입력란";
	private Connection con;
	private Statement stmt;

	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);
			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);
				list.add(vo);
			}
			rs.close();
			stmt.close();
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}

	private void connDB() {
		try {
			Class.forName(driver);
			System.out.println("Oracle 드라이버 로딩 성공");
			con = DriverManager.getConnection(url, user, pwd);
			System.out.println("Connection 생성 성공");
			stmt = con.createStatement();
			System.out.println("Statement 생성 성공 ");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

10. MemberVO클래스를 작성한다 
    값을 전달하는 데 사용되는 VO(Value Object)클래스이다.
    테이블에서 조회한 레코ㅡ의 컬럼 값을 속성에 저장해야 하므로 
    컬럼 이름과 동일한 자료형과 이름으로 속성을 선언하고 getter/setter를 생성한다 

package sec01.ex01;

import java.sql.Date;

public class MemberVO {
	private String id;
	private String pwd;
	private String name;
	private String email;
	private Date joinDate;
	
	public MemberVO() {
		System.out.println("MemberVO 생성자 호출");
	}

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

	
}

11. 실행결과 

 

 

 

 

 

 

 

▼ 콘솔창 실행시

Comments