JSP에서 JavaBeans 활용하기 — useBean으로 빈 로드 및 속성 설정
JSP에서 자바빈즈(JavaBeans)를 사용하면 화면 로직과 비즈니스 로직을 분리할 수 있어 코드 관리가 한결 수월해집니다. 이 글에서는 useBean, setProperty, getProperty 액션의 사용법과 주요 속성, 그리고 실제로 동작하는 예제까지 단계별로 살펴보겠습니다.
<jsp:useBean> 액션이란?
useBean 액션은 매우 유연하게 동작합니다. 먼저 id와 scope 변수를 이용해 기존에 존재하는 객체를 검색하고, 객체가 없으면 지정된 클래스의 새 인스턴스를 생성합니다.
빈을 로드하는 가장 간단한 방법은 다음과 같습니다.
<jsp:useBean id = "name" class = "package.class" />
빈 클래스가 로드되면 jsp:setProperty와 jsp:getProperty 액션을 사용해 빈의 속성을 수정하거나 읽어올 수 있습니다.
useBean 액션에서 사용할 수 있는 주요 속성은 아래 표와 같습니다.
| 번호 | 속성 및 설명 |
|---|---|
| 1 | class 빈의 전체 패키지 이름을 지정합니다. |
| 2 | type 객체를 참조할 변수의 타입을 지정합니다. |
| 3 | beanName java.beans.Beans 클래스의 instantiate() 메서드에 전달되는 빈의 이름을 지정합니다. |
<jsp:setProperty> 액션
setProperty 액션은 빈의 속성값을 설정합니다. 단, 이 액션을 사용하기 전에 해당 빈이 반드시 먼저 정의되어 있어야 합니다. setProperty 액션에는 두 가지 기본적인 사용 방식이 있습니다.
첫 번째는 jsp:useBean 요소의 외부, 즉 그 뒤에 사용하는 방식입니다.
<jsp:useBean id = "myName" ... />
...
<jsp:setProperty name = "myName" property = "someProperty" .../>
이 경우 새 빈이 생성되었든 기존 빈이 발견되었든 관계없이 jsp:setProperty가 항상 실행됩니다.
두 번째는 jsp:useBean 요소의 본문(body) 내부에 사용하는 방식입니다.
<jsp:useBean id = "myName" ... >
...
<jsp:setProperty name = "myName" property = "someProperty" .../>
</jsp:useBean>
반면 이 경우에는 새 객체가 생성된 경우에만 jsp:setProperty가 실행되며, 기존 객체가 발견된 경우에는 실행되지 않습니다. 이처럼 작성 위치에 따라 실행 시점이 달라진다는 점을 꼭 기억해 두세요.
setProperty 액션의 주요 속성은 다음과 같습니다.
| 번호 | 속성 및 설명 |
|---|---|
| 1 | name 속성을 설정할 대상 빈의 이름입니다. 해당 빈은 반드시 사전에 정의되어 있어야 합니다. |
| 2 | property 설정하고자 하는 속성의 이름입니다. 값으로 "*"를 지정하면 빈 속성 이름과 일치하는 모든 요청 파라미터가 해당 setter 메서드에 자동으로 전달됩니다. |
| 3 | value 해당 속성에 할당할 값입니다. 파라미터 값이 null이거나 파라미터가 존재하지 않으면 setProperty 액션은 무시됩니다. |
| 4 | param 속성에 전달할 값을 가진 요청 파라미터의 이름입니다. value와 param은 동시에 사용할 수 없지만, 둘 다 생략하는 것은 허용됩니다. |
<jsp:getProperty> 액션
getProperty 액션은 지정한 속성의 값을 읽어와 문자열로 변환한 뒤 출력 결과에 삽입합니다.
getProperty 액션에는 두 개의 필수 속성만 있습니다. 사용 문법은 다음과 같습니다.
<jsp:useBean id = "myName" ... />
...
<jsp:getProperty name = "myName" property = "someProperty" .../>
getProperty 액션의 필수 속성은 아래와 같습니다.
| 번호 | 속성 및 설명 |
|---|---|
| 1 | name 값을 가져올 속성을 가진 빈의 이름입니다. 해당 빈은 반드시 사전에 정의되어 있어야 합니다. |
| 2 | property 가져올 빈 속성의 이름입니다. |
실전 예제
예제에서 사용할 테스트 빈을 먼저 정의해 보겠습니다.
/* 파일: TestBean.java */
package action;
public class TestBean {
private String message = "No message specified";
public String getMessage() {
return(message);
}
public void setMessage(String message) {
this.message = message;
}
}
위 코드를 컴파일하여 TestBean.class 파일을 생성한 뒤, C:\apache-tomcat-7.0.2\webapps\WEB-INF\classes\action 폴더에 복사합니다. 그리고 CLASSPATH 환경 변수도 이 폴더를 가리키도록 설정해야 합니다.
이제 main.jsp 파일에 다음 코드를 작성합니다. 이 JSP 페이지는 빈을 로드한 후 간단한 String 파라미터를 설정(set)하고 조회(get)합니다.
<html>
<head>
<title>Using JavaBeans in JSP</title>
</head>
<body>
<center>
<h2>Using JavaBeans in JSP</h2>
<jsp:useBean id = "test" class = "action.TestBean" />
<jsp:setProperty name = "test" property = "message"
value = "Hello JSP..." />
<p>Got message....</p>
<jsp:getProperty name = "test" property = "message" />
</center>
</body>
</html>
브라우저에서 main.jsp에 접속하면 다음과 같은 결과가 출력됩니다.
Using JavaBeans in JSP
Got message....
Hello JSP...
마무리
지금까지 JSP에서 useBean으로 빈을 로드하고, setProperty와 getProperty로 속성을 설정·조회하는 방법을 알아보았습니다. 특히 setProperty를 useBean 요소 내부에 넣느냐 외부에 두느냐에 따라 실행 시점이 달라진다는 점을 기억해 두면 실무에서 유용하게 활용할 수 있습니다.