* 자바 빈 (Bean)
- 정보의 덩어리, 즉 데이터 저장소(데이터 객체)
- 데이터를 저장하기 위한 필드 + 데이터를 컨트롤하는 getter/setter 메소드를 하나의 쌍으로 가지고 있는 클래스
- getter/setter 메소드는 자바빈의 필드에 데이터를 저장하고 조회하는 작업을 한다
ex) 회원가입 페이지의 경우 아이디/패스워드/... 등의 정보를 따로따로 서버에 전송하는 것이 아니라,
‘하나로 묶어서’ 전송하는 것이 더 효율적. 하나로 묶어서 관리하는 메커니즘으로 자바빈 등장
자바 빈 만들기
- 패키지 선언
com.lec.beans.클래스이름(빈(bean) 클래스명) - 필드 선언
private String name; // 이름을 저장할 필드 선언
private String userid; // 아이디를 저장할 필드 선언 - getter/setter 메소드 정의 (프로퍼티 방식)
프로퍼티: private 필드를 외부에서 접근하기 위해서 공개형 접근제어자
public 으로 메소드를 정의해 놓고 이를 통해서
간접적으로 필드에 접근하는 방식
: 필드형태로 기술하고 간접적을 메소드를 호출하는 것
* 자바빈 과 관련된 액션 태그
<jsp:useBean> --> 자바 빈을 생성
<jsp:getProperty> --> 자바 빈에서 정보를 얻어온다.
<jsp:setProperty> --> 자바 빈에 정보를 저장한다.
<jsp:useBean> 기본 형식
<jsp:useBean class="클래스 풀 네임" id="빈 이름" [scope="범위"] />
<jsp:getProperty> 형식
<jsp:getProperty name="빈 이름" property="프로퍼티 이름"/>
:회원의 이름을 얻기 위해서 getName()호출하는 것과 같음
<jsp:setProperty>형식
<jsp:setProperty name="빈 이름" property="프로퍼티 이름" value="값"/>
* 자바 클래스 생성
패키지 com.lec.beans에 Person.java 클래스 생성
package com.lec.beans;
public class Person {
// 필드
private String name;
private int age;
private int id;
private String gender;
// 생성자들
public Person() {
System.out.println("Person() 생성");
}
public Person(String name, int age, int id, String gender) {
super();
System.out.printf("Person(%s, %d, %d, %s) 생성\n", name, age, id, gender);
this.name = name;
this.age = age;
this.id = id;
this.gender = gender;
}
// getter / setter 메소드 정의
public String getName() {
System.out.println("getName() 호출");
return name;
}
public void setName(String name) {
System.out.println("setName(" + name + ") 호출");
this.name = name;
}
// public void setname(String name) {
// System.out.println("setname(" + name + ") 호출");
// this.name = name;
// }
public int getAge() {
System.out.println("getAge() 호출");
return age;
}
public void setAge(int age) {
System.out.println("setAge(" + age + ") 호출");
this.age = age;
}
public int getId() {
System.out.println("getId() 호출");
return id;
}
public void setId(int id) {
System.out.println("setId(" + id + ") 호출");
this.id = id;
}
public String getGender() {
System.out.println("getGender() 호출");
return gender;
}
public void setGender(String gender) {
System.out.println("setGender(" + gender + ") 호출");
this.gender = gender;
}
}
Person.java
필드를 정의하고 ‘생성자들’과 ‘getter/setter 메소드들’을 만들어 완성 - source -> generate getter setter
테스트를 위하여 각 생성자와 getter/setter 들 호출될때 메세지 출력
* JSP 파일 생성
webapp 밑에
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="person1" class="com.lec.beans.Person"/>
<%-- 다음과 같은 일 수행
Person person1 = new com.lec.beans.Person(); // 기본생성자 호출
request.setAttribute("person1", person1); //<-- 좀더 정확히는 이코드까지 수행
--%>
<!-- 기본생성자 생성후 useBean 안에서 setProperty 사용 -->
<jsp:useBean id="person2" class="com.lec.beans.Person">
<jsp:setProperty name="person2" property="name" value="명기범"/>
<jsp:setProperty name="person2" property="age" value="26" />
<jsp:setProperty name="person2" property="id" value="998877" />
<jsp:setProperty name="person2" property="gender" value="남" />
</jsp:useBean>
<%-- form 에서 넘어온 값을 bean 객체가 바로 받을수 있다
bean 의 필드명(getter/setter명) 과 form 의 name 이 일치해야 한다 --%>
<jsp:useBean id="person3" class="com.lec.beans.Person"/>
<jsp:setProperty name="person3" property="name"/> <%-- value 가 없다? --%>
<jsp:setProperty name="person3" property="age"/>
<jsp:setProperty name="person3" property="id"/>
<jsp:setProperty name="person3" property="gender"/>
<%-- 다음과 같이 실행되었다고 볼수 있다
person3.setGender(request.getParameter("gender")) --%>
<%-- parameter 를 일괄로 받아올수 있다!! --%>
<jsp:useBean id="person4" class="com.lec.beans.Person"/>
<jsp:setProperty name="person4" property="*"/>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>자바빈</title>
</head>
<body>
<jsp:setProperty name="person1" property="name" value="고길동"/>
<jsp:setProperty name="person1" property="age" value="24"/>
<jsp:setProperty name="person1" property="id" value="1515"/>
<jsp:setProperty name="person1" property="gender" value="남"/>
<%-- 다음과 같은 일을 수행한다.
person1.setName("고길동");
person1.setAge(24);
person1.setId(1515);
person1.setGender("남");
--%>
<h3>person1</h3>
이름: <jsp:getProperty name="person1" property="name" /><br>
나이: <jsp:getProperty name="person1" property="age"/> <br>
아이디: <jsp:getProperty name="person1" property="id"/> <br>
성별: <jsp:getProperty name="person1" property="gender"/> <br>
<%-- 다음과 같은 일을 수행한다
<%= person1.getName() %>
<%= person1.getAge() %>
<%= person1.getId() %>
<%= person1.getGender() %>
--%>
<h3>person2</h3>
이름: <jsp:getProperty name="person2" property="name" /><br>
나이: <jsp:getProperty name="person2" property="age"/> <br>
아이디: <jsp:getProperty name="person2" property="id"/> <br>
성별: <jsp:getProperty name="person2" property="gender"/> <br>
<h3>person3</h3>
이름: <jsp:getProperty name="person3" property="name" /><br>
나이: <jsp:getProperty name="person3" property="age"/> <br>
아이디: <jsp:getProperty name="person3" property="id"/> <br>
성별: <jsp:getProperty name="person3" property="gender"/> <br>
<h3>person4</h3>
이름: <jsp:getProperty name="person4" property="name" /><br>
나이: <jsp:getProperty name="person4" property="age"/> <br>
아이디: <jsp:getProperty name="person4" property="id"/> <br>
성별: <jsp:getProperty name="person4" property="gender"/> <br>
</body>
</html>
BeanBasic.jsp
useBean, setProperty, getProperty 사용
id 속성의 값이 변수명화(?) 되어 생성됨. (기본생성자)
name 속성의 값이 그대로 변수명이 된다.
property 속성의 값으로 그대로 앞에 set이 붙여져서 getter/setter 메소드가 호출된다.
- 기술적으로 정확한 설명은 x
form.html 작성
자바빈을 통해서 form 에서 서버로 submit 된 parameter 들을 한번에 받을 수 있습니다.
property="*" parameter 일괄 처리 가능!
* 자바 빈의 Scope
자바빈의 영역(Scope)은 총 ‘4가지의 스코프 영역’이 있다.
1. page(기본값) : 현재 페이지의 범위에만 한정, 페이지 처리가 끝나면 유효하지 않는다.
2. request : request의 생명주기는 요청을 받고 요청처리를 완료하는 시점이다. 따라서, 빈의 Scope는 request의 생명주기와 같다.
3. session : 세션의 생명주기는 설정된 유효시간이다. 따라서 빈의 스코프는 세션의 유효시간동안 유효
4. application : 웹사이트가 실행되는 동안 (즉 웹 어플리케이션이 실행되는 동안) 유효
'JSP' 카테고리의 다른 글
[JSP] DAO, DTO (0) | 2022.04.06 |
---|---|
[JSP] JBDC (0) | 2022.04.06 |
[JSP] 세션(Session) (0) | 2022.03.31 |
[JSP] 쿠키 (0) | 2022.03.25 |
[JSP] 액션 태그 (0) | 2022.03.24 |