728x90
자바 빈은 웹 프로그램, 즉 Java EE 프로그래밍 시 여러 객체를 거치면서 만들어지는 데이터를 저장하거나 전달하는데 사용한다. 자바의 DTO(Data Transfer Object, 데이터 전송 객체) 클래스, VO(Value Object, 값 객체) 클래스와 같은 개념이라고 할 수 있다. 자바 빈을 만드는 방법은 VO 클래스를 만드는 방법과 같으며 특징은 다음과 같다.
- 속성의 접근 제한자는 private
- 각 속성(attribute, property)은 각각의 setter/getter를 가진다.
- setter/getter 이름의 첫 글자는 반드시 소문자이다.
- 인자 없는 생성자를 반드시 가지며 다른 생성자도 추가할 수 있다.
1. 자바빈을 이용한 회원정보 조회 실습
1. MemberBean, MemberDAO 클래스 추가 / member.jsp, memberForm.html을 생성
2. MemberBean클래스에 아래와 같은 내용 입력
회원 테이블을 참고하여 MemberBean클래스를 작성, MemberBean클래스의 속성은 회원 테이블의 각 컬럼 이름을 그대로 사용하며 자료형도 컬럼 이름의 자료형과 동일하게 선언한다.
package sec01.ex01;
import java.sql.Date;
public class MemberBean {
private String id;
private String pwd;
private String name;
private String email;
private Date 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;
}
public Date getJoinDate() {
return joinDate;
}
public void setJoinDate(Date joinDate) {
this.joinDate = joinDate;
}
}
3. memberForm.html에 아래와 같은 내용 입력
회원 가입 창에서 회원 정보를 입력 한 후 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> </p></td>
<td width="400">
<input type="submit" value="가입하기">
<input type="reset" value="다시입력">
</td>
</tr>
</table>
</form>
</body>
</html>
4. 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>
5. 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();
}
}
}
6. 아래의 주소로 요청하여 회원 정보를 입력 한 후 가입하기를 클릭
7. 새 회원이 추가된 후 다시 회원정보를 조회하여 목록으로 출력하는 것을 볼 수 있다.
728x90
'백엔드 > 웹개발' 카테고리의 다른 글
[웹개발] 웹 애플리케이션 모델 / MVC패턴 (0) | 2022.03.02 |
---|---|
[웹개발] 표현언어(EL/Expression Language) (0) | 2022.02.28 |
[웹개발] JSP (0) | 2022.02.25 |
[이클립스/웹개발] 브라우저 쿠키 차단된 경우 encodeURL() 사용 (0) | 2022.02.24 |
[이클립스/웹개발] 서블릿에서 세션 API 사용 (0) | 2022.02.24 |