프로그래밍 언어/자바 웹

자바 빈을 이용한 회원 정보 조회 실습

· 코딩마이데이

자바 빈은 웹 프로그램, 즉 Java EE 프로그래밍 시 여러 객체를 거치면서 만들어지는 데이터를 저장하거나 전달하는 데 사용합니다. 자바의 DTO(Data Transfer Object, 데이터 전송 객체) 클래스, VO(Value Object, 값 객체) 클래스와 같은 개념이라고 할 수 있습니다.

자바 빈을 만드는 방법은 VO 클래스를 만드는 방법과 같은 다음과 같습니다.

  • 속성의 접근 제한자는 private입니다.
  • 각 속성(attribute, property)은 각각의 setter/getter를 가집니다.
  • setter/getter 이름의 첫 글자는 반드시 소문자입니다.
  • 인자 없는 생성자를 반드시 가지며 다른 생성자도 추가할 수 있습니다.

그럼 자바 빈을 이용해 회원 테이브의 회원 정보를 조회한 후 출력해 보겠습니다.

1. sec01.ex01 패키지를 사용하고 MemberBean, MemberDAO 클래스를 추가합니다. 그리고 실습 파일 member.jsp의 memberForm.html을 생성합니다.

실습 파일

 

다음은 MemberBean을 이용해 회원 정보를 등록, 조회하고 출력하는 과정입니다.

회원 정보 등록 및 조회 과정

 

2. 회원 정보를 저장하는 MemberBean  클래스를 만들기 전에 다음의 회원 테이블을 봅시다.

회원 정보 저장 테이블의 각 컬럼 이름

 

3. 회원 테이블을 참고해 MemberBean 클래스를 작성합니다. MemberBean 클래스의 속성은 회원 테이블과 각 컬럼 이름을 그대로 사용하여 자료형도 컬럼 이름의 자료형도 컬럼 이름의 자료형과 동일하게 선언합니다.

package sec01.ex01;

public class MemberBean {
	private String id;
	private String pwd;
	private String name;
	private String email;
	private String joinDate;
	
	public MemberBean() {
		
	}

	public MemberBean(String id, String pwd, String name, String email) {
		this.id = id;
		this.pwd = pwd;
		this.name = name;
		this.email = email;
	}

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

 

4. 회원 가입창에서 회원 정보를 입력한 후 member.jsp로 전송하도록 memberForm.html을 작성합니다.

<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title>회원 가입창</title>
<body>
<form method="post"   action="member.jsp">
<h1  style="text-align:center">회원 가입창</h1>
<table  align="center">
      <tr>
         <td width="200"><p align="right">아이디</td>
         <td width="400"><input type="text" name="id"></td>
      </tr>
      <tr>
          <td width="200"><p align="right">비밀번호</td>
          <td width="400"><input type="password"  name="pwd"></td>
      </tr>
      <tr>
          <td width="200"><p align="right">이름</td>
          <td width="400"><p><input type="text"  name="name"></td>
      </tr>
      <tr>
          <td width="200"><p align="right">이메일</td>
          <td width="400"><p><input type="text"  name="email"></td>
      </tr>
      <tr>
          <td width="200"><p>&nbsp;</p></td>
          <td width="400">
			<input type="submit" value="가입하기">
			<input type="reset" value="다시입력">
		  </td>
      </tr>
</table>
</form>
</body>
</html>

 

5. member.jsp를 다음과 가이 작성합니다. 전송된 회원 정보를 getParameter() 메서드를 이용해 가져온 후 MemberBean 객체를 생성하여 각 회원 정보를 숙성에 설정합니다. 그런 다음 MemberDAO의 addMember() 메서드를 호출해 인자로 전달합니다. 새 회원을 추가한 후에는 다시 MemberDAO의 listMembers() 메서드를 호출해 모든 회원 정보를 조회하고 목록으로 출력합니다.

<%@ page language="java"   contentType="text/html; charset=UTF-8"
     import="java.util.*, sec01.ex01.*" 
    pageEncoding="UTF-8"%>
<%
  request.setCharacterEncoding("UTF-8");
%>    

<%
   String   id=request.getParameter("id");
   String  pwd = request.getParameter("pwd");
   String  name = request.getParameter("name");
   String  email = request.getParameter("email");
 
  
   MemberBean  m =  new MemberBean(id, pwd, name, email);
   MemberDAO  memberDAO=new MemberDAO();
   memberDAO.addMember(m);
   List membersList = memberDAO.listMembers();	
%>
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>회원 목록창</title>
</head>
<body>
  <table align="center"  width="100%">
	 <tr align="center" bgcolor="#99ccff">
	      <td width="7%" >아이디</td>
	      <td width="7%">비밀번호</td>
	      <td width="5%" >이름</td>
	      <td width="11%" >이메일</td>
	      <td width="5%" >가입일</td>
	   </tr>
	<%
	   if(membersList.size()==0){
	%>
	  <tr>
	      <td colspan="5">
	        <p align="center"><b><span style="font-size:9pt;">
	                      등록된 회원이  없습니다.</span></b></p>
	      </td>
	  </tr>
	<%
	}else{
	   for( int i = 0; i < membersList.size(); i++ ) {
	      MemberBean bean = (MemberBean) membersList.get(i);
	%>
	   <tr align="center">
	       <td><%=bean.getId() %></td>
	       <td><%=bean.getPwd() %></td>
	       <td><%=bean.getName() %></td>
	       <td><%=bean.getEmail() %></td>
	       <td><%=bean.getJoinDate() %></td>
	   </tr>
	<%
	      } // end for
	
	   } // end if
	%>
	   <tr height="1" bgcolor="#99ccff">
	      <td colspan="5"></td>
	   </tr>
	</table>
</body>
</html>

 

6. MemberDAO를 다음과 같이 작성합니다. addMember() 메서드 호출 시 MemberBean 객체로 전달된 회원 정보를 getter를 이용해 insert문을 이용해 추가합니다.

package sec01.ex01;

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

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class MemberDAO {
	private Connection con;
	private PreparedStatement pstmt;
	private DataSource dataFactory;

	public MemberDAO() {
		try {
			Context ctx = new InitialContext();
			Context envContext = (Context) ctx.lookup("java:/comp/env");
			dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public List listMembers() {
		List list = new ArrayList();
		try {
			con = dataFactory.getConnection();
			String query = "select * from t_member order by joinDate desc ";
			System.out.println("prepareStatememt: " + query);
			pstmt = con.prepareStatement(query);
			ResultSet rs = pstmt.executeQuery();
			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");
				MemberBean vo = new MemberBean();
				vo.setId(id);
				vo.setPwd(pwd);
				vo.setName(name);
				vo.setEmail(email);
				vo.setJoinDate(joinDate);
				list.add(vo);
			}
			rs.close();
			pstmt.close();
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}

	public void addMember(MemberBean memberBean) {
		try {
			Connection con = dataFactory.getConnection();
			String id = memberBean.getId();
			String pwd = memberBean.getPwd();
			String name = memberBean.getName();
			String email = memberBean.getEmail();
			String query = "insert into t_member";
			query += " (id,pwd,name,email)";
			query += " values(?,?,?,?)";
			System.out.println("prepareStatememt: " + query);
			pstmt = con.prepareStatement(query);
			pstmt.setString(1, id);
			pstmt.setString(2, pwd);
			pstmt.setString(3, name);
			pstmt.setString(4, email);
			pstmt.executeUpdate();
			pstmt.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

7. http://localhost:8090/pro13/memberForm.html로 요청하여 회원 정보를 입력한 후 가입하기를 클릭합니다.

회원 정보 입력 후 가입하기 클릭

 

8. 새 회원이 추가된 후 다시 회원 정보를 조회하여 목록으로 출력하는 것을 볼 수 있습니다.

새 회원 등록 후 회원 목록 출력