자바빈(Java Bean)이란?
JAVA로 만들어진 기능을 수행하는 컴포넌트(모듈)을 의미한다.
즉, Property(멤버변수)와 setter, getter 함수로 구성된 JAVA의 Class이다.
자바빈은 데이터를 읽어오거나 저장하는 역할을 반복적으로 수행하기 위해 사용되며,
위와 같이 구성된 class 파일은 VO(Value Object) 또는 DAO(Data Access Object) 등 데이터 교환을 위한 객체로 사용된다.
JAVA Bean 관련 액션 태그
1. useBean
<jsp:useBean id="객체명" class="클래스명" scope="유효범위" />
- 특정한 JAVA 객체를 사용한다고 명시할 때 사용
- application, session, request, page 보관소에 저장된 JAVA 객체를 꺼냄
- 만약 보관소에 저장된 객체가 없다면 새로 생성하여 해당 보관소에 저장
- 기본 생성자를 이용하여 객체를 생성하므로 JAVA 객체는 반드시 기본 생성자가 필요함
속성
- id : JSP 페이지에서 자바빈 객체에 접근할 때 사용하는 이름 (쉽게 변수라고 생각하자)
- class : 사용할 객체의 클래스명 - 반드시 패키지명을 포함하여 작성
- scope : 자바빈 객체가 저장될 영역(==보관소==유효범위)
- scope의 설정값 - page(기본값), request, session, application
- page : 현재 페이지의 범위에서만 유지 -> 페이지 처리가 끝나면 유효하지 않음
- request : request 요청을 받고 처리가 완료될 때까지 유지
- session : 웹 브라우저 종료 전까지 유지
- application : 서버 종료 전까지 유지 (가장 유효범위가 큼)
- scope의 설정값 - page(기본값), request, session, application
2. setProperty
<jsp:setProperty name="객체명" property="프로퍼티명" value="값" />
- 생성된 자바빈 객체에 setter 함수를 이용하여 프로퍼티 값을 설정할 때 사용
- setter 함수는 함수명으로 자동 매핑되므로 함수명 주의!
속성
- name : 프로퍼티 값을 설정할 자바빈 객체의 이름 == <jsp:useBean> 액션태그의 id 속성에서 지정한 값을 사용
- property : 값을 설정할 프로퍼티(필드)의 이름
- propert="*" 으로 설정할 경우 각각의 프로퍼티 값을 동일한 이름의 파라미터를 이용하여
setter 메소드를 생성한 모든 프로퍼티에 대해 값을 설정함
- propert="*" 으로 설정할 경우 각각의 프로퍼티 값을 동일한 이름의 파라미터를 이용하여
- value : 설정할 프로퍼티의 값. 표현식 사용가능
3.<jsp:getProperty>
<jsp:getProperty name="객체명" property="프로퍼티명" />
- getter 함수를 이용하여 저장된 프로퍼티 값을 읽어올 때 사용 (참고로, 사용빈도가 높지 않음)
- getter 함수 또한 함수명으로 자동 매핑되므로 함수명 주의!
속성
- name : 프로퍼티 값을 가져올 자바빈 객체의 이름 == 액션태그의 id 속성에서 지정한 값을 사용
- property : 값을 가져올 프로퍼티(필드)의 이름
예제)
[Bean 코드]
package test;
public class CalcBean { // 자바빈
// 프로퍼티
private int num1;
private int num2;
private String op;
private int result;
// getter, setter 메소드
public CalcBean() {
this.op = "";
this.result = 0;
}
public int getNum1() {
return num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
public int getNum2() {
return num2;
}
public void setNum2(int num2) {
this.num2 = num2;
}
public String getOperator() {
return op;
}
public void setOperator(String op) {
this.op = op;
}
public int getResult() {
return result;
}
public void setResult(int result) {
this.result = result;
}
public void calculate() {
if (this.op.equals("+")) {
this.result = this.num1 + this.num2;
} else if (this.op.equals("-")) {
this.result = this.num1 - this.num2;
} else if (this.op.equals("*")) {
this.result = this.num1 * this.num2;
} else if (this.op.equals("/")) {
this.result = this.num1 / this.num2;
}
}
}
[useBean 사용 코드]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<!-- 1. CalcBean 클래스에서 "기본 생성자"를 이용하여 calc 객체 생성 == 객체화 == 인스턴스화 -->
<jsp:useBean id="calc" class="test.CalcBean"/> <%-- 서블릿 파일로 변환 시 CalcBean calc = new CalcBean()와 같음 --%>
<!-- 2. setter 함수에 접근하는 태그 == 값 저장 -->
<jsp:setProperty property="*" name="calc"/>
<!DOCTYPE html>
<!-- 계산하는 기능 함수 호출 -->
<% if(request.getMethod().equals("POST")){ calc.calculate(); } %>
<html>
<head>
<meta charset="UTF-8">
<title>계산기 실습2</title>
</head>
<body>
<h2>계산기</h2>
<hr>
<form method="post" name="form1"> <!-- 일반적으로 form 태그는 Post방식으로 전달 -->
<input type="text" name="num1" id="num1"> <!-- name == id -->
<select name="op">
<option selected>+</option>
<option>-</option>
<option>*</option>
<option>/</option>
</select>
<input type="text" name="num2" id="num2">
<input type="submit" value="계산하기" name="btn1">
<input type="reset" value="다시입력" name="btn2">
</form>
<hr>
<h3>계산결과: <jsp:getProperty property="result" name="calc"/></h3> <!-- CalcBean의 결과값 result 받아오기 -->
</body>
</html>
※ 빈즈가 사용되는 시점
브라우저
--->> 요청 *.html(정적페이지) -> *.jsp(동적페이지)
--->> *.jsp에서 <jsp:useBean>으로 DAO 클래스 불러내어 사용 (컨트롤러)
--->> DB
--->> 뷰를 클라이언트에게 서비스
=> 빈즈 클래스는 "컨트롤러"에서 주로 사용하고, 뷰에 필요한 객체들을 만들어서 공급한다.
'개발 공부 > Spring' 카테고리의 다른 글
[Servlet / JSP] 서블릿과 JSP의 기본 개념 (0) | 2021.09.07 |
---|---|
[JSP] 커스텀 태그 (1) - 태그 파일 기반 (0) | 2021.09.02 |
[JSP] 표현 언어 EL - View를 View답게! (0) | 2021.09.02 |
[JSP] 액션 태그 (1) - forward, param, include (+ include 지시어와의 차이) (0) | 2021.08.28 |
[JSP/RSS] 네트워크 이론 (0) | 2021.08.19 |