[JSP] 자바빈 JavaBeans | <jsp: useBean>

Jeini·2023년 5월 7일
1

🌐 JSP

목록 보기
19/24
post-thumbnail

💡 자바빈 (JavaBeans)


✔️ 속성(데이터), 변경 이벤트, 객체 직렬화를 위한 표준

  • JSP에서 정보를 표현할 때 사용하는 것 중 하나
  • JSP에서는 속성을 표현하기 위한 용도로 사용
  • 회원 정보, 게시판 글 등의 정보를 출력 ➡️ 정보를 저장하고 있는 자바빈 객체 사용

✏️ 자바빈 규약을 따르는 클래스와 구조

public class BeanClassName implements Serializable {

	// 값을 저장하는 필드
   	private String value;
    
    // BeanClassName의 기본 생성자
    public BeanClassName() {}
    
    // 필드의 값을 읽어오는 값
    public String getValue() {
    	return value;
    }
    
    // 필드의 값을 변경하는 값
    public void setValue(String value) {
    	this.value = value;
    }
}
  • 데이터를 저장하는 필드
  • 데이터를 읽어올 때 사용되는 메서드
  • 값을 저장할 때 사용되는 메서드

💡 자바빈 Property


✔️ 자바빈에 저장되는 값

  • 메서드 이름을 사용해서 프로퍼티의 이름 결정
  • 배열로도 정의 가능

✏️ 읽기 전용 프로퍼티
: get 또는 is 메서드만 존재하는 프로퍼티

✏️ 읽기 / 쓰기 프로퍼티
: get/set 또는 is/set 메서드가 존재하는 프로퍼티

💡 자바빈 class


회원 정보를 저장할 때 사용할 자바빈 클래스를 만들어보자.

✏️ MemberInfo.java

package kr.ac.green;

import java.util.Date;

public class MemberInfo {
	private String id;
	private String password;
	private String name;
	private Date registerDate;
	private String email;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getRegisterDate() {
		return registerDate;
	}
	public void setRegisterDate(Date registerDate) {
		this.registerDate = registerDate;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
}

MemberInfo.java 소스 코드를 작성했다면, 명령 프롬프트를 열고 MemberInfo.java 클래스를 컴파일한다.

이때, javac 옵션을 사용하게 된다.

⚙️ javac 옵션

  • -encoding
    : 소스 코드의 인코딩 지정 (UTF-8)

  • -d
    : 컴파일 결과로 생성될 클래스 파일의 위치 지정
    : 패키지가 있다면 클래스 파일은 패키지에 맞는 폴더를 생성

  • -source
    : 소스 코드의 자바 버전을 지정

  • -target
    : 클래스 파일이 호환될 자바 버전 지정

  • -cp
    : 컴파일할 때 사용할 클래스패스 지정

💡 <jsp:useBean>


✔️ JSP 페이지에서 사용할 자바빈 객체를 지정할 때 사용
✔️ <jsp:useBean id="빈 이름" class="자바빈 클래스 이름" scope="범위" />

  • id
    : JSP 페이지에서 자바빈 객체에 접근할 때 사용할 이름을 지정
    : class의 변수

  • class
    : 패키지 이름을 포함한 자바빈 클래스의 완전한 이름을 입력
    : 어떤 빈 객체를 쓰는지 알려줘야 되는 것 (형변환)

  • scope
    : 자바빈 객체를 저장할 영역을 지정
    : page, request,session, application 중 하나의 값으로 갖음 (기본값: page)

⚙️ <jsp:useBean> 동작

  • id: MemberInfo 의 변수 이름 ➡️ member
  • request에서 member 라는 변수를 꺼내는데 그 객체가 MemberInfo

✏️ <jsp:useBean> 사용 예시

✏️ makeObject.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
// 이름이 member인 객체를 생성해서 request 기본 객체에 저장한다.
<jsp:useBean id="member" scope="request" class="kr.ac.green.MemberInfo" />

<%
  	// member를 사용하여 객체 접근
	member.setId("jipark09");
	member.setName("JTI");

%>
<jsp:forward page="useObject.jsp"/>

✏️ useObject.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:useBean id="member" scope="request" class="kr.ac.green.MemberInfo"/>
<html>
<head>
<title>인사말</title>

<body>

<%= member.getName() %>(<%=member.getId() %>) 회원님<br>
안녕하세요!!

</body>
</head>
</html>

📎 type 속성

✔️ <jsp:useBean id="빈 이름" type="자바빈 클래스 이름" scope="범위" />

  • class 속성 대신 type 속성을 사용할 수 있다.
  • 하지만 request.getAttribute("member")을 하였을 때, member가 없으면 새로 생성이 아닌 에러가 뜬다.
MemberInfo member = (MemberInfo)request.getAttribute("member");

if(member == null) {
	// 에러 발생
}

💡 <jsp:setProperty>


✔️ <jsp:setProperty name="자바빈" property="이름" value="값" />

  • name
    : 프로퍼티의 값을 변경할 자바빈 객체의 이름 지정
    : <jsp:useBean>의 id 속성에서 지정한 값 사용

  • property
    : 값을 지정할 프로퍼티의 이름 지정
    : 해당 클래스의 바꿀 멤버변수

  • value
    : 프로퍼트의 값 지정
    : 표현식(<%=..%>)이나 EL(${값}) 사용 가능
    : value 속성대신 param 속성 사용 가능
    ➡️ <jsp:setProperty name="member" property="id" param="memberId"/>
    ➡️ memberId 의 값을 id 프로퍼티에 저장

✏️ <jsp:setProperty> 사용 예시

<%@page import="kr.ac.green.MemberInfo"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:useBean id="member" scope="request" class="kr.ac.green.MemberInfo" />
//  <jsp:setProperty>를 이용하여 id와 name 값 변경 => setter
<jsp:setProperty name="member" property="id" value="jipark09"/>
<jsp:setProperty name="member" property="name" value="JTI"/>

<jsp:forward page="/useObject.jsp"/>

📎 property 속성의 값을 '*'로 지정

✔️ 각 프로퍼티의 값을 같은 이름을 갖는 파라미터의 값으로 설정

<jsp:setProperty name="member" property="*" />
  • 자바빈 멤버변수와 파라미터 이름이 같아야 됨

💡 <jsp:getProperty>


✔️ <jsp:getProperty name="자바빈" property="이름" />

  • name
    : <jsp:Bean> 의 id 속성에서 지정한 자바빈 객체의 이름 지정

  • property
    : 출력할 프로퍼티의 이름 지정

✏️ 회원가입 예제


💡 회원가입 양식에 값을 입력한 후 [회원가입] 버튼을 누르면 입력한 값을 출력해주는 JSP 코드 작성

✏️ membershipForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 입력 폼</title>
</head>
<body>
<form action="processJoining.jsp" method="post">
	<table border="1">
		<tr>
			<td>ID</td>
			<td colspan="3"><input type="text" name="id" size="10"></td>
		</tr>
		<tr>
			<td>Name</td>
			<td><input type="text" name="name" size="10"></td>
			<td>Email</td>
			<td><input type="text" name="email" size="10"></td>
		</tr>
		<tr>
			<td colspan="4" align="center">
			<input type="submit" value="회원가입">
			</td>
		
		</tr>
	</table>
</form>

</body>
</html>

✏️ processJoining.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");
%>
// MemberInfo 자바빈 클래스의 객체를 생성해서 memberInfo 이름으로 저장
<jsp:useBean id="memberInfo" class="kr.ac.green.MemberInfo"/>
// 파라미터 값을 MemberInfo 자바빈 객체의 프로퍼티 값으로 저장
<jsp:setProperty name="memberInfo" property="*"/>
// memberInfo 자바빈 객체의 password 프로퍼티 값을 memberInfo.getId()와 동일하게 지정한다.
<jsp:setProperty name="memberInfo" property= "password" value="<%= memberInfo.getId() %>"/>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>가입</title>
</head>
<body>

<table border="1">
	<tr>
		<td>ID</td>
		<td><jsp:getProperty name="memberInfo" property="id"/></td>
		<td>password</td>
		<td><jsp:getProperty name="memberInfo" property="password"/></td>
	</tr>
	<tr>
		<td>Name</td>
		<td><jsp:getProperty name="memberInfo" property="name"/></td>
		<td>Email</td>
		<td><jsp:getProperty name="memberInfo" property="email"/></td>
	</tr>
</table>


</body>
</html>

profile
Fill in my own colorful colors🎨

0개의 댓글