학습(구)/JSP

Java Bean

잉아당 2020. 9. 7. 23:10
728x90

request객체를 이용해 요청 파라미터를 각각 읽어와 사용하는 방법도 있지만 요청파라미터가 많으면 많을수록 사용하기 힘들어지고 코드의 양도 많아지게 됩니다. 이를 편리하게 사용하기 위해 java bean 이라는 객체를 이용합니다.

 

java bean : java bean 객체는 여러 요청 파라미터를 하나의 단위로 다룰 때 사용합니다. 이 때 다루는 하나의 값을 프로퍼티 라고 합니다. java bean은 여러개의 프로퍼티를 담는 객체입니다. 프로퍼티는 getter, setter, 필드로 구성되어져 있습니다. 

 

프로퍼티는 개념적인 값이고 필드는 프로퍼티를 담는 물리적인 저장소입니다.

 

프로퍼티를 사용할 때는 규칙이 있습니다. 프로퍼티의 이름은 getter와 setter의 이름으로 결정됩니다. getter와 setter는 java bean의 프로퍼티를 읽어오거나 변경하는 메서드로 각 메서드 이름의 get과 set을 제외한하고 첫글자를 소문자로 변경한 이름이 프로퍼티 이름이 됩니다.

 

import java.util.Date; 
public class MemberInfo {
// id, password, name, registerDate, email 등의 
// 프로퍼티를 위한 필드
private String id;
private String password;
private String name;
private Date registerDate;
private String email;
// 프로퍼티 id 게터
public String getId() {
return id;
}
// 프로퍼티 id 세터
public void setId(String val) {
this.id = val;
}
// 프로퍼티 password 게터 public String getPassword() {
return password;
}
// 프로퍼티 password 세터
public void setPassword(String val) {
this.password = val;
}
// 프로퍼티 name 게터 public String getName() {
return name;
}
// 프로퍼티 name 세터
public void setName(String val) {
this.name = val;
}
// 프로퍼티 registerDate 게터 public Date getRegisterDate() {
return registerDate; // 프로퍼티 registerDate 세터
}

public void setRegisterDate(Date val) { 
this.registerDate = val;
}
// 프로퍼티 email 게터 public String getEmail() {
return email;
}
// 프로퍼티 email 세터
public void setEmail(String val) {
this.email = val;
} 
}

JSP요소들이 java bean 객체의 값을 사용할 때는 필드로 접근하는 것이 아닌 프로퍼티로 접근하여 사용합니다. 

 

<%-- value 입력 예 --%>
<jsp:useBean id=“memberInfo” class=“chap03/MemberInfo” />
<jsp:setProperty name=“memberInfo” property=“name” value=“개발자” /> 
<%-- 요청 파라미터 입력 예 --%>
<jsp:setProperty name=“memberInfo” property=“name” param=name />

useBean 액션태그를이용하여 java bean을 생성합니다. 이때 id 값에 객체이름을 사용하고 class 값에는 java bean 객체를 생성할 때 필요한 클래스 타입을 지정합니다. 그런 뒤 setProperty 액션태그를 사용하여 javabean 객체의 이름을 name으로 지정하고 property에 사용할 프로퍼티 이름을 지정합니다. 그런 다음 value를 이용해 직접 값을 주거나 param을 통해 파라미터 값을 지정하여 set 할 수 있습니다. 선택적으로 scope를 지정할 수 있는데 page, request, session, application 중에서 선택할 수 있으며 각 범위 동안 살릴 수 있습니다. scope의 default값은 page 입니다.

 

프로퍼티에 대하여 여러 프로퍼티를 한번에 처리하는 방법이 있습니다. 각 파라미터 이름과 동일한 이름을 가진 프로퍼티에 대해서 setProperty 액션태그의 property 속성에 '*'로 사용하면 한꺼번에 입력이 됩니다.

 

java bean 사용을 위해 파라미터 입력 폼 페이지를 작성합니다.

<%@ page contentType = "text/html; charset=utf-8" %>
<html>
<head><title>회원가입 입력 폼</title></head>
<body>
<form action="/chap03/javabeanAction.jsp" method="post">
<table border="1" cellpadding="0" cellspacing="0">
<tr>
    <td>이메일</td>
    <td colspan="3"><input type="text" name="email" size="10"></td>
</tr>
<tr>
    <td align="center">id</td>
    <td><input type="text" name="id" size="10"></td>
    <td>password</td>
    <td><input type="password" name="password" size="10"></td>
</tr>
<tr>
    <td align="center">이름</td>
    <td colspan="3"><input type="text" name="name" size="10"></td>
</tr>
<tr>
    <td colspan="4" align="center">
    <input type="submit" value="MemberInfo 등록">
    </td>
</tr>
</table>
</form>
</body>
</html>

 

폼 페이지에서 입력한 파라미터를 java bean을 사용해 처리하는 페이지입니다.

<%@ page contentType="text/html; charset=utf-8" %>
<%
    request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="memberInfo" class="chap03.MemberInfo" />
<jsp:setProperty name="memberInfo" property="*" />
<html>
<head><title>MemberInfo 자바빈 처리</title></head>
<body>
<table width="250" border="1" cellpadding="0" cellspacing="0">
<tr>
    <td align="center">id</td>
    <td><jsp:getProperty name="memberInfo" property="id"/></td>
</tr>
<tr>
    <td align="center">password</td>
    <td><jsp:getProperty name="memberInfo" property="password" /></td>
</tr>
<tr>
    <td align="center">이름</td>
    <td><jsp:getProperty name="memberInfo" property="name" /></td>
</tr>
<tr>
    <td align="center">이메일</td>
    <td><jsp:getProperty name="memberInfo" property="email" /></td>
</tr>
</table>
</body>
</html>

이때 java bean이 지정한 scope 범위 내에  미리 생성이 되어져 있으면 생성 되어진 java bean을 사용하고 그렇지 않을 경우에는 생성하여 사용합니다.

java bean 이용 시 class 속성 대신 type 속성을 이용할 수 있습니다. type 속성을 사용하게 될 경우 java bean 객체가 scope 안에 존재한다 가정하고 동작이 되는데 이때 존재하지 않을 경우 객체를 생성하여 저장하는 기능을 수행하지 않습니다. 또한 이 방식은 scope 안에 해당 java bean이 존재 하지 않으면 오류를 발생시킵니다.

'학습(구) > JSP' 카테고리의 다른 글

페이지 사이의 정보공유  (0) 2020.09.09
기능 모듈화 (forward액션태그와 redirect)  (0) 2020.09.09
form페이지와 action 페이지  (0) 2020.09.03
페이지 출력  (0) 2020.08.31
요청 파라미터 다루기  (0) 2020.08.31