자바 빈즈(Beans)


java.beans - JavaBeans 아키텍쳐(architecture)에 근거한 beans 컴퍼넌트의 개발에 관련한 클래스를 포함한다.

java.beans.beancontext - Bean 문맥에 관련한 클래스나 인터페이스를 제공한다.


JSP 에서는 자바로 작성한 자바 클래스 중 자바 빈즈 규약에 맞게 작성된 클래스를 JSP에서 사용 가능하며, 이를 통해서 프리젠테이션(웹 디자이너 측) 부분과 비즈니스 로직(개발자 측)을 처리하는 부분을 분리하여 개발할 수 있다. 이렇게 함으로써 웹의 내용으로부터 웹 표현을 분리함으로써 동적인 웹 페이지 제작을 위한 개발과 관리에 있어 명확한 작업의 분리가 가능하다. 


또한 동일한 기능이 페이지 구성이 달라서 반복적으로 사용되어지는 경우가 있을 경우에도 웹페이지를 효율적으로 작성, 수정하려면 반복적으로 사용되는 코드를 재사용 할 수 있어야 한다. 빈은 이와 같은 효율적인 코딩작업을 가능하게 한다.


자바 빈(JavaBean)은 데이터를 표현하는 것을 목적으로 하는 자바클래스다. 콤포넌트와 비슷한 의미로 사용되기도 한다. 자바빈은 자바빈 규칙을 따른다.


- 클래스는 직렬화되어야 한다.(클래스의 상태를 지속적으로 저장 혹은 복원 시키기 위해)

- 클래스는 기본 생성자를 가지고 있어야 한다.

- 클래스의 속성들은 get, set 혹은 표준 명명법을 따르는 메서드들을 사용해 접근할 수 있어야 한다.

- 클래스는 필요한 이벤트 처리 메서드들을 포함하고 있어야 한다.



예제) 위키 참조 (https://ko.wikipedia.org/wiki/자바빈즈)


빈즈 클래스 PersonBean.java


package beans; // 클래스 파일을 한 곳으로 묶기 위해 패키지를 지정해야 한다.


public class PersonBean implements java.io.Serializable {

// 자바 빈즈에 저장된 프로퍼티를 포함한 채로 파일시스템에 저장되거나 네트워크로 전송될 수 있도록 객체 직렬화를 제공해야 하므로 java.io.Serializable 인터페이스를 implement 한다. (생략 가능)


private String name; // 정보를 저장할 멤버 변수. 반드시 private로 선언.

private boolean coding;

public PersonBean() { // 인자가 없는 기본 생성자

}

public String getName() { // getter. 멤버 변수를 읽어와 외부로 전달. 

return name;

}

public void setName(String name) { // setter. 멤버 변수에 외부의 값을 저장하는 메소드

this.name = name;


// boolean은 멤버 변수를 읽는 메소드명에 get이 아니라 is를 붙인다.


public boolean isCoding() {

return this.coding;

}

public void setCoding(boolean coding) {

this.coding = coding;

}

}


위의 빈즈 클래스를 실행할 TestPersonBean.java


public class TestPersonBean {

public static void main(String[] args) {


PersonBean person = new PersonBean();

person.setName("Bob");

person.setCoding(true);


// Output: "Bob [coding]"

System.out.print(person.getName());

System.out.println(person.isCoding() ? " [coding]" : "");

}

}


결과) Bob [coding]




자바 빈을 사용하는 JSP


<jsp:useBean id="별칭" class="클래스명" scope="적용범위"/>

<jsp:setProperty name="별칭" property="멤버변수명" value="값"/>

<jsp:getProperty name="별칭" property="멤버변수명"/>


id : 해당 프로그램에서 사용하는 객체명

class : package명과 class명을 함께 기술

scope : 해당 bean의 유효범위를 지정

name : id에서 정의된 객체명


<% // file name : myBean.jsp %>

<jsp:useBean id="myB" class="PersonBean" scope="page"/>

<!-- 객체 내부로 값을 전달한다. -->

<jsp:setProperty name="myB" property="name" value="park.w.g"/>

<jsp:setProperty name="myB" property="age" value="100"/>

<!-- 객체 내부에 있는 값을 가져온다. -->

Name =  <jsp:getProperty name="myB" property="name"/>

Age =  <jsp:getProperty name="myB" property="age"/>

◇ scope(적용영역)의 종류


page : 해당 JSP페이지에만 적용된다.

request : 사용자의 요청을 처리하는 동안만 적용된다.

session : 사용자가 접속을 종료할 때 까지만 적용된다.

application : 해당 어플리케이션이 살아 있는 동안만 적용된다.





Posted by netyhobby
,