: 관련 있는 데이터를 저장하는 클래스(자바빈)
▶ 효율적입 작업을 위해 디자인 부분과 비즈니스 로직 부분을 분리하기 위함
: 자바빈은 다른 클래스와 달리 규정되어있는 규약에 따라 작성해야 하며, 이에 맞지 않을 경우 자바빈의 특성을 갖지 않는 클래스가 되어버릴 수 있음
▶ 멤버 변수마다 별도의 get/set 메소드가 존재해야 함
▶ get 메소드는 파라미터가 존재하지 않아야 함
▶ set 메소드는 반드시 하나 이상의 파라미터가 존재해야 함
▶ 빈즈 컴포넌트의 속성은 반드시 읽기 또는 쓰기가 가능해야 함. 즉, get메소드와 set메소드를 구현해야 함(단, 읽기 전용인 경우 get 메소드만 정의가능)
▶ 생성자는 파라미터가 존재하지 않아야 함. 인자 없는 생성자가 반드시 있어야 함
▶ 멤버 변수의 접근 제어자는 private이며, 각 set/get메소드의 접근 제어자는 public으로 정의되어야 하며 클래스의 접근 제어자는 public으로 정의함
1. BeanTest.java 파일 작성하기
package test;
public class BeanTest {
private String name = "honggildong";
//name멤버변수의 get메소드의 이름은 'get+멤버변수의 이름(name)'으로 지정하되
//멤버변수 이름의 첫 문자는 대문자로 지정
public String getName() {
return name;
}
//name멤버변수의 set메소드의 이름은 'set+멤버변수의 이름(name)`으로 지정하되
//멤버변수의 이름의 첫 문자는 대문자로 지정
public void setName(String name) {
this.name = name;
}
}
2. beanTest1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--test 패키지에 있는 BeanTest라는 자바빈 클래스를 beantest라는 이름으로 객체를 생성한다 --%>
<jsp:useBean id = "beantest" class = "test.BeanTest" scope = "page" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaBean Test</title>
</head>
<body>
<b>자바빈 사용 예제</b>
<h3><%=beantest.getName() %></h3>
</body>
</html>
3. jsp 파일 실행하기
<jsp:useBean id = "빈 이름" class = "자바빈 클래스 명" scope = "사용범위" />
id는 JSP페이지에서 사용될 자바빈 객체의 변수명이며, class는 자바빈의 설계 규약에 맞게 작성 된 클래스명을 적어줌
클래스가 패키지 안에 작성되어있다면 패키지 경로까지 지정해주어야 함
scope
: 사용범위를 뜻 함
→ 종류 : request, page, session, application)
→ 기본값은 page (해당 페이지가 클라이언트에 서비스를 제공하는 동안에만 유효)
beanTest2.jsp
<jsp:setProperty name = "빈 이름" property = "속성명" value = "설정할 속성 값" />
setProperty
태그만 추가하여 어떤 역할을 하는지 확인<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id = "beantest" class = "test.BeanTest" scope = "page"/>
<%--위 라인에서 생성된 beantest 빈 객체의 name속성 값을 "BeanTest!"로 설정하는 부분 --%>
<jsp:setProperty name = "beantest" property = "name" value = "BeanTest!"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaBean Test</title>
</head>
<body>
<b>자바빈 사용예제</b>
<h3><%=beantest.getName() %></h3>
</body>
</html>
jsp 파일 실행하기
beanTest1.jsp
에서 실행한 name 속성 값이 "Hongkildong"으로 출력 되었으나, 아래의 테스트에서는 "BeanTest!"가 출력됨
<jsp:setProperty/>
태그를 사용하여 BeanTest 자바빈에 접근하여 name변수를 변경한 것
하지만, 자바빈(BeanTest.java)에 보면 name변수는 private으로 선언되어있으므로 직접 변경 불가
<jsp:setProperty/>
태그는 자바빈 객체의 멤버 변수를 직접 수정하는 것이 아니며, set메소드를 호출하여 멤버변수를 수정하는 것. 즉, 위의 태그는 자바빈(BeanTest.java) 객체에 있는 다음의 코드를 실행하게 되는 것
public void setName(String name) {
this.name = name;
value
대신 param
을 사용<jsp:setProperty name = "빈 이름" property = "속성명" param = "파라미터명" />
클라이언트에서 name이라는 이름의 파라미터 값이 전송되어 오고 이 값을 name 속성 값으로 할당할 때의 설정
-beanTest.html-
<body>
<form action = "beanTest3.jsp">
이름 : <input type = "text" name = "name" />
<br />
<input type = "submit" value = "전송" />
</form>
</body>
</html>
▶코드분석 : beanTest3.jsp 페이지로 name 속성 값을 전송함
beanTest3.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id = "beantest" class = "test.BeanTest" scope = "page" />
<%--클라이언트에서 name이라는 이름으로 전송되어 오는 파라미터 값을 --%>
<%--beantest 빈 객체의 name속성값으로 설정하는 부분 --%>
<jsp:setProperty name = "beantest" property = "name" param = "name" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaBean Test</title>
</head>
<body>
<b>자바빈 사용 예시</b>
<h3><%=beantest.getName() %></h3>
</body>
</html>
html 파일 실행하기
▶ name값을 입력하는 클라이언트 페이지에서 파라미터로 전송되는 name값을 속성으로 설정 후 출력
클라이언트에서 전송되어 오는 파라미터 이름이 빈객체의 속성명과 모두 같을때 속성명을 한번에 할당 하는 방법
<jsp:setProperty name = "빈 이름" property = "*" />
property = "*"
로 설정하면 클라이언트에서 전송되어 오는 파라미터 값이 모두 같은 이름의 빈 객체의 속성 값으로 자동 할당property = "*"
테스트 위해 정보를 저장하는 빈 클래스(BeanTest2.java) 작성
package test;
public class BeanTest2 {
private String name;
private String addr;
private String email;
private String birthday;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
}
클라이언트 페이지 작성(beanTest2.html)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
#formArea {
margin : auto;
width : 400px;
border : 1px solid black;
}
h1, fieldset {
text-align : center;
}
</style>
</head>
<body>
<section id = "formArea">
<h1>propery="*" 테스트</h1>
<form action = "beanTest4.jsp" method = "POST">
<fieldset>
<label for = "name">이름 : </label><input type = "text" name = "name" id = "name" /><br>
<label for = "addr">주소 : </label><input type = "text" name = "addr" id = "addr" /><br>
<label for = "emila">이메일 주소 : </label><input type = "text" name = "email" id = "email" /><br>
<label for = "birthday">생년월일 : </label><input type = "text" name = "birthday" id = "birthday" /><br>
<input type = "submit" value = "전송">
</fieldset>
</form>
</section>
</body>
</html>
bean관련 액션 태그 사용하는 페이지 작성(beanTest4.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id = "beantest" class = "test.BeanTest2" scope = "page" />
<%--클라이언트에서 파라미터로 전송되어 오는 파라미터 값들을 --%>
<%--파라미터 이름들과 동일한 이름의 빈 객체의 속성 값으로 할당하는 부분--%>
<jsp:setProperty name = "beantest" property = "*" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaBean Test</title>
</head>
<body>
<h1>자바빈 속성 값 출력</h1>
<!--빈 객체의 속성 값들을 출력하는 부분 -->
<b>이름 : </b> <%=beantest.getName() %><br>
<b>주소 : </b> <%=beantest.getAddr() %><br>
<b>이메일 주소 : </b> <%=beantest.getEmail() %><br>
<b>생년월일 : </b> <%=beantest.getBirthday() %><br>
</body>
</html>
클라이언트 페이지 실행(beanTest2.html)
<jsp:getProperty name = "빈 이름" property = "속성명" />
beanTest5.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id = "beantest" class = "test.BeanTest" scope = "page" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaBean Test</title>
</head>
<body>
<b>자바빈 사용 예제</b>
<h3><%=beantest.getName() %></h3>
<%--getProperty액션 태그를 사용해서 name속성 값을 출력하는 부분 --%>
<h3><jsp:getProperty name = "beantest" property = "name"/></h3>
</body>
</html>
jsp 파일 실행하기
위 body부분에 적힌 2가지 코드는 동일한 역할을 함
<h3><%=beantest.getName() %></h3>
<h3><jsp:getProperty name = "beantest" property = "name"/></h3>
<jsp:getProperty/>
태그도 <jsp:setProperty/>
태그와 마찬가지로 멤버 변수에서 값을 직접 가져오지는 않음
<jsp:getProperty/>
태그는 아래의 코드와 연동됨
public String getName() {
return name;
}
name 멤버 변수는 직접 제어할 수 없는 private로 선언되어있기 때문에 직접 접근은 불가능하므로, getName()
메소드로만 접근해야하는데 <jsp:getProperty/>
가 getName()
메소드를 호출하는 역할을 하는 것
<jsp:useBean/>
태그에 있는 scope 속성
: 자바빈 객체가 저장될 영역
scope를 지정하지 않을 경우 기본값은 page
영역 | 설명 |
---|---|
page | 빈 객체 공유 범위가 현재 페이지의 범위에만 한정. 페이지가 변경되면 공유가 유지 되지 않는 scope |
request | request 요청을 받고 처리를 완료할 때까지 생존되는 scope |
session | 클라이언트당 하나씩 할당되는 영역. 클라이언트가 브라우저를 종료하기 전까지 유지되는 scope(ex:로그인이나 장바구니 등에 많이 사용) |
application | 사이트 전체의 범위를 가지며, 서버가 종료되기 전에는 계속 유지되는 scope(ex:애플리케이션 전체 영역에서 데이터를 공유해야하는 경우 즉, 전체 방문자 수 계산 등) |
1. 회원가입 폼 작성에서 중심이 되는 자바빈 작성
▶ 회원가입 할 때 입력했던 내용을 멤버 변수에 저장하는 역할
package join;
public class JoinBean {
private String id;
private String pass;
private String name;
private int sex;
private int age;
private String email;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
멤버변수는 아이디,비밀번호 등 총 6개로 구성. 각 get/set 메소드가 규약에 맞게 선언 → 자바빈 클래스의 구조
2. 입력폼 페이지의 작성
▶ ID,비밀번호 등 회원가입 시 필요한 정보들을 받고 <가입>버튼을 누르면 입력 정보 확인 페이지로 이동
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 폼</title>
<style>
#formArea {
margin : auto;
width : 400px;
border : 1px solid gray;
text-align : center;
}
h1 {
text-align : center;
}
table {
width : 380px;
margin : auto;
text-align : center;
}
</style>
</head>
<body>
<section id = "formArea">
<h1>회원정보 입력</h1>
<form action = "joinChk.jsp" method = "POST">
<table>
<tr>
<td><label for = "id">아이디 : </label></td>
<td><input type = "text" name = "id" id = "id"></td>
</tr>
<tr>
<td><label for = "pass">비밀번호 : </label></td>
<td><input type = "password" name = "pass" id = "pass"></td>
</tr>
<tr>
<td><label for = "name">이름 : </label></td>
<td><input type = "text" name = "name" id = "name"></td>
</tr>
<tr>
<td><label for = "sex">성별 : </label></td>
<td>
<input type = "radio" name = "sex" value = "1" id = "sex" checked>남
<input type = "radio" name = "sex" value = "2">여
</td>
</tr>
<tr>
<td><label for = "age">나이 : </label></td>
<td><input type = "text" name = "age" id = "age"></td>
</tr>
<tr>
<td><label for = "email">이메일주소 : </label></td>
<td><input type = "text" name = "email" id = "email"></td>
</tr>
<tr>
<td colspan = "2">
<input type = "submit" value = "가입">
<input type = "reset" value = "다시 작성">
</td>
</tr>
</table>
</form>
</section>
</body>
</html>
3. 입력 정보 확인 페이지의 작성
▶ 회원가입 정보를 <jsp:setProperty/>태그를 이용하여 자바빈 객체에 저장하고, 저장한 내용을 <jsp:getProperty/>태그를 이용하여 표시하는 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id = "join" class = "join.JoinBean" />
<jsp:setProperty name = "join" property = "*" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 입력 정보 확인 페이지</title>
<style type = "text/css">
table {
width : 400px;
}
h1 {
text-align : center;
}
</style>
</head>
<body>
<table>
<tr>
<td><b>아이디 : </b></td>
<td><jsp:getProperty name = "join" property = "id" /></td>
</tr>
<tr>
<td><b>비밀번호 : </b></td>
<td><jsp:getProperty name = "join" property = "pass" /></td>
</tr>
<tr>
<td><b>이름 : </b></td>
<td><jsp:getProperty name = "join" property = "name" /></td>
</tr>
<tr>
<td><b>성별 : </b></td>
<td><jsp:getProperty name = "join" property = "sex" /></td>
</tr>
<tr>
<td><b>나이 : </b></td>
<td><jsp:getProperty name = "join" property = "age" /></td>
</tr>
<tr>
<td><b>이메일주소 : </b></td>
<td><jsp:getProperty name = "join" property = "email" /></td>
</tr>
</table>
</body>
</html>
4. 실행 결과