GitHub

https://github.com/Backcoder-June

BackCoder 기록 그리고 숙달

Back to the JSP

[JSP] action태그 useBean / get||setProperty

Backcoder 2022. 8. 11. 21:27

[ 객체생성 action태그 ]
: Java로 <% 객체생성하고, get set 하는거 %>
<% %> 쓰는거 싫어하는 사람들을 위해
<jsp: > 액션태그로도 사용할 수 있게 해줄게.


[ useBean ]
: 자바 객체 생성 문장을 JSP action 태그로 표현

<% memberDTO m1 = new memberDTO(); %>
==
<jsp : useBean id="m1" class="DTO.memberDTO" />


id : 객체명
class : 클래스명

- 기본생성자 호출 ( 기본생성자 필수 )

- class로 가서 객체 가져와야 하므로, 패키지명도 같이 붙여줘야 한다.

( class 경로는 억지로라도 어떤 폴더 안에 있어야 한다. )


< scope 주기 >

: 이 Bean객체 자체를 해당 scope 방식으로, setAttribute 에 담아두겠다.

memberDTO m1 = new memberDTO( );
request.setAttribute( "m1", m1 );
==
<jsp : useBean id="m1" class="dto.memberDTO" scope="request" /> ( forward 방식 )


: memberDTO 클래스의 m1 객체를 ( requestDispatcher - forward 방식 )으로
객체이름과 같은 " m1 " key값으로 담아두겠다.

< scope 종류 >
scope= "request"
scope= "session"
scope= "application
"
scope= "page" ( default ) : 현재 파일 내에서만 사용가능


[ jsp:setProperty ]
: setter 메소드 호출

 

( - 이건 객체내에 변수값 하나를 set 하는 세터역할  

자바 <% setAttribute %>는 request/session/pageContext 등 에서 공유값 넘길 때 사용하는 것   

헤깔리지말자 )  

 

<% m1.setId("june"); %>
==
<jsp : setProperty name="m1" property="id" value = " 넣을값 " >
: m1 객체에 id 값으로 value 넣겠다.

- name : Bean id (객체 이름)
- property : set 할 변수명 ( 소문자 )


<jsp : setProperty name="m1" property=" id " param = " id " >
: m1 객체에 변수 id 값으로, 파라미터 태그 name속성="id" 로 들어온 value 값을 넣겠다.

[ 자동인식 ]
=> 객체 변수명( id, pw, name ) 이랑 파라미터 name값이 같으면,
즉, property이름이랑 param이름이 같으면
자동으로 인식해서 넣어줄게. param 생략해도 된다.
==
<jsp : setProperty name="m1" property=" id " >
: property 만 보고, 그거에 맞게 들어온 파라미터를 알아서 붙여서 가져와줌


( - MVC 자동인식이랑 같은 개념
: 태그 name 값이랑 DTO 변수 이름만 맞춰두면
DTO 객체 해당 변수로 자동으로 쏙쏙 들어간다. )



[ jsp:getProperty ]
: getter 메소드 호출

<% m1.getId( ); %>
==
<jsp:getProperty name="m1" property="id" />

: m1 객체에 id변수 value값 get 해서 화면에 출력


<jsp:useBean id="dto" class="Bean.beandto" scope="request"/>
<jsp:setProperty name="dto" property="id"  />
<jsp:setProperty name="dto" property="pw"  />
<jsp:setProperty name="dto" property="name" />

<jsp:forward page="beanrequest2.jsp"/>

=> jsp:useBean 에서 scope = "request" 방식으로 줘놓고,
거기서 setProperty 로 set 해둔 값을 가져다 쓰려면

"request" 방식을 받아서 사용할 쪽에서도 똑같이

<jsp:useBean id="dto" class="Bean.beandto" scope="request"/>

<h1> <jsp:getProperty name="dto" property="name"/>  님의 아이디가 생성되었습니다. </h1>
<h3>아이디 : <jsp:getProperty name="dto" property="id"/>     </h3>
<h3>비밀번호 : <jsp:getProperty name="dto" property="pw" />   </h3>


(1) useBean 에서 scope="request" 로 통일시켜주고
(2) getProperty 로 가져다 쓰면 된다.


------------------------------------------------------------

자세히보면
get set property 액션태그는 되려 매우 복잡스럽다.
<% %>자바코드들이 보고 "뭐하냐?" 물어볼 지경이다.

- useBean 객체생성 태그는, 그 자체는 별 메리트가 없어보이지만,
scope 를 사용해서 단번에
RequestDispatcher, session, application 등의 기능을 사용할 수 있다는 건 장점으로 보인다.

무엇보다, jsp 태그를 선호하는건
중간에 <% %> 자바 코드 섞여있는게 보기 거슬린다는 이유에서
좀 억지로라도 최소한으로 자바코드를 사용하려는 이유에서 라고 한다.

이대로는 사실상 좀 비효율적일 수 있다.

해서, JSP 는 더 간단하게 문법을 만들어 제공한다.

=> EL ( Expression Langauge )

예를들어 getProperty 액션태그로 쓰기엔 오히려 불편하니깐

<% m1.getId(); %>
==
${ m1.id }

편하게 쓰렴 하고 만들어 준다.

=> action 태그는 java 코드가 섞이는 걸 최대한 기피하고,
편하게 만들어주고자 만들어놓은 도우미 정도로 생각하면 될 것 같다.

java코드 싫어! <= jsp : actioni태그 + EL 로 최대한 대체해서 사용