크게 봤을 때 자바빈은 모든 자바의 클래스를 의미함 !

근데 여기서 쓰는 useBean은 좁은의미의 자바빈을 의미한다

그럼 또 좁은의미의 자바빈은 뭘까

클래스 중에서도 private 계열의 클래스라고 생각하면 된다

private 클래스의 가장 중요한 특징은 바로 getter,setter를 이용하는거! 그래서 그걸 이용하는 property를 바로다음에 정리 할 거임 ! 

useBean은 자바빈 객체 생성 시 사용한다

역시 말은 어려우니 바로실전에 들어가자...

 

useBean의 속성은 총 3가지가 있다(id,class,scope)

<jsp:useBean id=" "/>   생성될 자바빈 개체의 이름-인스턴스 변수 역할을 함

<jsp:useBean class=" "/>   클래스의 패키지를 포함한 Full Name을 명시한다. ( 이건 import한 것과 같은 효과)

<jsp:useBean scope=" "/>    자바빈의 유효 범위 와 공유범위 명시   page(디폴트)/request/session/application

 

중요한거! class속성 대신에 type도 사용 가능하나 웬만하면 쓰지 말자 

class속성 사용 하면

자바빈 생성 시 기존에 개체가 존재할 땐 생성하지 않고 기존의 개체를 그대로 사용 하고 없으면 자동으로 새로 생성 해 주는데 type속성을 사용하면  기존에 개체가 무조건 존재하고 있다고 가정하기 때문에  만약에 개체가 존재하지 않는다면 에러가 발생한다 !

++

- 자바빈 규약
1) Bean의 멤버 변수(속성,프라퍼티)는 반드시 private로 선언한다. 
2) Bean의 메소드는 public으로 선언한다.
3) 속성에 해당하는 setXXX/getXXX 계열의 메서드가 존재 해야 한다.
4) 사용자정의 메소드 추가 가능하다.
* form의 하위요소의 이름과 
 자바빈의 속성(멤버변수)과 이름을 같게 하는게 좋다.

**예시***
 MemberDTO member = new MemberDTO();
 member.setId("kim");
 member.setPwd("1234");

 

 

[액션태그로 자바빈 객체 생성하기]

우선 액션태그 말고 자바코드로 코딩한거를 보자

  //1.request 영역에서 객체 얻기(속성명 : id, 값 : class)
  MemberDTO member = request.getAttribute("member");
  //2.영역에 존재하지 않을 때는 자동으로 생성하기
  if(memeber == null){
  	   //기본 생성자로 생성
       member = new MemberDTO();
       //생성된 객체를 request영역에 저장 (속성명은 id에 지정한 이름으로!)
       request.setAttribute("member", member);
  }

저 긴 줄을 액션태그를 쓰면 한줄로 끝낼 수 있다

<jsp:useBean id="member" class="model.MemberDTO" scope="request" />

id 는 인스턴스 변수명에 지정한 이름으로 씀고

class는 패키지를 포함한 full name

scope는 얻어올 객체의 영역 !

 

<%= member %>로 호출해보면

아직 뭐 지정한게 없어서 null 이지만

아직 뭐 지정한게 없어서 null 이지만 뭘 가져오려 하긴 한다!

 

 

[액션태그로 자바빈 객체 속성 설정하기]

이거도 우선 자바코드로 구현한거 부터 보자

 member.setAge("20");
 member.setName("김길동");
 member.setid("KIM");
 member.setpwd("1234");

액션태그이용시

property 가 set

name이 변수명

value가 꺼내올 값 

역할을 하는거! 이거 잘 바놔랏 !

 

	<jsp:setProperty property="id" name="member" value="KIM" />
	<jsp:setProperty property="pwd" name="member" value="1234" />
    <jsp:setProperty property="name" name="member" />
    <jsp:setProperty property="age" name="member" />

역시 

<%=member %> 로 출력하면 결과는 둘이 똑같다

 

[getProperty액션태그로 자바빈 객체 속성 읽기]

getter를 호출한 것과 같다

 <ul class="list-unstyled">
    <li>아이디 : <jsp:getProperty property="id" name="member" /> </li>
	<li>비밀번호 : <jsp:getProperty property="pwd" name="member" /> </li>
	<li>이름 :<%=member.getName() %> </li>
	<li>나이 :<%=member.getAge() %> </li>
</ul>

이해를 위해 섞어 씀

그래도 이질감 없이 잘 출력 됨

*중요*
jsp:getProperty 나 jsp:setProperty의 name속성에는
반드시 jsp:useBean액션 태그의 id속성에 지정한 값이어야 한다
자바코드로 생성한 인스턴스 변수는 불가.

 


 

이번엔 

<jsp:forward page="UseBeanActionTagBasicResult.jsp"/>로 페이지 이동시켜서 그쪽에서 얻어올 거임!

왜 굳이?

영역을 얻어오는것도 해 봐야 하기 때문이다

 

 

UseBeanActionTagBasicResult.jsp에서 코드 작성

 

 

[영역에서 가져오기]

 자바코드로 가져오면 

 MemberDTO member=(MemberDTO)request.getAttribute("member");

이걸 useBean액태그로 가져오면(이번엔 그냥 class대신 type을 사용)

<jsp:useBean id="member" scope="request" type="model.MemberDTO"/>

 

가져온것 출력하기 !


 <h4>액션태그로 출력</h4>
    <ul class="list-unstyled">
     <li>아이디 : <jsp:getProperty property="id" name="member" /> </li>
     <li>비밀번호 : <jsp:getProperty property="pwd" name="member" /> </li>
     <li>이름 :<jsp:getProperty property="name" name="member" /> </li>
     <li>나이 :<jsp:getProperty property="age" name="member" /></li>
   </ul>

 <h4>자바코드(스크립팅요소)로 출력</h4>
	<ul class="list-unstyled">
	   <li>아이디 : <%=member.getId() %> </li>
	   <li>비밀번호 : <%=member.getPwd() %></li>
	   <li>이름 :<%=member.getName() %> </li>
	   <li>나이 :<%=member.getAge() %> </li>
	</ul>

+ Recent posts