자바빈 (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 |