-
[Camel][JSP] JavaBean(자바빈) & <jsp:useBean> 액션태그JSP 2020. 3. 13. 21:20
1. JavaBean(자바빈)이란?
JavaBean이란 데이터를 표현하기 위해 사용되는 Java 클래스입니다. JavaBean 규약에 따르는 클래스를 JavaBean이라고 하며, JSP에서 JavaBean 클래스는 데이터를 저장하는 필드, 데이터를 읽는 메소드, 값의 저장을 위한 메소드로 구성됩니다. 그 형태는 아래와 같이 구성되어 있습니다.
public class BeanClassName implements java.io.Serializable { private String value; public BeanClassName() { } public String getValue() { return value; } public void setValue (String value) { this.value = value; } }
2. JavaBean(자바빈) Property
JavaBean Property란 JavaBean에 저장되어 있는 값을 말합니다. 이 Property의 이름은 메소드의 이름을 사용해서 선언됩니다. 예를 들어, Property의 이름이 num 이라면 이 Property와 관련된 메소드의 이름은 getProperty, setProperty와 같이 선언합니다. 하지만 이것은 무조건적인 것은 아닙니다.
이러한 Property는 읽기 전용과 읽기/쓰기가 가능한 Property가 있습니다. 읽기 전용의 경우에는 get 메소드만 존재하고, 읽기/쓰기가 가능한 경우 get,set 메소드가 존재합니다. 읽기 전용 Property의 경우는 값의 변경이 필요없는 경우입니다.
3. <jsp:useBean> 태그
JSP 페이지의 주된 기능중 하나는 데이터는 출력하는 기능이며, 이 데이터들은 JavaBean 클래스에 담아서 값을 보여주는 것이 일반적입니다. 그렇기 때문에 데이터를 보여주기 위해 JavaBean 클래스의 객체를 사용해서 정보를 사용합니다.
<jsp:useBean> 태그는 JSP 페이지에서 사용할 JavaBean 객체를 지정해 주는 기능을 합니다. 그 사용방법은 아래와 같습니다.
<jsp:useBean id="이름" class="JavaBean 클래스이름" scope="범위" />
id는은 JSP 페이지에서 JavaBean 객체에 접근할 때 사용하는 이름이며, class는 패키지의 이름을 포함한 JavaBean 클래스의 이름입니다. 그리도 Scope는 JavaBean 객체가 저장되는 영역을 지정하며 디폴트 값은 page입니다.
이렇게 <jsp:useBean> 태그를 사용해 객체를 생성하는 방법이 있지만, 만약 이미 생성하려는 객체가 존재하는 경우에는 새로 생성하지 않고 기존의 객체를 사용하게 됩니다. 이 경우 class 대신 type을 사용해도 무방합니다.
<jsp:useBean> 태그의 중요한 특징 중 하나는 scope 속성을 이용해 지정한 영역에 저장을 할 수 있다는 점입니다. 따라서 <jsp:useBean> 태그를 사용하면 각 영역별로 공유할 데이터를 쉽게 저장할 수 있다는 것입니다. scope 속성의 값에 따라 저장되는 기본 객체는 아래와 같습니다.
- page - pageContext 기본객체
- request - request 기본객체
- session - session 기본객체
- application - application 기본객체
<jsp:useBean> 사용 예제 코드
/ch2/WEB-INF/src/ch2/animal/Animal.java
package ch2.animal; public class Animal{ private String name; private int age; private String password; public String getName() { return name; } public int getAge() { return age; } public String getPassword() { return password; } public void setPassword(String password) { this.password=password; } public void setName(String name) { this.name=name; } public void setAge(int age) { this.age=age; } }
newObject.jsp
<%@ page contentType="text/html; charset=utf-8" %> <jsp:useBean id="animal" class="ch2.animal.Animal" scope="request"/> <% animal.setName("Camel"); animal.setAge(28); %> <jsp:forward page="/useObject.jsp"/>
useObject.jsp
<%@ page contentType="text/html; charset=utf-8" %> <jsp:useBean id="animal" class="ch2.animal.Animal" scope="request"/> <html> <head><title> New Object! </title></head> <body> Animal Name : <%= animal.getName() %> (age :<%= animal.getAge() %>) <br> Hello! </body> </html>
<jsp:getProperty>와 <jsp:setProperty> 액션태그
<jsp:useBean> 태그를 사용해서 객체를 생성했다면 <jsp:getProperty>와 <jsp:setProperty>태그를 사용해서 JavaBean 객체의 Property를 변경하거나 읽을 수 있습니다.
<jsp:setProperty>태그를 사용하면 생성한 JavaBean 객체의 Property 값을 지정할 수 있으며, 사용방법은 아래와 같습니다.
<jsp:setProperty name="JavaBean객체이름" property="값을지정할Property이름" value="Property의값"/>
JavaBean 객체의 name Property의 값을 "낙타"로 저장하고 싶으면 아래와 같이 저장할 수 있습니다.
<jsp:useBean id="animal" class="ch2.anmal.Animal"/> <jsp:setProperty name="animal" property="name" value="낙타"/>
또한 파라미터의 값을 Property의 값으로 지정하고 싶다면 value 속성대신 param 속성을 사용할 수 있으며, param 속성과 value 속성을 함께 사용할 수 있습니다.
<jsp:getProperty> 태그는 JavaBean 객체의 Property 값을 출력할 때 사용되며, 사용방법은 아래와 같습니다.
<jsp:getProperty name="JavaBean객체이름" property="Property이름" />
animal JavaBean 객체의 name Property 값을 읽어오고 싶다면 아래와 같이 사용할 수 있습니다.
<jsp:getProperty name="animal" property="name" />
JavaBean Property 타입이 만약 String이 아닌 int와 같은 타입으로 지정될 수도 있습니다. 하지만 <jsp:setProperty> 태그는 Property 타입에 따라서 적절하게 값을 처리하기 때문에 값으로 "10"을 지정했을 때 int형으로 맵핑하여 저장하게됩니다.
AnimalFrom.jsp
<%@ page contentType = "text/html; charset=utf-8" %> <html> <head><title>Animal Register Form</title></head> <body> <form action="<%= request.getContextPath() %>/submitInfo.jsp" method="post"> <table border="1" cellpadding="0" cellspacing="0"> <tr> <td>Name</td> <td colspan="3"><input type="text" name="name" size="10"></td> </tr> <tr> <td>Age</td> <td><input type="text" name="age" size="10"></td> </tr> <tr> <td colspan="4" align="center"> <input type="submit" value="Register"> </td> </tr> </table> </form> </body> </html>
submitInfo.jsp
<%@ page contentType = "text/html; charset=utf-8" %> <% request.setCharacterEncoding("utf-8"); %> <jsp:useBean id="animal" class="ch2.animal.Animal" /> <jsp:setProperty name="animal" property="*" /> <jsp:setProperty name="animal" property="password" value="<%= animal.getName() %>" /> <html> <head><title>Register</title></head> <body> <table width="400" border="1" cellpadding="0" cellspacing="0"> <tr> <td>Name</td> <td><jsp:getProperty name="animal" property="name" /></td> <td>Password</td> <td><jsp:getProperty name="animal" property="password" /></td> </tr> <tr> <td>Age</td> <td><jsp:getProperty name="animal" property="age" /></td> </tr> </table> </body> </html>
<jsp:useBean>액션태그의 현재 사용 추세
<jsp:useBean> 액션태그는 현재 많이 사용되지는 않습니다. 그 주된 이유로는 MVC 프레임워크와 관련이 있습니다.
MVC의 경우 로직을 Java 클래스에서 처리하고 그 결과를 JSP를 통해서 보여주는 형식입니다. 하지만 클래스에서 <jsp:useBean>을 사용할 수 없기 때문에 <jsp:useBean>태그를 사용하기 보단 request.getParameter 메소드를 사용해 파라미터 값을 읽어와 Java 객체에 저장하거나, <jsp:useBean> 태그와 비슷한 기능을 제공하는 다른 모듈을 사용합니다.
Spring 프레임워크와 같은 MVC를 지원하는 프레임워크의 도입과 표현언어의 적용과 같은 사항으로 점차 <jsp:useBean> 태그의 사용빈도는 낮아지고 있는 추세입니다.
하지만, JSP만을 이용해서 웹 어플리케이션을 구현하는 경우 칸단하게 파라미터 값을 JavaBean 객체에 복사하기 위한 용도로는 <jsp:useBean>액션태그를 사용하곤 합니다.
'JSP' 카테고리의 다른 글
[Camel][JSP] JDBC 프로그래밍 1부 in JSP (0) 2020.03.14 [Camel][JSP] MySQL JDBC 연동 in JSP, Java (0) 2020.03.14 [Camel][JSP] Session (세션) (0) 2020.03.13 [Camel][JSP] CookieBox 클래스 & 로그인 페이지 (0) 2020.03.13 [Camel][JSP] 쿠키 (Cookie) in JSP (0) 2020.03.12