본문 바로가기

Application/JSP Server

[JSP] 6. 자바빈

반응형

자바빈

 

회원가입 페이지에서 입력된 정보의 서버 전송 방법

1. 개별적으로 전송

2. 묶어서 전송

 

자바빈 : 정보의 덩어리 즉 데이터 저장소

 

프로그램에서 사용되는 정보를 객체를 구성하는 멤버로 기술해 두고 한꺼번에 데이터에 접근해서 사용

 

데이터를 저장하기 위한 필드와 데이터를 컨트롤하는 getter/setter 메소드를 하나의 쌍으로 가지고 있는 클래스

 

[OOP : 속성과 기능 / 자바 : 필드와 메소드]

 

[getter/setter : 자바 빈의 필드에 데이터를 저장하고 조회하는 작업]

 

 

	<% 
	member.setName(request.getParameter("name"));
	member.setUserid(request.getParameter("setUserid"));
	member.setNickname(request.getParameter("setNickname"));
	member.setPwd(request.getParameter("setPwd"));
	member.setEmail(request.getParameter("setEmail"));
	member.setPhone(request.getParameter("setPhone"));
	%>

 

<jsp:setProperty property="*" name="member"/>

-> 액션태그를 사용해 데이터를 담기 위한 getter/setter/를 명시적 호출 하지 않고 자동 호출 가능

 

자바빈은 액션태그와 함께 사용해
코드의 양을 줄이고 쉽게 정보를 담아 옮길 수 있다.


자바빈 클래스 만들기

자바 빈은 필드와 getter/setter 메소드를 하나의 쌍으로 갖는 클래스.

 

자바 빈 클래스 정의하기

 

public class Memberbean{ //자바 빈 클래스 정의

 

}

 

패키지 선언 방법

 

패키지는 유사한 기능을 모은 클래스를 담은 라이브러리

동일한 이름의 클래스가 필요한 경우엔 패키지 이름을 다르게 동일한 이름의 클래스를 서로 다른 패키지에 사용

 

package 패키지이름;

 

패키지의 규칙

도메인이름.폴더이름.클래스이름 -> com.saeyan.javabeans.MemberBean -> 패키지 이름.클래스 이름

 

package com.saeyan.javabeans; //패키지명



public class MemberBean{ //자바 빈 클래스 정의

}

 

 

필드 선언하기

회원 정보 입력 폼

package com.saeyan.javabeans; //패키지명



public class MemberBean{ //자바 빈 클래스 정의
	private String name;
    private String userid;
    private String nickname;
    private String pwd;
    private String email;
    private String phone;
}

-> 제한자 설정해 외부에서 직접 접근을 막고 메소드를 이용하도록 지정

 

자바 빈 프로퍼티

property : public으로 지정된 메소드로 간접적으로 필드에 접근하는 방식

 

public class MemberBean{ //자바 빈 클래스 정의
	private String name;
    
    //getter(필드 값을 알려줌)
    public String getName(){
    return name; //회원의 이름을 알려줌
    }
    
    //setter(필드 값을 변경함)
    public void setName(String name){
    this.name=name; //회원의 이름을 전달받은 값으로 변경함
    }
    ...
}

프로퍼티의 구성

private 필드와 public 메소드 (getXxx, setXxx)로 구성

 

필드 값을 읽어오기 위해선 get 다음에 첫 글자만 대문자로 지정해 메소드를 정의해야 한다. [name -> getName]

 

public String getName(){
	return name;
}

getName은 내부에 저장된 값을 외부에 전달하는 용도로 파라미터는 없고 필드와 동일한 리턴형을 가짐

 

setName: 외부에서 필드에 값을 저장하기 위한 메소드. private 필드를 다루기 위해 public으로 선언

public void setName(String name){
	this.name=name;
}

 

매개변수가 필드와 이름이 동일한 경우에는 필드 앞에 this를 붙여서 매개 변수와 구분한다.

this : 객체 자신을 참조할 수 있는 레퍼런스

MemberBean memberBean = new MemberBean(); // 객체 생성
memberBean.setName("전수빈"); //레퍼런스 변수로 메소드 참조

 

this 레퍼런스 변수의 특징

  • 메소드 내부에서 선언 없이도 지역 변수처럼 사용
  • 자기 자신만을 가리키는 레퍼런스
  • 메소드 내부의 모든 필드와 메소드 앞에 암시적으로 사용
  • 필요에 따라 명시적 사용 가능
·This의 암시적 사용 ·This의 명시적 사용
String getName(){
return name;
}
String getName(){
return this.name;
}
·매개 변수의 이름이 필드와 다름 ·매개 변수의 이름이 필드와 같음
void setName(String argName){
//필드에 매개 변수의 값을 저장
name=argName;
}
void setName(String name){
//매개 변수에 매개 변수의 값을 저장
this.name=name;
}

 

package javabeanspack;

public class JavaBeansClass {
	private String name;
	private String userid;
	private String nickname;
	private String pwd;
	private String email;
	private String phone;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getUserid() {
		return userid;
	}
	public void setUserid(String userid) {
		this.userid = userid;
	}
	public String getNickname() {
		return nickname;
	}
	public void setNickname(String nickname) {
		this.nickname = nickname;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	

}

자바 빈 관련 액션태그

<jsp : useBean> : 생성한다.

<jsp : getProperty> : 정보를 얻어온다.

<jsp : setProperty> : 정보를 저장한다.

 

<jsp:usebean> 액션태그

JSP와 자바 빈을 연결하기 위한 자바 빈 백체를 생성

 

<%@ page import="com.saeyan.javabeans.MemberBean" %>
<%
MemberBean member=new MemberBean();
%>

-> 액션 태그에서 빈 객체를 생설할 경우엔 패키지를 포함한 형태의 클래스 이름을 적어야한다.

 

import 속성을 갖는page 지시자 추가

<%
com.saeyan.javabeans.MemberBean member=new com.saeyan.javabeans.MemberBean();
%>

->생성한 객체는 레버런스변수로 접근 가능하다.

 

레퍼런스 변수로 이름과 아이디를 얻어오는 getter 호출

<%=member.getName()%>
<%=member.getUserid()%>

 

레퍼런스변수로 이름과 아이디에 새로운 값 설정하는 setter 호출

<%
member.setName("전수빈");
member.setUserid("pinksubin");
%>

 

<jsp:useBean> 기본형식

<jsp:useBean class="클래스 풀 네임"
		id="빈이름"
                [scope="범위"] />

객체를 생성하기 위해서는 class 속성에 패키지 포함한 풀네임을 기술해야한다.

id속성은 자바 빈 객체의 이름을 기술하고 scope 속성에는 유효범위 지정[page, request, session, application]

 

<jsp:useBean class="com.sawyan.javabeans.MemberBean"
    id="member"
    scope="page" />

 

위 태그 실행시 다음 코드 자동생성

<%
com.saeyan.javabeans.MemberBean member=new com.saeyan.javabeans.MemberBean();
pageContext.setAttribute("member", member);
%>

 

class 속성 값은 자바에서 객체를 생성할 때 기술한 클래시 이름과 매핑된다.

id  속성 값은 자바에서 객체를 생성할 때 기술한 레퍼런스 변수와 매핑된다.

scope 속성 값은 생략한다면 page가 기본적으로 설정된다.

 

 

<jsp:property> 액션태그

정보를 얻어오는 액션태그

 

<%= member.getName() %>

 

<jsp:getProperty name="member" property="name" />

 

 

JSP에서 HTML태그와 자바코드를 혼용하지 않고 HTML과 함께 액션태그를 사용

 

getter를 호출하는 property 액션태그 형식

<jsp : getProperty name="빈이름"
	property="프로퍼티이름"
/>

 

name 속성에는 <jsp:useBean>태그에서 id와 반드시 일치해야한다.

[usebean 액션태그의 id값과 일치하는 "member'를 getProperty태그의 name 속성값으로 기술해 정보를 얻어온다.]

 

property 속성은 자바 빈을 구성하는 여러개 필드값을 알려주기 위해 알맞은 getter를 호출한다.

 

->name 속성 값은 메소드 앞에 붙은 레퍼런스 변수인 member를 의미

->property 속성 값으로 "name"을 설정하면 getName()을 호출

 

 

<jsp:setproperty> 액션태그

새로운 값을 설정하는 액션태그

 

setter인  setName()을 호출해 name에 간접접근

 

<% member.setName("전수빈"); %>

 

setproperty의 형식

<jsp:setProperty name="자바빈이름" property="프로퍼티이름" value="값"
<jsp:setProperty name="자바빈이름" property="*""

-> *로 설정하면 모든 멤버변수를 가져온다.

 

<jsp:setProperty name="member"
		property="name"
            value="전수빈"
/>

 

setproperty의 속성

  • name
    • <jsp:useBean>태그에서 id로 설정한 값과 일치
  • property
    • 속성값 "name"의 첫글자를 대문자로 해 setName()이 setter가 된다
  • value
    • 변경할 값을 전달
    • 새롭게 변경할 값을 value 속성에 기술

자바빈의 구현

  1. 데이터베이스 연동을 포함해서 데이터와 여러 기능을 함께 구현하는 방법 (DO, DAO클래스의 통합 형태)
  2. 데이터 매핑과 데이터베이스 처리를 분리해서 구현하는 방법(DO, DAO클래스의 분리 형태)
  3. 별도의 O-R 매핑 프레임워크를 사용하는 방법

 

반응형