본문 바로가기
WEB/JSP Servlet

자바빈 (JavaBeans)

by 노랑파랑 2016. 10. 27.
반응형




자바빈 (JavaBeans)

* JSP 기반 웹 어플리케이션에서 정보를 표현할 때 사용하는 것.

* 속성(데이터), 변경 이벤트, 객체 직렬화를 위한 표준이다. JSP에서의 속성을 표현하기 위해 사용된다.

* 예 ) 회원정보, 게시판 글 등의 정보를 출력할 때, 벙조를 저장하고 있는 자바빈 객체를 사용하게 된다.

* 자바빈 클래스 (=자바빈) 구조

public class BeanClassName implements java.io.Serializable {

// 값을 저장하는 필드
private String value;

// BeanClassName의 기본 생성자
public BeanClassName(){ 

>// 필드의 값을 읽어오는 값
public String getValue() {
return value;
}

// 필드의 값을 변경하는 값
public void setValue(String value){
this.value = value;
}



1. 자바빈 프로퍼티

* 자바빈에 저장되는 값.

* 메소드 이름을 이용해 프로퍼티의 이름을 결정한다.

* 프로퍼티 값을 변경하는 메소드는 프로퍼티 이름 중 첫 글자를 대문자로 변환한 문자열 앞에 set을 붙인다. 

* 프로퍼티 값을 읽어오는 메소드는 프로퍼티의 이름 중 첫 글자를 대문자로 변환한 문자열 앞에 get을 붙인다.

* 프로퍼티 타입이 boolean일 경우 get대신 is를 붙일 수 있다.

// 프로퍼티 값을 변경하는 메소드 - 프로퍼티 이름 maxAge
public void setMaxAge(int value);

// 프로퍼티 값을 읽어오는 메소드 - 프로퍼티 이름 maxAge
public int getMaxAge();


<!--    또는 프로퍼티 값을 실제 저장하는 필드 이름과 프로퍼티 이름이 달라도 된다-->

private int maximumAge = 0;
public void setMaxAge(int maxAge){
maximumAge = maxAge ;
}
public int getMaxAge(){
return maximumAge;
}


<1-- 프로퍼티 타입 boolean, 프로퍼티 이름 finished -->
public boolean isFinished() {
}
public void setFinished(boolean finished){
}

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

1) 읽기 전용 프로퍼티 : get 또는 is 메소드만 존재하는 프로퍼티

2) 읽기/쓰기 프로퍼티 : get/set 또는 is/set 메소드가 존재하는 프로퍼티

* 배열로 자바빈 프로퍼티를 정의할 수도 있다.

//배열
public int[] getMark()
public void setMark(int[] values)

//특정 원소
public int getMark(int index)
public void setMark(int value, int index)



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

* JSP 페이지의 주된 기능은 데이터를 보여주는 기능이다. 게시판 글 목록, 글 읽기 등 이런 종류의 데이터들은 가바빈과 같은 클래스에 담아서 값을 보여주는 것이 일반적이다. 

* 때문에 JSP 규약은 빈번히 사용되는 자바빈 객체를 위한 액션태그를 제공하는데, 이런 액션 태그를 사용하면 자바빈 객체를 생성하거나, 빈의 프로퍼티를 출력하거나 값을 변경할 수 있다. 


1) <jsp:useBean> 액션 태그로 객체 생성

* JSP 페이지에서 사용할 자바빈 객체를 지정할 때 사용

* 기본 구문

<jspLuseBean id="[빈이름]" class="[자바빈 클래스 이름]" scope="[범위]" />

id : 자바빈 객체에 접근할 때 사용할 이름을 지정, 이미 지정한 이름의 속성 값이 존재하면 기존의 객체를 그대로 사용한다.

class : 패키지 이름을 포함한 자바빈 클래스의 완전한 이름을 입력

scope : 자바빈 객체를 저장할 영역을 지정. page (기본값), request, session, application 중 하나의 값을 갖는다.


* 예

// <jsp:useBean> 액션 태그
<jsp:useBean id="info" class="exam.member.MemberInfo" scope="request" />

// 위는 다음과 같은 코드가 실행된다.
MemberInfo info = new MemberInfo();
request.setAttribute("info", info);

// 이미 id 속성에 지정한 이름의 속성값이 존재하면 위 액션태그는 다음과 같다.
MemberInfo info = (MemberInfo)request.getAttribute("info");
if ( info == null) {
info = new MemberInfo();
request.setAttribute("info", info);
}

* 즉, <jsp:useBean> 액션 태그는 지정한 영역에 저장하고, 이미 그 영역에 객체가 존재하면 그 객체를 사용한다. 때문에 영역별로 공유할 데이터를 쉽게 저장할 수 있게 된다.

* scope 속성 값에 따라 서로 다른 객체에 저장된다.

1) page : pageContext 기본 객체

2) request : request 기본 객체

3) session : session 기본 객체

4) application : application 기본 객체

* class 속성 대신에 type 속성을 사용할 수 있다. 이 속성을 사용하면 이미 객체가 존재한다고 가정하여 없으면 에러를 발생시킨다.



2) <jsp:setProperty> 액션 태그

* 생성한 자바빈 객체의 프로퍼티 값을 변경할 수 있다.

* 기본 구문

<jsp:setProperty name="[자바빈]" property="이름" value="[값]" />

name : 프로퍼티의 값으로 변경할 자바빈 객체의 이름을 지정한다. <jsp:useBean>태그에서 이용한 id 속성값을 사용한다.

property : 값을 지정할 프로퍼티의 이름을 지정한다.

value : 프로퍼티 값을 지정한다. 표현식(<%= 값%>)이나 EL(${값})을 사용할 수 있다. 

// 자바빈 객체의 name ㅡ로퍼티 값을 "홍길동"로 지정
<jsp:useBean id="member" class="exam.member.MemberInfo" scope=""/>
<jsp:setProperty name="member" property="name" value="홍길동"/>

* value 속성 대신 param 속성을 사용할 수 있다. param 속성은 파라미터 값으로 프로퍼티 값으로 지정할 때 사용된다. 예를들어, MemberId 파라미터의 값을 자바빈 객체의 id 프로퍼티 값으로 지정하고 싶다면 param 속성을 이용한다. 

* value 속성과 param 속성은 함께 사용할 수 없다.

* property 속성값을 별표(*)로 지정하면 각 프로퍼티의 값을 같은 이름을 갖는 파라미터의 값으로 지정한다. 



3) <jsp:getProperty>

* 자바빈 객체의 프로퍼티 값을 출력할 때 사용된다.

* 기본 구문

<jsp:getProperty name="자바빈이름" property="프로퍼티 이름"/>

name : <jsp:useBean>의 id 속성에 지정한 자바빈 객체의 이름을 지정.

property : 출력할 프로퍼티 이름을 지정.



4) 자바빈 프로퍼티 타입에 따른 값 매핑

* 프로퍼티 타입이 int인 경우 <jsp:setProperty>

<jsp:setProperty name"someBean" property="width" value="100"/>

* <jsp:setProperty> 액션 태그는 value 값을 프로퍼티 타입에 따라 알맞게 값을 변환하여 저장하는 처리를한다.

* 프로퍼티 타입에 따른 값 매핑

프로퍼티 이름 

변환 방법 

기본값 

boolean / Boolean 

Boolean.valueOf(String)을 값으로 갖는다 

 false 

byte / Byte 

byte.valueOf(String)을 값으로 갖는다 

 (byte) 0 

short / Short 

short.valueOf(String)을 값으로 갖는다 

 (short) 0 

char / Char 

입력한 값의 첫 번째 글자를 값으로 갖는다 

 (char) 0

int / Integer

Integer.valueOf(String)을 값으로 갖는다 

 0 

long / Long

Long.valueOf(String)을 값으로 갖는다 

 0L 

double / Double 

Double.valueOf(String)을 값으로 갖는다. 

 0.0 

float / Float 

Float.valueOf(String)을 값으로 갖는다 

 0.0f 



☆ <jsp:useBean> 감소 이유

*  MVC를 이용하는 경우 로직은 자바 클래스에서 처리하고 JSP를 통해 결과를 출력하게 된다. 클래스에서는 이 액션태그를 사용할 수 없기 때문에 request.getParameter() 메소드를 이용해 파라미터 값을 읽어와 자바 객체에 저장하거나 <jsp:useBean> 액션 태그와 비슷한 기능을 제공하는 모듈을 사용하게 된다. 따라서 MVC 프레임 워크를 사용하게 되면 위 액션 태그를 사용할 일이 없다. 

* 또한 표현 언어의 추가로 액션 태그를 사용할 때보다 더 간결하게 코드를 작성해 이용할 수 있기 때문이다. 

액션코드 : <jsp:getProperty name="memberInfo" property="email"/>

표현언어 : $(memverInfo.emeil)

* 스프링 프레임워크처럼 MVC를 지원하는 프레임워크의 도입과 표현언어의 사용으로 위 세 액션태그 <jsp:useBean> <jsp:setroperty> <jsp:getProperty>의 사용 빈도는 점점 낮아지고 있다. 

반응형

'WEB > JSP Servlet' 카테고리의 다른 글

세션, 기본 객체 : seesion  (0) 2016.10.28
쿠키  (0) 2016.10.28
에러 처리 : 익셉션, 에러 페이지  (0) 2016.10.27
기본객체 : out, pageContext, application, 속성 사용  (0) 2016.10.27
웹 어플리케이션 폴더  (0) 2016.10.27