ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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>액션태그를 사용하곤 합니다.

    댓글

Camel`s Tistory.