ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JavaBean <jsp:useBean>,<jspgetProperty>
    프로그램/JSP 2007. 11. 19. 19:11

    JavaBean은 데이터를 표현하는 것을 목적으로 하는 자바클레스이다.

    -------------------------------------------------------------
    public class BeanClassName implements java.io.Serializable{
        /* 값을 저장하는 필드*/
        private String value;

        /* BeanClassName의 기본 생성자 */
        BeanClassName(){
        }

        /*필드의 값을 읽어 오는 값*/
        public String getValue(){
            return value;
        }

        /*필드의 값을 변경하는 값*/
        public void setValue(String value){
            this.value = value;
        }
    }
    ---------------------------------------------------------------
    자바빈 규약에 따르는 클레스를 자바빈이라고 부르며,
    JSP 프로그래밍에서 사용되는 자바 빈 클레스는 위 예시 코드와 같이
    ①데이터를 저장하는 필드 , ② 데이터를 읽어 올 때 사용되는 메소드,
    ③값을 저장할때 사용되는 메소드로 구성된다.


    예제 ]
    property       value type    Read/Write
    id                   String          읽기/쓰기
    password       String          읽기/쓰기
    name              tring          읽기/쓰기
    address          String          읽기/쓰기
    registerDate     String          읽기/쓰기
    email              String          읽기/쓰기

    MemberInfo .java
    -----------------------------------------------------------------
    package madvirus.member;

    import java.sql.Timestamp;

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

    <jsp:useBean> 액션 태그를 사용하여 자바빈 생성하기.
    <jsp:useBean> 액션태그는 JSP 페이지에서 사용할 자바빈 객체를 지정해 주는 기능을 한다.
    <jsp:useBean id="[빈 이름]" class="[자바빈 클레스 이름]" scope="[범위]" />

    액션 태그의 각각의 속성은 다음과 같다.
    id - JSP 페이지에서 자바빈 객체에 접근할 때 사용할 이름이다.
    class - 패키지 이름을 포함한 자바빈 클레스의 완전한 이름이다.
    scope - 자바빈 객체가 저장될 영역을 지정한다. page,request,session,application 중
    하나를 값으로 갖는다. 기본 값은 page 이다.

    예를 들어 설명하면
    <jsp:useBean id="info" class="madviruse.member.MemberInfo" scope="request" />

    이것은 MemberInfo 클레스의 객체를 생성해서 이름이 id인 변수에 할당을 한다.
    그리고 request기본 객체의 info 속성의 값으로 생성된 객체를 저장한다.

    MemberInfo info = (MemberInfo)request.getAttribute("info");
    if( info == null){
        info = new MenberInfo();
        request.setAttribute("info", info);
    }

    이것은 <jsp:useBean> 액션 태그에서 중요한 점은 객체를 생성할 뿐만 아니라
    지정한 영역에 저장을 한다는 점이다. 그리고 이미 영역에 객체가 존재하고 있는 경우
    그 객체를 그대로 사용한다는 것도 중요한 점이다.

    다음은 <jsp:useBean>을 사용하여 MemberInfo객체를 생성한 후
    <isp:forword>를 사용하여 다른 페이지로 흐름을 이동시킨 예이다.
    --------------------------------------------------------
    <%@ page contentType = "text/html; charset=euc-kr" %>

    //이름이 member인 MemberInfo 클레스의 객체를 생성해서 request 기본 객체에 저장한다.
    <jsp:useBean id="member" scope="request" class="madvirus.member.MemberInfo" />

    //<jsp:useBean>액션 태그의 id속성에서 지정한 이름은 변수명으로 사용되기 때문에
    //스크립트코드에서 이 이름을 사용하여 생성한 객체에 접근할 수 있다.
    <%
        member.setId("madvirus");
        member.setName("빈님");
    %>
    <jsp:forward page="/useObject.jsp" />
    --------------------------------------------------------

    --------------------------------------------------------
    <%@ page contentType = "text/html; charset=euc-kr" %>
    <jsp:useBean id="member" scope="request"
                 class="madvirus.member.MemberInfo" />
    <html>
    <head><title>인사말</title></head>
    <body>

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

    <jsp:setProperty name="member" property="빈님" value="바뀜"/>
    <%= member.getName() %> (<%= member.getId() %>) 회원님 바뀌었습니다.
    </body>
    </html>
    ---------------------------------------------------------

    <jsp:useBean> 액션 태그의 class 속성 대신에 type 속성을 사용할 수도 있다.
    ---------------------------------------------------------
    <jsp:useBean id="member" type="madvirus.member.MemberInfo" scope="request" />
    ---------------------------------------------------------
    만약 type 속성을 사용하면 지정한 영역에 이미 객체가 존재한다고 가정한다.
    예를 들어, 위 코드에서는 request 기본 객체의 "member" 속성에
    이미 MemberInfo 객체가 존재한다고 가정하고 있으며,
    존재하지 않을 경우 새로 MemberInfo 객체를 생성하는 대신 에러를 발생한다.

    MemberInfo member = (MemberInfo)request.getAttribute("member");
    if( member == null){
        //에러를 발생시킨다.
    }


    <jsp:useBean> 액션 태그를 사용해서 객체를 생성하면,
    <jsp:setProperty> 액션 태그와 <jsp:getProperty> 액션태그를 사용하여
    자바빈 객체의 프로퍼티를 변경하거나 읽어 올 수 있다.
    [문법]
    <jsp:serProperty name="[자바빈]" property="이름" value="[값]" />

    <jsp:setProperty> 액션 태그의 각 속성은 다음과 같은 값을 갖는다.
    - name : 프로퍼티의 값을 지정할 자바빈 객체의 이름.
     <jsp:useBean> 액션태그의 id속성에서 지정한 값을 사용한다.
    - property : 값을 지정할 프로퍼티의 이름
    - value : 프로퍼티의 값. 표현식을 사용할 수 있다.

    예를 들어,
    자바 빈 객체의 name 프로퍼티의 값을 "최범균"으로 지정하고 싶다면 다음과 같이 지정한다.

    <jsp:useBean id="member" class="madvirus.member.MemberInfo" />
    <jsp:setProperty name="member" property="name" value="최범균" />


    value 속성 대신에 param 속성을 사용 할 수도 있다.
    param 속성은 파라미터의 값을 프로퍼티의 값으로 지정할때 사용된다.
    memberId 파라미터의 값을 자바빈 객체의 id 프로퍼티의 값으로 지정하고 싶다면
    다음과 같이 param 속성을 사용하면 된다.


    <jsp:setProperty name="member" property="id" param="memberId" />


    ※ param 과 value 속성은 함께 사용할 수 없다.

    property 속성의 값을 "*"로 지정하면 각각의 프로퍼티의  값을
    같은 이름을 갖는 파라피터의 값으로 설정한다.

    <jsp:useBean id="member" class="madvirus.member.MemberInfo" />
    <jsp:setProperty name="member" property="*" />

    위 코드의 경우 name 파라미터의 값을 name 프로퍼티의 값으로 ,
    address 파라미터의 값을 address 프로퍼티 값으로 지정하게 될 것이다.

    <jsp:getProperty> 액션 태그는 자바빈 객체의 프로퍼티 값을 출력할 때 사용된다.

    [문법]
    <jsp:getProperty name="자바빈 이름" property="프로퍼티 이름" />

    <jsp:getProperty> 액션 태그의 각 속성은 다음과 같다.
    - name : <jsp:useBean> 의 id 속성에서 지정한 자바빈 객체의 이름
    - property : 출력할 프로퍼티의 이름

    예를 들어, 자바빈 객체의 name 프로퍼티의 값을 출력하려면

    <jsp:getProperty name="member" property="name" />

    과 같이 쓰면 된다.

    예제소스
    -------------------------------------------------------------------
    <%@ page contentType = "text/html; charset=euc-kr" %>
    <html>
    <head><title>회원가입 입력 폼</title></head>
    <body>

    <form action="<%= request.getContextPath() %>/chap10/register.jsp" method="post">

    <table border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td>아이디</td>
        <td colspan="3"><input type="text" name="id" size="10"></td>
    </tr>
    <tr>
        <td>이름</td>
        <td><input type="text" name="name" size="10"></td>
        <td>이메일</td>
        <td><input type="text" name="email" size="10"></td>
    </tr>
    <tr>
        <td>주소</td>
        <td colspan="3"><input type="text" name="address" size="30"></td>
    </tr>
    <tr>
        <td colspan="4" align="center">
        <input type="submit" value="회원가입">
        </td>
    </tr>
    </table>

    </form>

    </body>
    </html>
    ---------------------------------------------------



    ---------------------------------------------------

    <%@ page contentType = "text/html; charset=euc-kr" %>
    <%
        //읽어올 파라미터의 케릭터 인코딩을 EUC-KR로 지정(한글 처리)
        request.setCharacterEncoding("euc-kr");
    %>

    <!--MemberInfo 자바빈 클레스의 객체를 생성해서 memberInfo 이름으로 지정-->
    <jsp:useBean id="memberInfo" class="madvirus.member.MemberInfo" />

    <!-- 파라미터의 값을 memberInfo자바빈 객체의 프로퍼티 값으로 저장-->
    <jsp:setProperty name="memberInfo" property="*" />

    <!-- memberInfo 자바빈 객체의 password 프로퍼티의 값을 memberInfo.getId()와 동일하게 지정.
    memberInfo 변수를 사용하여 id프로퍼티에 접근하고 있다 -->
    <jsp:setProperty name="memberInfo" property="password"
                     value="<%= memberInfo.getId() %>" />
    <html>
    <head><title>가입</title></head>
    <body>

    <table width="400" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td>아이디</td>
        <td><jsp:getProperty name="memberInfo" property="id" /></td>
        <td>암호</td>
        <td><jsp:getProperty name="memberInfo" property="password" /></td>
    </tr>
    <tr>
        <td>이름</td>
        <td><jsp:getProperty name="memberInfo" property="name" /></td>
        <td>이메일</td>
        <td><jsp:getProperty name="memberInfo" property="email" /></td>
    </tr>
    <tr>
        <td>주소</td>
        <td colspan="3">
        <jsp:getProperty name="memberInfo" property="address" />
        </td>
    </tr>
    </table>

    </body>
    </html>
    -------------------------------------------------------

Designed by Tistory.