JSP 자바빈즈란 JSP의 표준 액션태그로 자바 클래스를 접근 할 수 있는 태그 이다. 한마디로 다른 자바 클래스와 마찬가지로 자바객체라고 할 수 있다. 클래스 내에 있는 메소드와 변수를 사용 할 수 있다.
useBean은 자바로 따지면 '클래스명 변수명 = new 클래스명()'으로 취급 할 수 있다.
기본 형식은 다음과 같다.
<jsp:useBean id="자바빈 이름" class="사용할 자바빈 클래스 이름" scope="사용범위" />
여기서 id는 현재 JSP페이지 내에서 자바빈객체를 접근할때 사용할 이름으로 자유롭게 설정한다. class는 내가 만든 클래스나 원래 자바에 있는 클래스 등 내가 사용할 클래스를 삽입한다. scope는 이 객체가 저장될 영역을 지정해주는데 범위로는 page, request, session, application 중 하나로 설정 할 수 있다. scope는 생략할 수 있는데 생략할 경우 page가 기본 값이다.
예시1
<jsp:useBean id="date" class="java.util.Date" />
<p><%=date %></p>
이 경우에 자바와 같이 Date형식을 표시해준다.
자바로 표현은 아래와 같고 위와 동일 하다
<% Date date = new Date(); %> <p><%=date %></p>
예시2
useBean.jsp
<jsp:useBean id="bean" class="ch04.com.dao.Calculator"/> <% int m = bean.process(5); out.print("5의 3제곱 : " + m); %>
Calculator.java
public class Calculator { public int process(int n) { return n * n * n; } }
이 경우 내가 만들어준 Calculator를 자바빈 객체로 생성하여 호출해 사용했다. 결과는 생각한 것 처럼 125가 나온다.
예시3
메소드 사용하기
useBean.jsp
<jsp:useBean id="person" class="ch04.com.dao.Person" scope="request"/> <p>아이디 : <%=person.getId() %></p> <p>이름 : <%=person.getName() %></p>
Person.java
public class Person implements Serializable{ //필드 private int id = 20181014; private String name = "개똥이"; //기본 생성자(생략가능) public Person() {} //getter/setter메소드 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
getter메소드를 사용하여 불러올수 있다.
결과로는
아이디 : 20181014
이름 : 개똥이
이렇게 출력이된다.
useBean.jsp에다가
<% person.setId(20182005); // 아이디에 새로운 값을 넣어줌 person.setName("가나다"); // name필드에 새로운 값을 넣어줌 %>
위 코드를 삽입하여 Setter메소드를 사용할 경우 출력하면 바뀐것을 볼 수 있다.
setProperty는 혼자 사용되지 않는다. setProperty는 위에서 설명했던 useBean 액션 태그와 같이 사용이 된다.
간단하게 설명하면 자바의 Setter메소드와 같다.
사용형식은 아래와 같다.
<jsp:setProperty name="자바빈즈 객체명" property="값을 넣을 변수 명" value="넣을 값" />
** 잠깐 상식
useBean의 객체를 호출해 줄때 <%= %>을 사용하여 호출 해도되지만 ${객체명.변수(메소드)}로 선언해도됨
setProperty와 마찬가지로 단독으로 사용되지 않고 useBean선언후 사용이 된다.
사용형식
<jsp:getProperty name="자바빈즈 객체명" property="값을 넣을 변수 명" />
**Getter메소드와 같은 작용을 하는데 실무에서는 불편해서 그런지 잘 사용하지 않는다고 한다. 이런게 있다는 것만 알아두도록 하자.