본문 바로가기
Dev/Java

자바빈(JavaBean)

by vellahw 2022. 9. 2.

 

자바빈은 데이터를 표현하는 것을 목적으로 하는 자바 클래스이다.

자바빈 형태

 


 

1. 자바빈 프로퍼티

프로퍼티(속성)는 자바빈에 저장되어 있는 값을 나타내며,

메서드 이름을 사용해서 프로퍼티의 이름을 결정하게 된다.

예를 들어, 프로퍼티의 이름이 maxAge고 값이 int 타입일 경우 프로퍼티와 관련된 메소드의 이름은

public void setMaxAge(int value);   //setter
public int getMaxAge();   //getter

프로퍼티의 값을 설정하는 메서드의 경우 프로퍼티의 이름 중 첫 글자를 대문자로 변환한다. (maxAge -> MaxAge)

 

프로퍼티의 값이 boolean 타입일 경우 get 대신 is를 사용할 수 있다.

예를 들어, 프로퍼티의 이름이 finished고 값이 boolean 타입일 경우 

public boolean isFinished() {
...
}
public void setFinished(boolean finished) {
...
}

 

프로퍼티의 값에는 읽기 전용 프로퍼티와 읽기/쓰기 프로퍼티가 존재한다.

  • 읽기 전용: get 또는 is 메소드만 존재하는 프로퍼티 (즉, set 메소드가 없음)
  • 읽기/쓰기: get/set 또는 is/set 메소드가 존재하는 프로퍼티

 

프로퍼티의 값을 변경할 필요 없이 읽을 수만 있으면 되는 경우에는 읽기 전용 프로퍼티로 지정한다.

또한 자바빈 프로퍼티의 타입은 배열로도 정의할 수 있다.

 

 * 자바빈 클래스 생성

(파일 생성 경로: Dynamic Web Project - Java Resources - src/main/java)

package chap11;
import java.util.Date;
public class MemberInfo {
	/* 값 저장 필드 */
	private String id;  //프로퍼티 이름: id, 값 타입: String
	private String password;
	private String name;
	private String address;
	private Date registerDate;
	private String email;
	
	/* getter/setter (읽기/쓰기 모두 가능) */
	public String getId() {
		return id;
	}
	public void setId(String val) {
		this.id = val;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String val) {
		this.password = val;
	}
	public String getName() {
		return name;
	}
	public void setName(String val) {
		this.name = val;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String val) {
		this.address = val;
	}
	public Date getRegisterDate() {
		return registerDate;
	}
	public void setRegisterDate(Date val) {
		this.registerDate = val;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String val) {
		this.email = val;
	}
}

▲MemberInfo.java

 


 

 

2. <jsp:useBean> 태그를 이용한 자바 객체 사용

JSP에서 자바빈 객체를 생성할 때 사용한다.

<jsp:useBean id="빈이름" class="자바빈클래스이름" scope="범위" />
  • id: JSP 페이지에서 자바빈 객체에 접근할 때 사용할 이름을 명시
  • class: 패키지 이름을 포함한 자바빈 클래스의 완전한 이름 입력
  • scope: 자바빈 객체가 저장될 영역을 지정(page, request, session, application 중 하나 / 기본값은 page)
  • ex) <jsp:useBean id="info" class="chap11.MemberInfo" scope="request" />

<jsp:useBean>은 사용이 감소하고 있지만 JSP만을 이용해서 웹 어플리케이션을 구현해야 하는 경우에는 사용하곤 한다.

 

1) <jsp:useBean> 액션 태그의  동작 방식

  • 지정한 영역에 이미 id 속성에 해당하는 객체가 존재할 경우

객체를 새로 생성하지 않고 존재하는 객체를 그대로 사용한다.

  • 지정한 영역에 존재하지 않을 경우

class 속성에 명시한 타입을 이용해서 객체를 생성하고 지정한 영역에 생성한 객체를 저장한다.

 

  • scope 속성 값에 따라 객체는 서로 다른 기본 객체에 저장된다.
    "page" - pageContext 기본 객체
    "request" - request 기본 객체
    "session" - session 기본 객체
    "application" - application 기본 객체

즉, <jsp:useBean> 액션 태그를 사용하면 각 영역별로 공유할 테이터를 쉽게 저장할 수 있다.

 

<jsp:useBean> 액션 태그를 사용하여 MemberInfo 객체를 생성한 후 <jsp:forward>를 사용하여 다음 페이지로  흐름 이동

<%@ page  contentType="text/html; charset=EUC-KR" %>
<jsp:useBean id="member" class="chap11.MemberInfo" scope="request" />
<!-- 이름이 member인 객체를 생성하여 request 기본 객체 저장 -->
<% 
	member.setId("codingco");
	member.setName("코딩코");
%>
<jsp:forward page="useObject.jsp" />

▲ makeObject.jsp

<%@ page contentType="text/html; charset=EUC-KR" %>
<jsp:useBean id="member" class="chap11.MemberInfo" scope="request" />
<html>
<head><title>인사말</title></head>
<body>
<%= member.getName()%> (<%= member.getId() %>) 회원님
안녕하세요.
</body>
</html>

▲ useObject.jsp

▲ makeObject.jsp 실행 결과

makeObject.jsp를 실행하면 MemberInfo의 객체를 생성해서 request 기본 객체의 "member" 속성에 저장한 후 useObject.jsp로 포워딩한다.

 

useObject.jsp를 직접 실행하게 되면 request 기본 객체에 "member" 속성이 존재하지 않으므로 새롭게 MemberInfo 클래스 객체를 생성하게 되는데

useObject.jsp에서는 생성된 객체의 각 프로퍼티의 값을 변경해주지 않으므로 생성될 때의 초기값(null)이 출력된다.

useObject.jsp 실행결과

 

 

 


 

2. <jsp:setProperty>  액션 태그와 <jsp:getProperty> 액션 태그

<jsp:setProperty> 액션 태그와 <jsp:getProperty> 액션 태그를 사용하면 자바빈 객체의 프로퍼티를 변경하거나 읽어올 수 있다.

 

1) <jsp:setProperty> 액션 태그: 생성한 자바빈 객체의 프로퍼티 값을 지정

 ▼ 자바빈 객체의 name 프로퍼티 값을 "코딩코"로 지정하기

<jsp:useBean id="member" class="chap11.MemberInfo" />
<jsp:setProperty name="member" property="name" value="코딩코" />
  • name: 프로퍼티의 값을 변경할 자바빈 객체의 이름. <jsp:useBean> 액션 태그의 id 속성에서 지정한 값을 사용
  • property: 값을 지정할 프로퍼티의 이름
  • value: 프로퍼티의 값. 표현식 사용 가능

 

 a) vlaue 속성 대신 param 속성을 사용 할 수 있다. (함께 사용 불가능)

  ▼ memberId 파라미터 값을 자바빈 객체의 id 프로퍼티의 값으로 지정하기

<jsp:setProperty name="member" property="name" param="memberId" />

 

 b) proprerty 속성의 값을 " * " 로 지정하면 각각의 프로퍼티의 값을 동일한 이름의 파라미터의 값으로 설정한다. 

<jsp:useBean id="member" class="chap11.MemberInfo" />
<jsp:setProperty name="member" property="*" />

폼에 입력한 값을 자바 객체에 지정할 때 유용하게 사용할 수 있다.

 

 

2) <jsp:getProperty> 액션 태그: 자바빈 객체의 프로퍼티 값을 출력

<jsp:getProperty name="자바빈이름" property="프로퍼티이름" />
  • name: <jsp:useBean>의 id 속성에서 지정한 자바빈 객체의 이름
  • property: 출력할 프로퍼티의 이름

※ EL(Expression Language)의 사용으로 <jsp:getProperty>는 거의 사용되지 않는다.

 

 

3) <jsp:setProperty>와 <jsp:getProperty> 사용

 a) 회원 가입 양식에 값을 입력한 후, [회원가입] 버튼을 누르면 입력한 값을 출력해주는 페이지

<%@ page contentType="text/html; charset=EUC-KR" %>
<html>
<head><title>회원가입 입력 폼</title></head>
<body>

<form action="<%= request.getContextPath() %>/sep02/chap11/processJoining.jsp" method="post" >

<table border="1" cellpadding="0" cellspacing="0" >
<tr>
	<td>아이디</td>
	<td colspan="3"><input type="text" name="id" size="10"></td>
</tr>
<tr>
	<td>이름</td>
	<td><input type="text" name="name" size="10"></td>
	<td>이메일</td>
	<td><input type="text" name="email" size="10"></td>
</tr>
<tr>
	<td>주소</td>
	<td colspan="3"><input type="text" name="address" size="30"></td>
</tr>
<tr>
	<td colspan="4" align="center">
	<input type="submit" value="회원가입">
	</td>
</tr>
</table>
</form>
</body>
</html>

▲membershipFrom.jsp

실행 결과

 

 b) processJoining.jsp

<%@ page contentType="text/html; charset=EUC-KR" %>
<%
	request.setCharacterEncoding("euc-kr"); //읽어올 파라미터의 인코딩 지정(한글 깨지지 않게 하기 위함)
%>
<jsp:useBean id="memberInfo" class="chap11.MemberInfo" />
<jsp:setProperty name="memberInfo" property="*" />
<jsp:setProperty name="memberInfo" property="password" value="<%= memberInfo.getId() %>" />
<html>
<head><title>가입</title></head>
<body>
<table width="400" border="1" cellpading="0" cellspacing="0" >
<tr>
	<td>아이디</td>
	<td><jsp:getProperty name="memberInfo" property="id"/></td>
	<td>암호</td>
	<td><jsp:getProperty name="memberInfo" property="password"/></td>
</tr>
<tr>
	<td>이름</td>
	<td><jsp:getProperty name="memberInfo" property="name"/></td>
	<td>이메일</td>
	<td><jsp:getProperty name="memberInfo" property="email"/></td>
</tr>
<tr>
	<td>주소</td>
	<td colspan="3">
	<jsp:getProperty name="memberInfo" property="address"/></td>
</tr>
</table>
</body>
</html>

[회원가입] 버튼을 누르면 입력한 데이터가 POST 방식으로 processJoining.jsp에 전달되며

processJoining.jsp는 전달 받은 데이터를 MemberInfo 자바빈 클래스의 객체에 저장해서 화면에 출력해준다.

 

입력
회원가입 버튼 누른 후의 결과

 

 

 

'Dev > Java' 카테고리의 다른 글

싱글톤 (Singleton)  (0) 2022.09.16
세션 session  (0) 2022.09.02
include 디렉티브  (0) 2022.09.01
<jsp:include> 액션 태그  (0) 2022.09.01
객체 지향 프로그래밍  (0) 2022.08.26

댓글