이전글


<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&paramAge=13&paramAddr=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



참고글
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,