웹 개발 기초/자바 웹을 다루는 기술

setProperty/getProperty 액션 태그를 이용한 회원 정보 조회 실습

sungw00 2023. 3. 1. 01:53
728x90

setProperty/getProperty 액션 태그를 사용하는 이유

useBean 액션 태그를 사용해 자바 코드를 사용하지 않고 자바 빈을 생성하는 경우, 여전히 빈의 속성에 값을 설정할 때는 자바 코드에서 setter를 사용하여 설정하는 경우 setProperty와 getProperty 액션 태그를 사용하면 일일이 값을 설정하지 않아도 된다.

 

setProperty와 getProperty 태그의 특징

이름 정의 형식
setProperty useBean의 속성에 값을 설정하는 태그 <jsp:setProperty name="자바 빈 이름" property="속성 이름" value="값" />
- name: <jsp:useBean> 액션 태그의 id 속성에 지정한 이름
- property: 값을 설정할 속성 이름
- value: 속성에 설정할 속성 값
getProperty useBean의 속성 값을 얻는 태그 <jsp:getProperty name="자바 빈 이름" property="속성 이름" />
- name: <jsp:useBean> 액션 태그의 id 속성에 지정한 이름
- property: 값을 얻을 속성 이름

자바의 setter를 사용하지 않고 빈 속성을 설정하는 예제

1. member3.jsp 파일 작성

<%-- member3.jsp --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	import="java.util.*, sec01.ex01.*"    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8"); <%-- useBean에 속성 값을 설정하기 전 한글 인코딩 작업 --%>
%>
<jsp:useBean id="m" class="sec01.ex01.MemberBean" scope="page" /> <%-- 유즈빈 액션 태그를 이용해 유즈빈을 만듬 --%>

<%-- 회원 가입창에서 전송된, 동일한 이름의 매개변수에 해당되는 유즈빈 속성에 전송된 값을 설정 --%>
<jsp:setProperty name="m" property="id" value='<%= request.getParameter("id") %>' />
<jsp:setProperty name="m" property="pwd" value='<%= request.getParameter("pwd") %>' />
<jsp:setProperty name="m" property="name" value='<%= request.getParameter("name") %>' />
<jsp:setProperty name="m" property="email" value='<%= request.getParameter("email") %>' />

<%
	<%-- 자바 코드를 이용해 빈에 설정할 필요가 없음 --%>
	/*
	String id = request.getParameter("id");
	String pwd = request.getParameter("pwd");
	String name = request.getParameter("name");
	String email = request.getParameter("email");
	 
	m.setId(id);
	m.setPwd(pwd);
	m.setName(name);
	m.setEmail(email);
	*/
	
	MemberDAO memberDAO = new MemberDAO();
	memberDAO.addMember(m);
	List membersList = memberDAO.listMembers();
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 목록창</title>
</head>
<body>
	<table align="center" width="100%">
		<tr align="center" bgcolor="#99ccff">
			<td width="7%">아이디</td>
			<td width="7%">비밀번호</td>
			<td width="5%">이름</td>
			<td width="11%">이메일</td>
			<td width="5%">가입일</td>
		</tr>
<%
	if (membersList.size() == 0) {
%>
	<tr>
		<td colspan="5">
			<p align="center"><b><span style="font-size:9pt;">
				등록된 회원이 없습니다.</span></b></p>
		</td>
	</tr>
<%
} else {
	for(int i=0; i<membersList.size(); i++) {
		MemberBean bean = (MemberBean)membersList.get(i);
%>
	<tr align="center">
		<td>
			<%= bean.getId() %>
		</td>
		<td>
			<%= bean.getPwd() %>
		</td>
		<td>
			<%= bean.getName() %>
		</td>
		<td>
			<%= bean.getEmail() %>
		</td>
		<td>
			<%= bean.getJoinDate() %>
		</td>
	</tr>
<%
	} // end for
} // end if
%>
	<tr height="1" bgcolor="#99ccff">
		<td colspan="5"></td>
	</tr>
	</table>
</body>
</html>

 

2. 실행 결과는 자바 빈을 사용했을 때와 같다.

http://localhost:8090/pro13/member3.jsp로 요청한 결과

 

3. 이번에는 회원 가입창에서 전달된 회원 정보를 <jsp:setProperty> 액션 태그를 이용해 유즈빈의 속성에 좀 더 편리하게 설정하는 방법을 알아보자.

member4.jsp 파일을 작성한다.

<%-- member4.jsp --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	import="java.util.*, sec01.ex01.*"    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="m" class="sec01.ex01.MemberBean" scope="page" />

<%-- 회원 가입창에서 전달된 매개변수 이름과 속성 이름이 같으면 같은 이름으로 값을 설정한다. --%>
<jsp:setProperty name="m" property="id" param="id" />
<jsp:setProperty name="m" property="pwd" param="pwd" />
<jsp:setProperty name="m" property="name" param="name" />
<jsp:setProperty name="m" property="email" param="email" />
<%
	String id = request.getParameter("id");
	String pwd = request.getParameter("pwd");
	String name = request.getParameter("name");
	String email = request.getParameter("email");
	/* MemberBean m = new MemberBean(id, pwd, name, email); */
	m.setId(id);
	m.setPwd(pwd);
	m.setName(name);
	m.setEmail(email);
	
	MemberDAO memberDAO = new MemberDAO();
	memberDAO.addMember(m);
	List membersList = memberDAO.listMembers();
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 목록창</title>
</head>
<body>
	<table align="center" width="100%">
		<tr align="center" bgcolor="#99ccff">
			<td width="7%">아이디</td>
			<td width="7%">비밀번호</td>
			<td width="5%">이름</td>
			<td width="11%">이메일</td>
			<td width="5%">가입일</td>
		</tr>
<%
	if (membersList.size() == 0) {
%>
	<tr>
		<td colspan="5">
			<p align="center"><b><span style="font-size:9pt;">
				등록된 회원이 없습니다.</span></b></p>
		</td>
	</tr>
<%
} else {
	for(int i=0; i<membersList.size(); i++) {
		MemberBean bean = (MemberBean)membersList.get(i);
%>
	<tr align="center">
		<td>
			<%= bean.getId() %>
		</td>
		<td>
			<%= bean.getPwd() %>
		</td>
		<td>
			<%= bean.getName() %>
		</td>
		<td>
			<%= bean.getEmail() %>
		</td>
		<td>
			<%= bean.getJoinDate() %>
		</td>
	</tr>
<%
	} // end for
} // end if
%>
	<tr height="1" bgcolor="#99ccff">
		<td colspan="5"></td>
	</tr>
	</table>
</body>
</html>

<jsp:setProperty> 액션 태그의 param 속성을 이용해 회원 가입창에서 전달된 매개변수 이름으로 해당 useBean의 속성에 자동으로 값을 설정한다.

 

4. member5.jsp 파일을 작성한다.

<%-- member5.jsp --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	import="java.util.*, sec01.ex01.*"    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="m" class="sec01.ex01.MemberBean" scope="page" />

<%-- 회원 가입창에서 전달받은 매개변수 이름이 일치하는 useBean 속성에 자동으로 값을 설정 --%>
<jsp:setProperty name="m" property="id"/>
<jsp:setProperty name="m" property="pwd"/>
<jsp:setProperty name="m" property="name"/>
<jsp:setProperty name="m" property="email"/>
<%
	MemberDAO memberDAO = new MemberDAO();
	memberDAO.addMember(m);
	List membersList = memberDAO.listMembers();
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 목록창</title>
</head>
<body>
	<table align="center" width="100%">
		<tr align="center" bgcolor="#99ccff">
			<td width="7%">아이디</td>
			<td width="7%">비밀번호</td>
			<td width="5%">이름</td>
			<td width="11%">이메일</td>
			<td width="5%">가입일</td>
		</tr>
<%
	if (membersList.size() == 0) {
%>
	<tr>
		<td colspan="5">
			<p align="center"><b><span style="font-size:9pt;">
				등록된 회원이 없습니다.</span></b></p>
		</td>
	</tr>
<%
} else {
	for(int i=0; i<membersList.size(); i++) {
		MemberBean bean = (MemberBean)membersList.get(i);
%>
	<tr align="center">
		<td>
			<%= bean.getId() %>
		</td>
		<td>
			<%= bean.getPwd() %>
		</td>
		<td>
			<%= bean.getName() %>
		</td>
		<td>
			<%= bean.getEmail() %>
		</td>
		<td>
			<%= bean.getJoinDate() %>
		</td>
	</tr>
<%
	} // end for
} // end if
%>
	<tr height="1" bgcolor="#99ccff">
		<td colspan="5"></td>
	</tr>
	</table>
</body>
</html>

<jsp:setProperty> 액션 태그에 param 속성을 생략하고 property 속성 이름만 지정하면 회원 가입창에서 전달받은 매개변수 중 같은 매개변수 값을 자동으로 설정해준다.

 

5. member6.jsp 파일을 작성한다.

<%-- member6.jsp --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	import="java.util.*, sec01.ex01.*"    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="m" class="sec01.ex01.MemberBean" scope="page" />
<jsp:setProperty name="m" property="*" /> <%-- 전송된 매개변수 이름과 빈 속성을 비교한 후 동일한 빈에 값을 자동으로 설정 --%>
<%
	MemberDAO memberDAO = new MemberDAO();
	memberDAO.addMember(m);
	List membersList = memberDAO.listMembers();
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 목록창</title>
</head>
<body>
	<table align="center" width="100%">
		<tr align="center" bgcolor="#99ccff">
			<td width="7%">아이디</td>
			<td width="7%">비밀번호</td>
			<td width="5%">이름</td>
			<td width="11%">이메일</td>
			<td width="5%">가입일</td>
		</tr>
<%
	if (membersList.size() == 0) {
%>
	<tr>
		<td colspan="5">
			<p align="center"><b><span style="font-size:9pt;">
				등록된 회원이 없습니다.</span></b></p>
		</td>
	</tr>
<%
} else {
	for(int i=0; i<membersList.size(); i++) {
		MemberBean bean = (MemberBean)membersList.get(i);
%>
	<tr align="center">
		<td>
			<%= bean.getId() %>
		</td>
		<td>
			<%= bean.getPwd() %>
		</td>
		<td>
			<%= bean.getName() %>
		</td>
		<td>
			<%= bean.getEmail() %>
		</td>
		<td>
			<%= bean.getJoinDate() %>
		</td>
	</tr>
<%
	} // end for
} // end if
%>
	<tr height="1" bgcolor="#99ccff">
		<td colspan="5"></td>
	</tr>
	</table>
</body>
</html>

<jsp:setProperty> 액션 태그의 property 속성에 *를 지정하면 JSP 페이지에서 자동으로 매개변수 이름과 속성 이름을 비교한 후 같은 이름의 속성 이름에 전달된 값을 알아서 설정해준다.

따라서 JSP나 HTML 페이지에서 전달된 데이터를 처리할 때 미리 매개변수 이름과 속성 이름을 동일하게 설정하여 편리하게 사용할 수 있다.

 

6. member7.jsp 파일을 작성한다.

<%-- member7.jsp --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	import="java.util.*, sec01.ex01.*"    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="m" class="sec01.ex01.MemberBean" scope="page" />
<jsp:setProperty name="m" property="*" />
<%
	MemberDAO memberDAO = new MemberDAO();
	memberDAO.addMember(m);
	List membersList = memberDAO.listMembers();
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 목록창</title>
</head>
<body>
	<table align="center" width="100%">
		<tr align="center" bgcolor="#99ccff">
			<td width="7%">아이디</td>
			<td width="7%">비밀번호</td>
			<td width="5%">이름</td>
			<td width="11%">이메일</td>
			<td width="5%">가입일</td>
		</tr>
<%
	if (membersList.size() == 0) {
%>
	<tr>
		<td colspan="5">
			<p align="center"><b><span style="font-size:9pt;">
				등록된 회원이 없습니다.</span></b></p>
		</td>
	</tr>
<%
} else {
	for(int i=0; i<membersList.size(); i++) {
		MemberBean bean = (MemberBean)membersList.get(i);
%>
	<tr align="center">
    	
        <%-- <jsp:getProperty> 태그를 이용해 useBean 속성 값에 접근 --%>
		<td>
			<jsp:getProperty name="m" property="id"/>
		</td>
		<td>
			<jsp:getProperty name="m" property="pwd"/>
		</td>
		<td>
			<jsp:getProperty name="m" property="name"/>
		</td>
		<td>
			<jsp:getProperty name="m" property="email"/>
		</td>
	</tr>
<%
	} // end for
} // end if
%>
	<tr height="1" bgcolor="#99ccff">
		<td colspan="5"></td>
	</tr>
	</table>
</body>
</html>

회원 가입창에서 전달받은 회원 정보를 일단 <jsp:setProperty> 액션 태그를 이용해 useBean 속성에 저장한 후 <jsp:getProperty> 액션 태그를 이용해 useBean의 속성에 접근하여 값을 출력한다.

 

7. http://localhost:8090/pro13/memberForm.html로 요청하여 회원 정보를 입력한 후 가입하기 클릭

회원 가입창에 회원 정보 입력 후 가입하기 클릭

전송된 회원 정보를 <jsp:getProperty> 액션 태그를 이용해 출력한다.


<jsp:param> 액션 태그는 <include> 액션 태그와 <forward> 액션 태그 사용 시 다른 JSP로 매개변수 값을 전송할 때 사용한다.

728x90