6 minute read

자바 빈과 액션태그

[회원 가입 페이지에서 입력된 정보가 서버에 전송되는 방법]

  1. 이름, 아이디, 별명, 비밀번호 등을 개별적으로 전송하는 방법
  2. 회원 정보를 하나로 묶어서 전송하는 방법 ▶️ 보다 효율적! ➡️ “자바 빈” 매커니즘!

자바 빈

  • 정보의 덩어리
  • 데이터 저장소
  • 자바 빈을 통해서 정보를 하나의 객체를 구성하는 멤버로 기술한 후 한꺼번에 데이터에 접근하여 사용 가능!
  • 데이터 은닉(Data Hiding) 개념을 사용 : 객체 외부에서 데이터를 직접 다루면 데이터가 손상될 수도 있기 때문에 나온 객체지향의 개념

▶️ 데이터 부분은 private으로 제한하고, 이를 이용하는 메서드만 public으로 제한

  • 데이터 저장 및 데이터 컨트롤 :getter setter 메서드를 하나의 쌍으로 가짐

⚠️ 자바 빈 관련 액션 태그를 이용하면 getter setter 메서드 없이 회원 정보를 하나로 묶어서 얻어올 수 있다!

(ex)


  • 자바 빈도 하나의 클래스!

자바 빈 클래스 구성 요소

  1. 자바 빈 클래스 정의
public **class** MemberBean{
	//자바 빈 클래스 정의
}
  1. 패키지 선언 방법

도메인이름.폴더이름.클래스이름

으로 패키지를 지정하기![폴더 이름까지가 패키지, 클래스는 해당 패키지 내부에 정의되어 있어야!]

(예)

package com.saeyan.javabeans.MemberBean

package com.saeyan.javabeans;//패키지명

public class MemberBean{
	//클래스 정의
}
  1. 필드 선언
  • private으로 접근 제한
package com.saeyan.javabeans;//패키지명

public class MemberBean{
	//클래스 정의

	//필드 선언
	private String name;
  private String userId;
	private String nickName;
	private String pwd;
	private String email;
	private String phone;
}

📌4. 자바 빈 프로퍼티📌

  • “프로퍼티” : 필드를 간접적으로 메서드를 통해 호출하는 방식

-위의 예시처럼 필드는 private하게 제한하고, 메서드는 public하게 두는 경우가 프로퍼티의 예가 될 수 있음!

package com.saeyan.javabeans;//패키지명

public class MemberBean{
	//클래스 정의

	//필드 선언
	private String name;
  private String userId;
	private String nickName;
	private String pwd;
	private String email;
	private String phone;

	//메서드
	//getter
	public String getName(){
		return name;
	}
	public String getUserId(){
		return userId;
	}
	//...

	//setter
	public void setName(String name){
		this.name=name;
	}
//...
}
  • getter : get으로 시작되는 메서드!

-필드 값을 가져오는 메서드

  • setter : set으로 시작하는 메서드!

-필드 값을 변경하는 메서드

이렇게 getter 와 setter 메서드를 이용하면 자바 빈을 아래와 같이 간접적으로 사용 가능하다!

MemberBean memberBean = new MemberBean();//기본생성자로 객체 생성
memberBean.setName("떡볶이");//참조변수 인스턴스 memberBean으로 메서드 참조

🎀 this의 특징을 복습해보기 🎀

  1. 메서드 내부에서 따로 선언해주지 않아도, 지역 변수처럼 사용 가능
  2. 자기 자신만을 가리키는 레퍼런스
  3. 메서드 내부의 모든 필드와 메서드 앞에 암시적으로 사용됨
  4. 필요에 따라서는 명시적으로 사용할 필요 존재(예: 파라미터와 필드가 같은 이름인 경우) [⬅️ 프로그래밍 원리에 있어서 가장 가까운 변수가 더 큰 영향력이 있어서 this를 사용하지 않으면 파라미터로 전달된 변수가 우선순위가 더 높음]

⚠️ 대신, this(), super() 생성자는 사용하려는 블록 내부의 맨 첫 라인에서만 사용 가능하다!

⚠️static 메서드에서는 this를 사용 불가!

⭐ 자바 빈은 클래스이기 때문에 class 파일로 생성해주기!!


이러한 개념을 갖고서 만든 자바 빈 클래스는 아래와 같이 만들 수 있다!

package com.saeyan.javabeans;

public class MemberBean {
	//필드 선언
	private String name;
	private String userId;
	private String nickName;
	private String pwd;
	private String email;
	private String phone;
	
	//getters & setters
	public String getName() {
		return name;
	}
	
	public String getUserId() {
		return userId;
	}
	
	public String getNickName() {
		return nickName;
	}
	
	public String getPwd() {
		return pwd;
	}
	public String getEmail() {
		return email;
	}
	
	public String getPhone() {
		return phone;
	}
	
	public void setName(String name) {
		this.name=name;
	}
	
	public void setUserId(String userId) {
		this.userId=userId;
	}
	
	public void setNickName(String nickName) {
		this.nickName=nickName;
	}
	
	public void setPwd(String pwd) {
		this.pwd=pwd;
	}
	
	public void setEmail(String email) {
		this.email=email;
	}
	
}

자바 빈 관련 액션 태그

자바 빈 관련 액션 태그

  1. - 액션태그에서 빈 객체를 생성해주어야 하는데, 액션 태그를 사용하지 않는다면, 아래와 같이 page 지시자를 이용해서 import 해주어야 하지만(1), (2)와 같이 사용할 수도 있다

(1)

<%@page import="com.saeyeon.javabeans.MemberBean"%>
<%
	MemberBean memberBean = new MemberBean();
%>

(2)

<%
	com.saeyeon.javabeans.MemberBean memberBean = new com.saeyeon.javabeans.MemberBean();
%>
  • 액션태그는 위의 내용처럼 동작하되, 간단하게 사용이 가능하다!
<jsp:useBean class="클래스  네임"
				     id="빈이름"
						 [scope="범위"]/>

-이때, scope 속성은 자바 빈 객체가 사용되는 유효 범위를 지정하기 위해서 page, request, session, application 중 하나를 사용해야 함!

scope 속성값

<jsp:useBean class="com.saeyeon.javabeans.MemberBean" 
				     id="memberBean"
						 scope="page"/>

class=”com.saeyeon.javabeans.MemberBean” : 자바 빈 객체 생성

id=”memberBean” : 생성된 빈 객체의 이름은 memberBean으로 하기

scope=”page” : page 객체의 속성 값으로 객체를 저장

↔️

<%
	com.saeyeon.javabeans.MemberBean memberBean =
			new com.saeyeon.javabeans.MemberBean();
	pageContext.setAttribute("memberBean", memberBean);
%>
  • id 속성 값 == 객체에 접근하기 위한 레퍼런스 변수 (자동 매핑됨)

이러한 액션태그를 이용하면 아래와 같이 스크립트릿 등을 이용해서 사용할 수 있다!

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>자바  객체</title>
</head>
<body>
	<jsp:useBean class="com.saeyan.javabeans.MemberBean"
				 id="memberBean"
				 scope="application"/>
	◎ 자바 빈 객체 생성 후 저장된 정보 출력하기<br><br>
	이름:<%=memberBean.getName() %><br>
	아이디 : <%=memberBean.getUserId() %>
	<hr>
	◎ 자바 빈 객체 정보 변경 후 저장된 정보 출력하기<br><br>
	<%
		memberBean.setName("떡볶이");
		memberBean.setUserId("good!");
	%>	
	이름:<%=memberBean.getName() %><br>
	아이디 : <%=memberBean.getUserId() %>
	<hr>
</body>
</html>

![https://github.com/hy6219/TIL-Today-I-Learned-/blob/main/JSP%20Servlet/%EB%B9%88%20%EA%B0%9D%EC%B2%B4%EC%95%A1%EC%85%98%ED%83%9C%EA%B7%B8.PNG?raw=true](https://github.com/hy6219/TIL-Today-I-Learned-/blob/main/JSP%20Servlet/%EB%B9%88%20%EA%B0%9D%EC%B2%B4%EC%95%A1%EC%85%98%ED%83%9C%EA%B7%B8.PNG?raw=true)

  1. 택션태그

위에서 expression을 위한 태그로

<%=%>

를 이용했었다! 이를 위에서 만든 객체와 그 id, getProperty 액션태그를 이용하면

과 같이 사용할 수 있다!

<jsp:getProperty name="memberBean" property="name"/>
  1. 액션태그

위에서 정보를 설정하기 위하여 스크립트릿을 이용하여 setter 메서드를 이용했는데,

자바 빈에 대한 액션 태그인 setProperty가 그 기능을 대신할 수 있다!

<jsp:setProperty name="memberBean"
								 property="name"
								 value="떡볶이"/>

마지막으로 2, 3번 과정까지 반영한다면 1번에서는 스크립트릿을 이용해서 getter, setter를 처리했던 부분을 바꿀 수 있다!

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>자바  객체</title>
</head>
<body>
	<jsp:useBean class="com.saeyan.javabeans.MemberBean"
				 id="memberBean"
				 scope="application"/>
	◎ 자바 빈 객체 생성 후 저장된 정보 출력하기<br><br>
	<%-- 이름:<%=memberBean.getName() %><br>
	아이디 : <%=memberBean.getUserId() %> --%>
	이름 : <jsp:getProperty name="memberBean" property="name"/><br>
	아이디 : <jsp:getProperty name="memberBean" property="userId"/>
	<hr>
	◎ 자바 빈 객체 정보 변경 후 저장된 정보 출력하기<br><br>
	<%-- <%
		memberBean.setName("떡볶이");
		memberBean.setUserId("good!");
	%>	 --%>
	<jsp:setProperty name="memberBean" property="name" value="김밥"/>
	<jsp:setProperty name="memberBean" property="userId" value="good!"/>
<%-- 	이름:<%=memberBean.getName() %><br>
	아이디 : <%=memberBean.getUserId() %> --%>
	이름 : <jsp:getProperty name="memberBean" property="name"/><br>
	아이디 : <jsp:getProperty name="memberBean" property="userId"/>
	<hr>
</body>
</html>

https://github.com/hy6219/TIL-Today-I-Learned-/blob/main/JSP%20Servlet/%EC%9E%90%EB%B0%94%20%EB%B9%88%20%EA%B0%9D%EC%B2%B4-setProperty,%20getProperty.PNG?raw=true


자바 빈을 이용한 회원 정보를 한 번에 저장 후, 정보 추출하기

https://github.com/hy6219/TIL-Today-I-Learned-/blob/main/JSP%20Servlet/%EC%9E%90%EB%B0%94%20%EB%B9%88%EC%9D%84%20%EC%9D%B4%EC%9A%A9%ED%95%9C%20%ED%9A%8C%EC%9B%90%20%EA%B0%80%EC%9E%85%20%EC%A0%95%EB%B3%B4%20%EC%A0%80%EC%9E%A5%20%EB%B0%8F%20%ED%9A%8D%EB%93%9D,%20%EC%84%A4%EC%A0%95.png?raw=true

이번에는 학습한 내용을 복습할 겸,

회원 가입 페이지에서 회원 정보를 기입하고, 이를 정보 출력 페이지에서 빈 객체 생성 후

정보를 저장하고, 출력하는 예제를 연습해보자

먼저, 자바 빈 클래스를 생성한다

package com.saeyeon.javabeans;

public class MemberBean {
		//필드 선언
		private String name;
		private String userId;
		private String nickName;
		private String pwd;
		private String email;
		private String phone;
		
		//getters & setters
		public String getName() {
			return name;
		}
		
		public String getUserId() {
			return userId;
		}
		
		public String getNickName() {
			return nickName;
		}
		
		public String getPwd() {
			return pwd;
		}
		public String getEmail() {
			return email;
		}
		
		public String getPhone() {
			return phone;
		}
		
		public void setName(String name) {
			this.name=name;
		}
		
		public void setUserId(String userId) {
			this.userId=userId;
		}
		
		public void setNickName(String nickName) {
			this.nickName=nickName;
		}
		
		public void setPwd(String pwd) {
			this.pwd=pwd;
		}
		
		public void setEmail(String email) {
			this.email=email;
		}
}

그 후, 입력 양식을 마련하는데, 주의할 점은 , 필드 이름과 웬만하면 동일하게 유지해주는 것이 헷갈리지 않는 것 같다

<%@ 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="addMember.jsp" method="post">
		<div class="name">
			<label>이름 <input type="text"name="name" id="name" placeholder="이름"></label>
		</div>
		<div class="userId">
			<label>아이디 <input type="text"name="userId" id="userId" placeholder="아이디"></label>
		</div>
		<div class="pw">
			<label>비밀번호 <input type="password"name="pwd" id="pwd" maxlength="9" placeholder="10 미만 비밀번호"></label>
		</div>
		<div class="nickName">
			<label>닉네임 <input type="text"name="nickName" id="nickName" placeholder="닉네임"></label>
		</div>
		<div class="email">
			<label>이메일<input type="email"name="email" id="email" placeholder="이메일"></label>
		</div>
		<div class="phone">
			<label>전화번호 <input type="text"name="phone" id="phone" placeholder="전화번호"></label>
		</div>
		<div class="btn">
			<span>
				<input type="submit" value="전송">
				<input type="reset" value="취소">
			</span>
		</div>												
	</form>
</body>
</html>

이번에는 입력 양식으로부터 값을 전달받고, 빈 객체를 생성하여, 모든 필드에 값을 넣어주고,

출력해주자

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	//encoding 설정
	request.setCharacterEncoding("UTF-8");
%>
<%--자바  객체 생성 && 모든 필드에 대해서  설정 --%>
<jsp:useBean class="com.saeyeon.javabeans.MemberBean" id="member"/>
<jsp:setProperty name="member" property="*"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>자바 빈 객체와 액션태그-회원등록확인하기</title>
</head>
<body>
	<h1>입력 완료된 회원 정보</h1>
	<div class="info">
		<div class="name">
			<span>이름: <jsp:getProperty name="member" property="name"/></span>
		</div>
		<div class="userId">
			<span>아이디: <jsp:getProperty name="member" property="userId"/></span>
		</div>
		<div class="pwd">
			<span>비밀번호: <jsp:getProperty name="member" property="pwd"/></span>
		</div>
		<div class="nickName">
			<span>닉네임: <jsp:getProperty name="member" property="nickName"/></span>
		</div>
		<div class="email">
			<span>이메일: <jsp:getProperty name="member" property="email"/></span>
		</div>
		<div class="phone">
			<span>전화번호: <jsp:getProperty name="member" property="phone"/></span>
		</div>
	</div>
</body>
</html>

그러면 아래와 같은 결과를 확인해볼 수 있다!

https://github.com/hy6219/TIL-Today-I-Learned-/blob/main/JSP%20Servlet/%EC%9E%90%EB%B0%94%EB%B9%88%EC%9D%84%20%EC%9D%B4%EC%9A%A9%ED%95%B4%EC%84%9C%20%ED%9A%8C%EC%9B%90%EB%93%B1%EB%A1%9D%ED%95%98%EA%B8%B0.gif?raw=true

Updated: