[서블릿/JSP] 자바빈(Java Beans)의 속성을 다뤄보자. <jsp:setProperty>와 <jsp:getProperty> 액션태그
Servlet&Jsp 2018. 9. 6. 19:55이전글
<jsp:setProperty>와 <jsp:getProperty> 액션태그
다음은 자바빈 규약에 맞게 작성된 User 클래스입니다. 자바빈 규약에 맞게 작성된 클래스를 자바빈 클래스라 하는데, 자바빈 클래스는 <jsp:useBean> 액션태그와 <jsp:setProperty>, <jsp:getProperty>액션태그를 가지고 사용할 수 있습니다. <jsp:useBean> 액션태그에 대해서는 이전글을 참고해주시기 바랍니다.
package com.dololak;
//default 패키지가 아닌 com.dololak.servlet 패키지에 속함
public class User {
//멤버 변수의 접근 제어자는 private
private String name;
private Long age;
private String address;
//기본 생성자가 존재함
public User() {}
/*
* 멤버 변수에 대한 getter setter가 존재하며,
* get 또는 set 이후에 첫글자는 멤버변수명의 대문자로
* 그 이후는 소문자로 함
*/
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Long getAge() { return age; }
public void setAge(Long age) { this.age = age; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
} |
cs |
<jsp:setProperty> 액션태그
setProperty 액션태그는 useBean 액션태그로 생성한 자바빈 객체의 속성값을 설정하는 태그입니다. 내부적으로 자바빈의 setter 메서드를 사용합니다. 사용방법은 다음과 같습니다.
<jsp:setProperty name="myUser" property="name" value="kim dololak" /> --> myUser.setName("kim dololak") 메서드를 호출 |
cs |
-
name 속성 - <jsp:useBean>에서 자바빈 객체를 생성할때 사용했던 id 값을 사용합니다.
-
property 속성 - 속성하려는 멤버변수명을 입력합니다. 내부적으로 set + 첫글자를 대문자로 바꾼 setter 메서드를 실행합니다. 즉 위 예시와 같이 name을 지정한 경우 setName() 메서드가 호출됩니다. property 속성에 *(asterisk) 를 사용하게 되면 요청 파라미터를 검사하여 속성명이 동일한 멤버변수를 찾아 값을 할당합니다.
-
value 속성 - 멤버변수에 설정할 값을 지정합니다. 값을 설정할때에는 표현식(<%= %>) 나 EL(${}) 를 사용할 수도 있습니다. 만약 value 값을 "" 와 같이 공백으로 두는경우 해당 멤버변수 타입의 기본값이 할당됩니다.(예 Long은 0L)
-
param 속성 - 위 예시에는 나와있지 않지만 HTTP 요청 파라미터(쿼리 스트링)를 자바빈 객체에 설정할 때 사용합니다. 브라우저에서 호출한 요청파라미터 속성을 지정해주면 해당 속성의 값이 빈 객체의 값으로 할당됩니다.
<jsp:getProperty> 액션태그
getProperty 액션태그는 useBean 액션태그로 생성한 자바빈 객체의 속성값을 추출하는 태그입니다. 내부적으로 자바빈의 getter 메서드를 사용합니다. 사용방법은 다음과 같습니다.
<jsp:getProperty name="myUser" property="name" /> --> myUser.getName() 메서드를 호출 |
cs |
-
name 속성 - <jsp:useBean>에서 자바빈 객체를 생성할때 사용했던 id 값을 사용합니다.
-
property 속성 - 속성하려는 멤버변수명을 입력합니다. 내부적으로 get + 첫글자를 대문자로 바꾼 getter 메서드를 실행합니다. 즉 위 예시와 같이 name을 지정한 경우 getName() 메서드가 호출됩니다.
자바빈 객체의 값 저장하고 출력하기
getProperty와 setProperty를 사용하여 값을 자바빈 객체에 저장하고 출력하는 예제입니다.
beanTest.jsp
<%@ page contentType = "text/html; charset=utf-8" %>
<html>
<head>
</head>
<body>
<jsp:useBean id="myUser" class="com.dololak.servlet.User" scope="request"/>
<jsp:setProperty name="myUser" property="name" value="kim dololak"/>
<jsp:setProperty name="myUser" property="age" value="28"/>
<jsp:setProperty name="myUser" property="address" value="seoul"/>
이름 : <jsp:getProperty name="myUser" property="name"/><br>
나이 : <jsp:getProperty name="myUser" property="age"/><br>
주소 : <jsp:getProperty name="myUser" property="address"/><br>
</body>
</html> |
cs |
실행 결과입니다.
요청 파라미터값을 자바빈 객체에 저장하기
브라우저에서 요청한 HTTP 파라미터를 자바빈 객체에 액션태그를 통해 할당할 수 있습니다. 이전의 예제에서 setProperty 액션태그의 value 속성만 제거해 주었습니다.
<body>
<jsp:useBean id="myUser" class="com.dololak.servlet.User" scope="request"/>
<jsp:setProperty name="myUser" property="name"/>
<jsp:setProperty name="myUser" property="age"/>
<jsp:setProperty name="myUser" property="address"/>
이름 : <jsp:getProperty name="myUser" property="name"/><br>
나이 : <jsp:getProperty name="myUser" property="age"/><br>
주소 : <jsp:getProperty name="myUser" property="address"/><br>
</body> |
cs |
value 속성을 생략하면 요청파라미터의 속성명과 동일한 멤버변수를 찾아 할당합니다. 속성명이 동일해야 하기 때문에 대소문자를 구분해주어야 합니다.
테스트 결과입니다. 주소창에 요청파라미터를 빈 객체의 멤버변수명에 맞게 넘겨주었고 액션태그의 property 속성을 참고하여 값을 할당해 주었습니다.
요청 URL : http://localhost:8080/beanTest.jsp?name=hello&age=13&address=korea
액션태그는 내부적으로는 다음과 같이 동작하는 것입니다. age 멤버변수는 Long타입이므로 문자열만 얻을 수 있는 request.getParameter() 메서드로부터 얻은 값을 Long타입으로 바꿔주어야 합니다.
<%
User user = new User();
user.setName(request.getParameter("name"));
user.setAge(Long.valueOf(request.getParameter("age")));
user.setAddress(request.getParameter("address"));
%> |
cs |
param 속성을 통해 할당할 요청 파라미터 지정하기
바로 위 예제에서 setProperty 액션태그에 param 속성을 지정하게 되면 param 속성으로 지정한 요청 파라미터값을 property 속성으로 지정한 멤버변수에 할당합니다.
<jsp:useBean id="myUser" class="com.dololak.servlet.User" scope="request"/>
<jsp:setProperty name="myUser" property="name" param="paramNm"/>
<jsp:setProperty name="myUser" property="age" param="paramAge"/>
<jsp:setProperty name="myUser" property="address" param="paramAddr"/> |
cs |
이번에는 다음과 같이 서버에 요청해야 합니다.
요청 URL : http://localhost:8080/beanTest.jsp?paramNm=hello¶mAge=13¶mAddr=korea
위와 같이 setProperty 액션태그를 사용하면 내부적으로는 다음과 같이 동작합니다.
<%
User user = new User();
user.setName(request.getParameter("paramNm"));
user.setAge(Long.valueOf(request.getParameter("paramAddr")));
user.setAddress(request.getParameter("paramAddr"));
%> |
cs |
모든 요청 파라미터를 자동으로 할당하기
setProperty 액션태그에는 다음과 같이 *(Asterisk)를 할당할 수 있습니다. 이렇게 되면 요청 파라미터의 모든 값을 빈 객체에 할당하게 됩니다. 단 요청 파라미터명과 자바빈 객체의 멤버변수명이 맞아야 합니다. 또한 멤버변수에 따른 setter 메서드가 자바빈 규약에 맞게 작성되어 있어야 합니다.
<jsp:setProperty name="myUser" property="*" /> |
cs |
최종코드입니다. 빈 객체를 생성하고 값을 할당하는 부분이 단 스크립트코드 두 줄로 해결되었습니다.
beanTest.jsp
<%@ page contentType = "text/html; charset=utf-8" %>
<html>
<head>
</head>
<body>
<jsp:useBean id="myUser" class="com.dololak.servlet.User" scope="request"/>
<jsp:setProperty name="myUser" property="*"/>
이름 : <jsp:getProperty name="myUser" property="name"/><br>
나이 : <jsp:getProperty name="myUser" property="age"/><br>
주소 : <jsp:getProperty name="myUser" property="address"/><br>
</body>
</html> |
cs |
요청 파라미터명만 잘 맞추어 넘겨주면 값이 자동으로 빈객체에 할당되는것을 볼 수 있습니다.
요청 URL : http://localhost:8080/beanTest.jsp?name=hello&age=13&address=korea
참고글
'Servlet&Jsp' 카테고리의 다른 글
[서블릿/JSP] 톰캣 쿠키(Cookie)에 한글 저장시 Control character in cookie value or attribute 오류 (1) | 2018.09.11 |
---|---|
[서블릿/JSP] 자바빈(Java Beans)이란? <jsp:useBean> 액션 태그로 빈 객체 생성하기 (0) | 2018.09.06 |
[서블릿/JSP] include 또는 forward시에 request 객체를 통해 데이터 공유하기 (0) | 2018.09.03 |
[서블릿/JSP] <jsp:forward> 액션 태그 <jsp:param> 태그로 데이터 전달하기 (0) | 2018.09.02 |
[서블릿/JSP] <jsp:forward> 액션 태그 설명 및 사용 방법 (0) | 2018.09.02 |