프로그래밍/JSP

Java Bean (자바 빈) 에 대해

Jay Tech 2017. 1. 11. 17:45
반응형

JSP 프로그래밍을 잘하기 위해서는 클래스와 JSP를 함께 사용하는 기술을 익혀야 한다. 일반적으로 정보를 표현할 때에는 자바빈(JavaBean) 의 형태를 갖는 클래스를 사용한다. 예를 들어 회원정보 게시판 글 등의 정보를 출력할 때 정보를 저장하고 있는 자바빈 객체를 사용하게 된다.


규약)


- 반드시 클래스는 패키지화 되어야한다

- 멤버변수는 property(프로퍼티)라고 부른다.

- property접근제한자는 private

- 외부접근은 게터세터로 접근한다.

- 프로퍼티가 boolean이면 get이 아니라 is사용해도 된다.


JavaBean


자바빈은 데이터를 표헌하는 것을 목적으로 하는 자바 클래스로서 다음과 같은 형태로 구성된다.






자바 빈 규약에 따르는 클래스를 자바 빈이라고 부르며 jsp에서 사용되는 자바빈은 위와 같은 형태를 띈다.



1.  자바빈 프로퍼티


프로퍼티는 자바빈에 저장되어 있는 값을 나타내며, 메서드 이름을 사용해서 프로퍼티의 이름을 결졍하게 된다. 게터세터와 상응한다. 


읽기 전용 프로퍼티 - get 또는 is 만 존재

읽기/쓰기 프로퍼티 - get/set is/set 다 존재





2. <jsp:useBean> 태그를 이용한 자바 객체 사용


JSP 페이지의 주요 기능 중의 하나는 데이터를 보여주는 기능이다. 게시판의 글 목록 보기, 글 읽기, 회원 정보 보기 기등이 이에 해당한다.

JSP 에서는 이런 데이터를 자바빈 클래스에 담아서 값을 보여주는 것이 일반적이다. 

규약에서는 빈번히 사용되는 자바빈 객체를 위한 액션 태그를 별도로 제공하고 있으며, 이들 액션 태그를 사용하면 자바빈 객체를 생성하거나 빈의 프로퍼티를 출력하거나 값을 변경할 수 있다. 


- <jsp:useBean> 액션태그는 JSP 페이지에서 사용할 자바빈 객체를 지정해주는 기능을 한다. 



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


id - jsp페이지에서 자바빈 객체에 접근할 때  사용할 이름을 명시한다.

class - 패캐지 이름을 포함한 자바빈 클래스의 완전한 이름을 명시한다.

scope - 자바빈 객체가 저장될 영역을 지정한다. page ,request, session, application 중 하나를 값으로 갖는다. 기본값은 page이다.




예시를 보자



빈을 등록한다. id 는 member이다.





밑에는 포워딩된 jsp파일이다.






즉 첫번째에서 생성한 member객체가 포워딩해서 들어가 jsp파일에서도 그대로 쓰이는것을 알 수 있다.





3. <jsp:getProperty> <jsp:setProperty>


<jsp:useBean>으로 객체를 생성하면 겟셋 프로퍼티 액션태그를 사용할 수 있다.


<jsp:setProperty name="[자바빈]" property="이름" value="[값]" />


name - 프로퍼티의 값을 변경할 자바빈 객체의 이름. <jsp:useBean>액션 태그의 id속성에서 지정한 값을 사용한다.

property - 값을 지정할 프로퍼티의 이름

value - 프로퍼티의 값, 표현식을 사용할수 있다.



즉 빈(객체)를 정의하고 그안에 속성을 넣을 때 (html form에서 넘길 때) 자동맵핑을 해주는 기능이라고 생각하면 된다.


예시를 보자) 


일단 html폼에 각각의 아이디값에 해당하는 값을 사용자가 입력할 것이다. 그리고 post로 넘긴다.







그리고 받는쪽을 보자.

일단useBean을 넣어주고, setProperty를 지정한다. 즉 useBean에서 member빈(객체)를 가져왔으므로 세터메소드로 일일이 지정해주는것이 아닌 property속성을 통해 값들을 하나씩 연결해준다.


property="password"부분을 보자

자바빈의 패스워드 필드를 value로 초기화해준다 여기서 value는 멤버객체의 id값으로 했다.


그리고 property="*"의 의미는 각각의 필드를 같은 이름을 갖는 파라미터의 값으로 설정한다. 즉, 폼에 입력한 값들 모두 자바빈 객체에 좌르륵 담게 할 수 있다.


getProperty속성은 보면 알 것이다.






결론은 객체이름.setId("넘겨받은값") * 필드의 갯수  만큼의 라인이 생성될 뻔했지만 setProperty태그로 인해 한방에 끝났다. 

그러므로 사용자가 입력한 폼 값을 자바빈 객체에 저장할 때에는 <jsp:setProperty>액션태그를 사용할 수 있도록 파라미터이름과 자바빈 프로퍼티의 이름을 맞춰주는 것이 좋다.



4. 자바빈 프로퍼티 타입에 따른 값 매핑


자바빈 필드 타입이 int이면 어떻게될까?


<jsp:setProperty name="number" property="width" value="100" />


 

value는 알맞게 100인 int형으로 변환되어 처리된다. 



실무환경)

cf> useBean 액션태그가 MVC패턴에서의 사용 부적합 이유


MVC모델을 사용할 경우 로직은 자바 클래스에서 처리를 하게 되는데 클래스에서는 useBean태그를 사용할수가 없다. 그래서 request.getParameter() 메서드를 사용해서 파라미터의 값을 읽어와 자바 객체에 저장하거나 또는 비슷한 모듈을 사용한다.  따라서 MVC모델을 사용할 경우 useBean태그를 사용할 일이 많지 않다.


하지만 오직 jsp만을 가지고 구현해야하는 경우에는 쓰인다.







반응형