관리 메뉴

거니의 velog

(9) 자바 코드를 없애는 액션 태그 3 본문

Java_JSP

(9) 자바 코드를 없애는 액션 태그 3

Unlimited00 2023. 9. 13. 20:40

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

* 앞 절에서는 useBean 액션 태그를 사용해 자바 코드를 사용하지 않고 자바 빈을 생성했다. 그러나 여전히 빈의 속성에 값을 설정할 때는 자바 코드에서 setter를 사용하고 있다. useBean에 접근해 속성 값을 설정하거나 가져오는 <jsp:setProperty> 액션 태그와 <jsp: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~7.jsp를 준비한다.

2. member3.jsp에서 <jsp:useBean> 액션 태그로 생성된 빈에 대해 <jsp:setProperty> 액션 태그를 이용해 빈의 속성을 설정한다. 이번에는 회원 가입창에서 전송한 회원 정보를 자바 코드 즉, setter를 사용해 일일이 설정하지 않았다는 것이 큰 차이이다.

<%@ 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 lang="ko">

    <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>

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

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

* 먼저 회원 가입창의 각 입력창의 매개변수 이름을 자바 빈 속성 이름과 동일하게 설정한다.

MemberBean의 속성 이름과 동일하게 설정한다.

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

<%@ 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");
  
   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 lang="ko">

    <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>

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

<%@ 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" />
<jsp:setProperty name="m" property="pwd" />
<jsp:setProperty name="m" property="name" />
<jsp:setProperty name="m" property="email" />
<!-- 회원 가입창에서 전달받은 매개변수 이름이 일치하는 useBean 속성에 자동으로 값을 설정해 준다. -->

<%
   MemberDAO  memberDAO=new MemberDAO();
   memberDAO.addMember(m);
   List membersList = memberDAO.listMembers();	
%>
<!DOCTYPE html>
<html lang="ko">

    <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>

7. member6.jsp를 다음과 같이 작성한다. <jsp:setProperty> 액션 태그의 property 속성에 * 를 지정하면 JSP 페이지에서 자동으로 매개변수 이름과 속성 이름을 비교한 후 같은 이름의 속성 이름에 전달된 값을 알아서 설정해 준다. 따라서 JSP나 HTML 페이지에서 전달된 데이터를 처리할 때 미리 매개변수 이름과 속성 이름을 동일하게 설정하여 편리하게 사용할 수 있다.

<%@ 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 lang="ko">

    <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>

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

<%@ 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="*" />

<!DOCTYPE html>
<html lang="ko">

    <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>
            </tr>
            <!-- <jsp:getProperty> 태그를 이용해 useBean 속성 값에 접근한다. -->
            <tr align="center">
                <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>
            <tr height="1" bgcolor="#99ccff">
                <td colspan="5"></td>
            </tr>
        </table>
    </body>

</html>

9. 다음 주소로 요청하여 회원 가입창에 회원 정보를 입력한 후 가입하기를 클릭한다.

- http://localhost:8090/pro13/memberForm.html

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

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