JSP

[JSP] 자바 빈

shb 2022. 4. 5. 18:12

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