[JSP/Servlet]자바빈(JavaBean)

Hello_Wendy·2022년 5월 18일
0

JSP/Servlet

목록 보기
3/3
post-thumbnail

자바빈(JavaBean)

: 관련 있는 데이터를 저장하는 클래스(자바빈)

자바빈 사용 이유

▶ 효율적입 작업을 위해 디자인 부분과 비즈니스 로직 부분을 분리하기 위함

자바빈 설계 규약

: 자바빈은 다른 클래스와 달리 규정되어있는 규약에 따라 작성해야 하며, 이에 맞지 않을 경우 자바빈의 특성을 갖지 않는 클래스가 되어버릴 수 있음

▶ 멤버 변수마다 별도의 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에서 자바빈 사용하기

🥜 1. <jsp:useBean/> 태그 : 자바빈 객체를 생성하기 위한 액션 태그

<jsp:useBean id = "빈 이름" class = "자바빈 클래스 명" scope = "사용범위" />

  • id는 JSP페이지에서 사용될 자바빈 객체의 변수명이며, class는 자바빈의 설계 규약에 맞게 작성 된 클래스명을 적어줌

  • 클래스가 패키지 안에 작성되어있다면 패키지 경로까지 지정해주어야 함

  • scope : 사용범위를 뜻 함
    → 종류 : request, page, session, application)
    → 기본값은 page (해당 페이지가 클라이언트에 서비스를 제공하는 동안에만 유효)

🥜 2. <jsp:setProperty/> 태그 : 자바빈 클래스의 속성 값을 설정하기 위한 태그

beanTest2.jsp

<jsp:setProperty name = "빈 이름" property = "속성명" value = "설정할 속성 값" />

  • 앞서 테스트했던 beanTest1.jsp 코드에서 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 페이지에서 전송되어 오는 파라미터의 이름이 설정하려는 빈 객체의 속성명과 같으면 param 속성은 생략 가능

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)

🥜 3. <jsp:getProperty/> 태그 : 자바빈 클래스의 속성 값을 가져오기 위한 태그

<jsp:getProperty name = "빈 이름" property = "속성명" />

  • 아래 코드는 앞서 작성했던 beanTest4.jsp 코드에서 getProperty태그만 추가한 것으로 태그의 역할 확인

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
requestrequest 요청을 받고 처리를 완료할 때까지 생존되는 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. 실행 결과

profile
안녕 나의 새로운 세상

0개의 댓글