○ JavaBeans
자바 빈즈는 자바 프로그램에서 특정한 작업인 비즈니스 로직을 독립적으로 수행하는 하나의 프로그램 단위이다
JSP 자바 빈즈는 JSP의 표준 액션 태그로 접근할 수 있는 자바 클래스로서 값을 가지는 속성(멤버변수)과
값을 설정하는 메소드(setter), 값을 추출하는 메소드(getter)로 이루어져 있다
자바 빈즈는 하나의 JSP 페이지에 종속적으로 사용되는 것이 아니라, 여러 JSP 페이지에서 사용될 수 있다
자바 빈즈는 다른 자바 클래스와 마찬가지로 자바 객체이다
자바 뿐만 아니라 일반 프로그래밍 분야 중 큰 프로그램에서 독립적으로 수행되는 하나의 작은 프로그램을 Component라고 부른다
그러므로 자바 빈즈는 자바 프로그램에서 컴포넌트이며, 넓은 의미로 자바의 모든 클래스를 의미할 수도 있다
이러한 자바 빈즈를 활용한다면 한 번 작성된 자바 빈즈는 여러 응용 프로그램에서
재사용하여 프로그램 개발 시간을 단축할 수 있는 장점이 있다
■ 자바 빈즈의 장점
- 폼 데이터 처리가 용이 : 자바 빈즈를 사용하면 액션 태그를 한 번만 사용해서 모든 값을 추출하여 객체에 저장할 수 있다
- 자바 빈즈 활용 범위 확장 용이 : 웹에서 사용하는 HTTP 프로토콜의 무상태 특성 때문에 상태 정보 유지 기술이 필요하다
여러 페이지에서 사용해야 하는 데이터는 자바 빈즈를 이용하여 쉽게 유지하여 여러 범위에서 사용할 수 있다 - 컴포넌트 기반 구현 가능 : JSP 페이지 내에서 필요한 비즈니스 로직을 컴포넌트로 만들어 활용하면 JSP 페이지의 크기는 작아지고,
각 JSP 페이지에서 필요로 하는 기능은 컴포넌트 재활용을 통해 구현되므로 웹 애플리케이션을 효과적으로 구현할 수 있다
JSP 페이지 내에서 자바 빈의 활용은 표준 액션 태그로 수행한다
<jsp:useBean>, <jsp:setProperty>, <jsp:getProperty> 가 JSP 자바 빈즈를 활용할 때 사용하는 표준 액션 태그이다
useBean Action Tag
Bean 클래스를 찾거나 인스턴스화하는 데 사용한다
Bean 클래스의 Bean 오브젝트가 이미 작성된 경우 범위에 따라 Bean을 작성하지 않는다
Bean의 오브젝트가 작성되지 않으면 Bean을 인스턴스화한다
■ 형식
<jsp:useBean id="빈 이름" class="자바 빈 클래스 이름" scope="범위" />
■ 속성
- id : JSP 페이지에서 자바 빈 객체에 접근할 때 사용하는 이름이다. 주어진 페이지에서 자바 빈즈 객체를 식별할 수 있는 유일한 명칭
(자바로 따지면 객체 변수명) - class : 사용하려는 자바 빈즈 객체의 실제 클래스명을 패키지명과 함께 지정한다
- scope : useBean을 이용해서 만든 자바 빈 객체의 범위를 지정하는 속성이다
(page, request, session, application 중 하나를 값으로 갖는다. 기본값은 page)
scope 속성의 값
- page : 하나의 JSP 페이지에서만 사용
- request : jsp:forward에 의해 request객체를 받은 page 모두에 적용
(요청이 처리되는 동안 forward, include된 페이지 간에 사용 - session : 링크에 의해 이동하는 page 모두에 적용(클릭을 통해서 이동하는 모든 page)
(클라이언트 단위로 사용) - application : 응용 프로그램이 종료되는 시점까지 모든 page에 적용됨
(웹 어플리케이션 단위로 사용)
받는 페이지에서는 useBean을 사용하여 주는 page와 동일한 scope 속성을 사용해야 자바 코드를 사용할 수 있다
하지만 Expressoin Language로 단순히 출력하기 위해서라면 useBean을 사용하지 않아도 객체에 접근할 수 있다
■ useBean 액션 태그의 사용
<jsp:useBean id="test" class="ClassName"/>
(=)
<% ClassName test = new ClassName();%>
(useBean 액션 태그를 자바 코드로 나타낸 것이다)
ex)
<jsp:useBean id="score" class="javabean.GradeBean" scope="page" />
(=)
<% javabean.GradeBean score = new javabean.GradeBean(); %>
(useBean 액션 태그를 자바 코드로 나타낸 것이다)
<jsp:useBean id="test" class="ClassName" scope="application" />
<jsp:setProperty name="test" property="name" value="Tony" />
//useBean의 id값과 setProperty의 name값이 같아야 연결된다
<jsp:setProperty name="test" property="name" param="userName" />
//name이 'userName'인 태그의 값을 읽어와 Bean 객체인 test의 name 값을 지정한다
//자바 빈 클래스의 setName() 메소드와 자동 연동된다
//즉 프로퍼티 name은 자바 빈 클래스의 name 프로퍼티를 의미한다
=> <% test.setName(request.getParameter("userName")); %>
(useBean 액션 태그를 자바 코드로 나타낸 것이다)
<jsp:useBean id="test" class="ClassName" scope="application" />
<jsp:getProperty name="test" property="name" />
=> <%= test.getName() %>
(useBean 액션 태그를 자바 코드로 나타낸 것이다)
setProperty Action Tag
생성된 자바 빈 객체에 프로퍼티 값을 지정하는 기능을 한다
■ 속성
- name : 프로퍼티 값을 변경할 자바 빈 객체의 이름을 지정한다. jsp:useBean 액션 태그의 id 속성에서 지정한 값을 사용(필수)
- property : 값을 지정할 프로퍼티의 이름을 지정한다
- value : 프로퍼티에 저장할 값을 기술한다(생략 가능. 표현식 사용 가능)
- param : param 속성에 할당된 값과 같은 name을 가진 태그의 값으로 자바 빈의 속성값을 설정한다
Property 속성값을 ' * '로 주면 모든 프로퍼티 값이 세팅된다 그러나 <form>으로부터 넘어오는 파라미터의 이름과 개수가 프로퍼티의 이름과 개수와 일치해야 한다
<jsp:useBean id="testBean" class="ClassName" scope="page">
<jsp:setProperty name="testBean" property="*" />
</jsp:useBean>
폼으로부터 넘어온 파라미터 명과 자바빈의 프로퍼티가 일치하지 않는 경우 param 속성을 기술해야 한다
<jsp:useBean id="testBean" class="ClassName" scope="page">
<jsp:setProperty name="testBean" property="name" param="userName" />
</jsp:useBean>
getProperty Action Tag
자바 빈 객체에서 저장된 프로퍼티 값을 사용하기 위해 사용된다
■ 속성
- name : 프로퍼티 값을 불러올 자바 빈 객체의 이름을 지정한다. jsp:useBean 액션 태그의 id 속성에서 지정한 값을 사용(필수)
- property : 값을 불러올 프로퍼티 명을 기술한다(필수)
<jsp:useBean id="testBean" class="com.bean.testBean" scope="page" />
<jsp:getProperty name="testBean" property="name" />
useBean으로 생성한 testBean의 name 속성을 가져온다
실행 코드(Bean 파일)
실행 코드(html 파일)
실행 코드(jsp 파일)
실행 결과
'JSP' 카테고리의 다른 글
config와 application 내장 객체 (0) | 2020.07.03 |
---|---|
out과 exception 내장 객체 (0) | 2020.07.03 |
forward 액션 태그와 include 액션 태그 (0) | 2020.06.30 |
JSP의 Action Tag (0) | 2020.06.29 |
JSP의 request와 response (0) | 2020.06.28 |